- 在线时间
- 481 小时
- 最后登录
- 2026-8-25
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7859 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2946
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1177
- 主题
- 1192
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
1.Scipy:$ ]5 A' C/ @% w/ ~/ i3 A7 c
简介: Scipy 是一个开源的 Python 科学计算库,提供了丰富的数学、科学和工程计算功能。它建立在 NumPy 的基础之上,并扩展了其功能,使得科学计算更加便利。Scipy 包含了许多专门的子模块,涵盖了统计、优化、插值、积分、信号处理、图像处理、常微分方程求解等领域。% m" P! P3 R7 z: j9 u
功能特点:
& o m, D) T# g提供了丰富的数学函数和常用的科学计算工具。# U, G: c2 H! r% q2 j' [; }! @
包含了多种数值优化算法和方程求解方法。
4 m# }. j; S1 C* F. }2 J7 p提供了各种插值、积分、微分方程求解等功能。3 r; q8 @: D/ y( k
内置了统计分析、概率分布等统计工具。
* J& m. J% w8 M3 o& K: M& P: ~9 a6 ?支持信号处理、图像处理、稀疏矩阵处理等功能。
8 B; d/ u/ ^$ O: D/ rSymPy:
" n6 U' O0 T+ x' A* A. c简介: SymPy 是一个符号计算库,用于进行符号数学计算。它能够执行符号计算,包括代数运算、微积分、离散数学等,而不仅仅是数值计算。SymPy 提供了一个 Python 环境中的完整符号数学系统,可以用于解决各种数学问题,从基本的代数问题到复杂的微积分和微分方程。
* \0 D( I) H% i& y' i) }功能特点:
0 A4 c+ P$ `8 n9 @+ f% M提供了符号计算的基本功能,包括代数运算、方程求解、微积分、离散数学等。
( g4 o4 \; M! V& D+ z9 Q6 |支持符号表达式的构建和操作,可以进行符号运算,推导和化简。8 t, m5 C! q8 N8 c' V# f
可以用于数学符号推导、证明和解决问题。
& B9 y9 U9 m4 e1 n可以生成 LaTeX 代码以用于文档和演示。: ^) A8 F0 u$ m. Q
7 X) r$ R3 f) p3 C总的来说,Scipy 适用于进行数值计算和科学工程计算,而 SymPy 更适用于符号计算和数学推导。你可以根据自己的需求选择使用其中之一或两者结合起来使用。* A/ N$ q4 ^5 `1 }3 a: g& o' Q
1.导入模块:: ^3 F! w1 r1 u. O/ ^5 N- _; N' `
+ I" @* r5 T- s7 x
import numpy as np! n( p; S3 d6 [* b* W; N
from scipy.integrate import odeint3 J. N* l! A4 M7 O4 \3 Z' i
from sympy import *
4 {% s4 x- Y( E& \2 U& m. P) T& S- K. Z3 A
' r) L+ }) Z( y" Y
2.numpy 是 Python 中用于科学计算的基本库,提供了大量的数学函数和支持多维数组的对象。0 c9 R8 K" w- A4 N$ H1 b2 C- S
3.scipy.integrate 模块包含了用于积分和解微分方程的函数。3 d* ]" q1 j7 l6 R+ B) z
4.sympy 是一个符号计算库,用于进行符号数学计算。
0 {1 I2 P# ~4 d8 P/ t+ n
) ~% \ V3 L; s4 D4 ^. W* h/ k8 p6 ~3 N- r- Y* g2 ~/ c
5.微分方程和数值范围:
& U2 h5 |9 N) [5 r/ P7 e
" ~1 u0 n& {7 m dy = lambda y,x:-2*y + x**2 + 2*x2 Y; ~) g# f9 j% g. F9 G6 j
x1 = np.linspace(1,10,20)- G' G8 v! M Q2 S4 h' }
- ~4 m! M/ y' W% g! ?
' S* G: [* ?" V6.定义了微分方程 dy,这是一个函数,表示了微分方程 $y' = -2y + x^2 + 2x$。
6 T6 O: P( c& o5 M! {% i7.定义了一个包含 20 个点的线性空间 x1,用于数值解的计算。
! a0 _- B0 ~+ I: i+ G1 w j7 N( w {8 L
# Z! o6 C; }' `) L( W) X8.使用 SciPy 进行数值解:: H% y' E8 i9 }( k' J ? \
7 S3 ], y. x" \- W% m1 t8 _# _- k y1 = odeint(dy, 2, x1)3 Z3 Q, `7 q/ b/ \) K% Z& ~1 a; H d
$ u4 V0 R$ r y+ p% H/ G/ Z' c, U% ~7 I; I
9.调用 odeint 函数对微分方程进行数值求解。
* }* g' \2 _- t4 Z9 h0 S; {) Z10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。
) N( U1 z, [. N3 d- R! D11.数值解存储在 y1 中。
" V1 G! B- @( M+ b& u
4 m; d7 j7 ~& m* s2 X. l: p6 d2 V; r, I& n' v9 U5 a+ b& p
12.使用 SymPy 进行解析解:
( u! _. E' X1 e3 w3 _# N
6 B6 w4 X6 }, }2 ^- ]: R, E* ` eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x
6 [' b! u& v3 ], p) R; Z con = {y(1): 2}
8 f4 Z# e: c: H m f = simplify(dsolve(eq, ics=con))
5 `/ F( P' j4 P3 L- \) M$ B* G9 {# W! z4 y) F F* R- K6 J8 ~ J
1 [+ v/ C0 N$ n13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。
7 i3 ?6 s! z$ K: N14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。
6 f6 |* s* B" Y0 N" p- a1 F/ E' O& z, ]
; i3 g& Z/ A4 S9 G, J5 o Y
15.代入值并求解:
( \, h# \6 }0 }! ?' ]6 \
) o8 f( V" W- \1 t3 F! |, y x2 = np.linspace(1,10,100)
! z; `8 c! h4 Z5 G1 t. ^/ ?, B2 e y2 = []' _/ e7 s$ o- u
for each in x2:2 f1 _9 p; ~: x% k( `" E1 U. f
y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1])
5 i9 C0 {/ F( |, W
1 n I6 d, z" M6 g2 y( S9 g4 T1 Y3 k7 K8 d5 K4 y
16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。' q9 \' v" f+ v' m! P% m' |6 D2 O
17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。" i) ~7 a& x& d! ~; _, M
- }' ]5 z1 y- ^* X, H) w8 X
8 A0 }* O% B4 v$ P) Z# k* n' p) Y
18.绘制图形:
8 ?2 L1 `7 g, X! B, `# H5 w+ `& S3 c6 Q
plt.scatter(x1,y1, label='x1', color='coral')
: q# W0 v3 U0 C plt.plot(x2,y2, label='x2'), ]$ ?* V: Y' }# K
plt.legend()1 y4 y% e, v9 F- K
# z4 V/ v. ^4 F# {2 }- B
* l+ p+ N* c& ]/ J0 {& o19.使用 Matplotlib 绘制了数值解和解析解的图形。# H) Z, G; g) C
20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。9 z$ a4 t4 E: }1 \
21.使用 plt.plot 绘制了解析解的连续曲线。
3 ^. ]1 m$ z$ |1 u8 ]; ?3 G22.添加了图例。
9 B8 l' I" U& q8 l: X7 b* u- y9 T" N# z( T6 \' Z2 {
这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。9 v8 r$ J% ^) w1 E% E0 t* ]
8 P1 K9 @ K' d* Y# a
% h3 a: X/ n1 Q( {' a! C$ u |
zan
|