- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
1.Scipy:
( L( A" v2 t1 ^6 G7 a简介: Scipy 是一个开源的 Python 科学计算库,提供了丰富的数学、科学和工程计算功能。它建立在 NumPy 的基础之上,并扩展了其功能,使得科学计算更加便利。Scipy 包含了许多专门的子模块,涵盖了统计、优化、插值、积分、信号处理、图像处理、常微分方程求解等领域。
+ I9 c3 n8 M2 A3 q& P功能特点:/ W6 ]1 \' [; a% W6 J
提供了丰富的数学函数和常用的科学计算工具。
& S: b _* W* c7 c. |包含了多种数值优化算法和方程求解方法。
& F) j7 K* `+ _& n提供了各种插值、积分、微分方程求解等功能。/ A& b% t& |, N( u' }
内置了统计分析、概率分布等统计工具。
9 y4 z. U* b4 i7 E7 n0 d1 u- U1 m5 }支持信号处理、图像处理、稀疏矩阵处理等功能。# f' \2 J" P- A3 v0 W7 @
SymPy:6 Q3 K% ?2 I9 ^' A% { `# j
简介: SymPy 是一个符号计算库,用于进行符号数学计算。它能够执行符号计算,包括代数运算、微积分、离散数学等,而不仅仅是数值计算。SymPy 提供了一个 Python 环境中的完整符号数学系统,可以用于解决各种数学问题,从基本的代数问题到复杂的微积分和微分方程。5 k% K) }! U& d, ]$ \
功能特点:# ]- x6 c5 e0 ^% F- v0 E
提供了符号计算的基本功能,包括代数运算、方程求解、微积分、离散数学等。
) T* }: C: k4 a1 n支持符号表达式的构建和操作,可以进行符号运算,推导和化简。
. p1 R+ t: |! |# r% _2 {可以用于数学符号推导、证明和解决问题。
: K. b! p5 q+ [* d, i1 L6 s可以生成 LaTeX 代码以用于文档和演示。
2 E, s- ~; x; W& |9 i0 U2 M4 M C% k( b$ U N2 `5 p0 G) u& t
总的来说,Scipy 适用于进行数值计算和科学工程计算,而 SymPy 更适用于符号计算和数学推导。你可以根据自己的需求选择使用其中之一或两者结合起来使用。* i' D; O+ o0 \% A' ~8 w" C
1.导入模块:, F( R( a! e3 J) U; N
& L; ~6 @& J: @+ y+ `' Q import numpy as np1 U+ v9 y4 @2 L% f
from scipy.integrate import odeint- s( I' S. s$ G i
from sympy import *
9 W$ c0 a7 A2 n) F. C5 I8 G) M: R D$ h% b8 c0 n2 s/ H2 a
/ @3 Q% x$ A( }3 W2.numpy 是 Python 中用于科学计算的基本库,提供了大量的数学函数和支持多维数组的对象。& Y9 D- D6 s9 l0 K
3.scipy.integrate 模块包含了用于积分和解微分方程的函数。! K* M/ r. l7 I- v( T
4.sympy 是一个符号计算库,用于进行符号数学计算。
* | C# G/ G7 O/ j9 f" N
3 ^9 _2 i: l! }+ ]2 W
( y, `. k4 u9 I- O+ |- h5.微分方程和数值范围:* S8 B2 T. b% T1 v; A8 R* x4 Q
- b9 T8 z h5 j" W2 ?6 @) s9 y5 L
dy = lambda y,x:-2*y + x**2 + 2*x
6 F. z+ g( q/ U4 b0 k9 _5 j x1 = np.linspace(1,10,20)! J' l+ ]. Q: j0 V4 _/ i
& j Z/ f" y; t4 z; P/ w: F4 J
# d+ P: a- r8 `- p- V
6.定义了微分方程 dy,这是一个函数,表示了微分方程 $y' = -2y + x^2 + 2x$。, }4 T, {) ?; s; W, _$ A
7.定义了一个包含 20 个点的线性空间 x1,用于数值解的计算。7 v( H: |. ?/ c. F) r
0 ^% L% R' K: E. ]0 @" v2 `( y
- |1 v+ h1 l+ Z4 Y( d
8.使用 SciPy 进行数值解:
8 U! g: }0 a# x, r7 E: |& s8 y: N' e3 n7 y" R' D
y1 = odeint(dy, 2, x1)2 C+ V$ |; C ` e: p* k
# ~& c0 Z) S, v8 J4 N; h
, R& _2 J9 |/ E* W2 I
9.调用 odeint 函数对微分方程进行数值求解。
6 j) l+ V R, Z; O: ^( ]10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。, {/ \- X' `. S) n2 R
11.数值解存储在 y1 中。
* w- j! y2 t5 B( [/ ~3 r# J2 r; S1 C, j. W) a6 s
3 `1 s H A" A4 t$ Y
12.使用 SymPy 进行解析解:
8 j' n/ ~0 s) \: ] I2 f% W/ c7 B" n7 \
eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x7 R& ?. k5 Z7 Y7 j
con = {y(1): 2}
' v7 ^4 t: l+ a- E f = simplify(dsolve(eq, ics=con))/ A; Z! g. u+ k Y
+ H0 @2 t; ^0 E3 H3 T/ \! T3 l+ n- d$ D2 `# h. i
13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。
g* K$ C& V0 N8 [, p6 J% Z14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。
! B; P' q% d3 q+ `) X& ]
& |" K6 s8 ~5 j1 I( V8 h3 P' J. f: ^* R+ X5 e2 |/ R
15.代入值并求解:+ z3 g, T; A& `; x8 E) E
! ?2 K- i- d. x. r
x2 = np.linspace(1,10,100)! Y# C1 Q6 U4 T) X6 P# f
y2 = []
7 F5 X/ L/ d/ p" q8 [6 V* ~0 z for each in x2:/ W4 l. m4 e- [1 `. e3 i( m
y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1]) D2 G; S- o# u3 F
, Z N3 Y" ~5 b- R; y5 ]
6 @# O I+ s# G- b8 x3 y16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。
& J9 N+ w/ g6 |' S17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。6 f. P6 j. h: m( q- @( S
) L1 _/ o* q/ J( |+ d1 e0 v* P
" k0 d/ \/ L3 B/ J
18.绘制图形:6 x. N1 M9 h5 K2 W, g
$ q. v. R0 s O. Z2 U7 e
plt.scatter(x1,y1, label='x1', color='coral')1 A) v1 o/ R+ d" i) l+ e8 E5 E3 y- \
plt.plot(x2,y2, label='x2')- R! P3 u/ I( [
plt.legend()
9 S& v' o9 }. }$ _# J" C4 A3 H! F) R2 f- P% ^' b% Z' _
R/ I% ]0 G0 L
19.使用 Matplotlib 绘制了数值解和解析解的图形。7 R6 @9 M; `( X. U
20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。
0 B8 |- V& P8 b# E21.使用 plt.plot 绘制了解析解的连续曲线。2 `# ]% [. Z& P: I
22.添加了图例。5 t9 t9 I/ x8 [' }3 e( E
4 }% P, l" q2 e+ j& d! ]这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。( G1 z$ G' M3 F- s; _) r
2 R# w6 U2 v: _0 l( R' v' \1 {- l
|
zan
|