- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7951 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2977
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
1.Scipy:% K; R. J. g$ |, w8 y4 S' w
简介: Scipy 是一个开源的 Python 科学计算库,提供了丰富的数学、科学和工程计算功能。它建立在 NumPy 的基础之上,并扩展了其功能,使得科学计算更加便利。Scipy 包含了许多专门的子模块,涵盖了统计、优化、插值、积分、信号处理、图像处理、常微分方程求解等领域。$ l, k3 D6 K0 K" ]
功能特点: p _& D4 |/ m8 d x$ a
提供了丰富的数学函数和常用的科学计算工具。
+ v. Z+ Z( r$ {2 z; ^包含了多种数值优化算法和方程求解方法。) `/ S( ~) V1 u7 x% }8 b% }0 Y$ e
提供了各种插值、积分、微分方程求解等功能。
# _# O4 |3 W' e& m内置了统计分析、概率分布等统计工具。& S h8 u2 k/ J$ M$ f# k& H. X
支持信号处理、图像处理、稀疏矩阵处理等功能。* a7 e, W# n" G/ i- Y, {
SymPy:4 B! |* L, K+ P4 U( O3 ?5 E
简介: SymPy 是一个符号计算库,用于进行符号数学计算。它能够执行符号计算,包括代数运算、微积分、离散数学等,而不仅仅是数值计算。SymPy 提供了一个 Python 环境中的完整符号数学系统,可以用于解决各种数学问题,从基本的代数问题到复杂的微积分和微分方程。6 D8 P6 j5 U0 x, K5 Q' b) u$ s
功能特点:
8 o# C% _: k! d, W6 c6 z( w, {提供了符号计算的基本功能,包括代数运算、方程求解、微积分、离散数学等。% B/ X# o: H* C+ l1 e2 _6 d1 m5 ^
支持符号表达式的构建和操作,可以进行符号运算,推导和化简。
1 |6 W' O3 \8 x, X% ]可以用于数学符号推导、证明和解决问题。1 r: ^" r3 y# J6 c W6 I
可以生成 LaTeX 代码以用于文档和演示。
0 t' T( E. r E4 M( |3 I/ t4 ~, }0 g1 ^6 p E% O. b$ n
总的来说,Scipy 适用于进行数值计算和科学工程计算,而 SymPy 更适用于符号计算和数学推导。你可以根据自己的需求选择使用其中之一或两者结合起来使用。1 ?$ l1 O4 C: w; `- [. Q4 _5 U
1.导入模块:
9 |: w/ y6 s3 {% r6 T; d/ x" Z" `2 A; O2 Q( {. R
import numpy as np" U# C; b/ _# [$ B
from scipy.integrate import odeint
$ v& z: E9 q3 j- {/ e- J: v9 e: a# R from sympy import *
3 l0 C d. [: `( ?& T6 E; M7 m6 f' Y2 |% a: V
: X& o3 k9 f" @8 j* ?; @
2.numpy 是 Python 中用于科学计算的基本库,提供了大量的数学函数和支持多维数组的对象。( |7 K8 A- h, t) X* t
3.scipy.integrate 模块包含了用于积分和解微分方程的函数。. f" s o. d* X
4.sympy 是一个符号计算库,用于进行符号数学计算。
8 @, \) L! x5 u% V# `0 Z" s( ^" q& H0 Y
( X$ F2 \1 Q) b- I9 @4 Q$ ^" d2 o
5.微分方程和数值范围:
2 u' n; d P, ~& B' }. Z$ [
, i) p6 M0 E I dy = lambda y,x:-2*y + x**2 + 2*x! d+ q! _- Z8 U) L
x1 = np.linspace(1,10,20)
' t. E+ r+ ?% x( r1 N7 H9 i9 u4 S# o2 |8 G
8 U* Y4 x+ m! x: ?
6.定义了微分方程 dy,这是一个函数,表示了微分方程 $y' = -2y + x^2 + 2x$。
+ N8 |& ^2 j* X+ M. @+ K7.定义了一个包含 20 个点的线性空间 x1,用于数值解的计算。
/ `9 K) A e# t6 O
* i* v$ V+ I9 N0 i
( J3 R$ U: _; E" ~# K6 `8.使用 SciPy 进行数值解:# x5 }0 p) e! e* W+ [8 q9 G" ~; m
0 @6 c( N& r: r
y1 = odeint(dy, 2, x1)
2 V! i$ [" J% c- ]- j& \* T+ ~7 |: Q; k }
* U0 y6 e5 q/ _9 `6 t; q& ]% Q0 P2 v W9.调用 odeint 函数对微分方程进行数值求解。
4 L" E: ?: w" t- }10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。7 T% l" A0 \# w0 {' W4 q
11.数值解存储在 y1 中。
$ `# u* f1 ?; p" I" J6 @! N- [) s" U" i/ {1 u: u' s
* x i3 |1 Z/ B9 j8 L- D12.使用 SymPy 进行解析解:
1 {9 u/ l6 Q9 ]& E0 B4 t1 I: k) m* r+ V; F' G. ? @' f- |, e6 m6 J
eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x s& v# m1 X* _4 n8 s8 E
con = {y(1): 2}
5 z) G6 U/ _0 h J; `: ^, b' Z# j f = simplify(dsolve(eq, ics=con))
: e& O4 k8 M9 S; K. [* |9 N) S4 e' a( D1 r" _5 t9 B
7 `% ^- Q" _. O! |" o13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。
4 G& W# i( R+ X8 a. Q4 @% i14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。
B3 r+ ~' s' L$ c
8 h5 X V( i" l/ _- h( }5 i
! @4 d0 ?& u- l3 v- N15.代入值并求解:
+ q3 t+ m9 L* `# P% c- C" K, z3 |9 _! V
x2 = np.linspace(1,10,100)
9 g) t5 F9 }1 p! G J( T y2 = []
# w: M ]# E& A for each in x2:8 F" Z& P2 V( y
y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1])
3 E, F; Q4 b7 {2 J( ], m4 \" c; N6 {! H
! v* D. J6 m) c) X; \
16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。
/ B9 `/ e i# Q1 b N17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。0 E1 j1 R7 c3 } Z; {+ E
) Q: D$ N( c: X+ L a- e' x
; |0 z2 B/ I* R18.绘制图形:6 V2 f- P2 W6 ?" a/ e
" @2 C/ p, T u' t0 j( e0 W
plt.scatter(x1,y1, label='x1', color='coral')
1 L# ]% K6 V/ Z+ O5 h" ~/ v1 B plt.plot(x2,y2, label='x2')& f& j- L6 F% c% r+ i" |) }) C
plt.legend()1 q/ d+ u* A+ h6 U* g7 d" ` y2 B9 C
* a' a' W R$ S3 o2 l% ~! ~
5 S8 [0 L. E9 `1 u19.使用 Matplotlib 绘制了数值解和解析解的图形。
+ {3 P, S1 I0 n: p% x5 [4 r( g20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。# Q+ i6 Z1 y5 j' H7 G0 m1 U
21.使用 plt.plot 绘制了解析解的连续曲线。
- o! _1 U# J+ e6 Z22.添加了图例。) I2 H3 u% |3 {, L, P" |
4 e9 F5 |; s2 f# z4 b% t! q, \
这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。
4 `9 e* n& G' W/ g' n6 n Y; p8 S5 A' A
2 J8 n6 Y$ O" f- N4 A# {( f7 q/ u) m) ]( }
|
zan
|