- 在线时间
- 479 小时
- 最后登录
- 2026-4-13
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7789 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
1.Scipy:
8 K i7 a0 M/ G' p3 [' V简介: Scipy 是一个开源的 Python 科学计算库,提供了丰富的数学、科学和工程计算功能。它建立在 NumPy 的基础之上,并扩展了其功能,使得科学计算更加便利。Scipy 包含了许多专门的子模块,涵盖了统计、优化、插值、积分、信号处理、图像处理、常微分方程求解等领域。1 K) j. G1 O* j P& d
功能特点:' o% l4 _( \! u& |
提供了丰富的数学函数和常用的科学计算工具。
, | M: m5 M" I* R y包含了多种数值优化算法和方程求解方法。% y/ Y4 W9 [# }) L# h3 P
提供了各种插值、积分、微分方程求解等功能。
- h& D& {4 `# M4 ]内置了统计分析、概率分布等统计工具。! v8 u1 y o3 P: B+ @. g+ O7 c
支持信号处理、图像处理、稀疏矩阵处理等功能。
7 X5 ^3 n0 `$ q0 \; o- V. @SymPy:
# J1 Y% x/ z1 O; T) u简介: SymPy 是一个符号计算库,用于进行符号数学计算。它能够执行符号计算,包括代数运算、微积分、离散数学等,而不仅仅是数值计算。SymPy 提供了一个 Python 环境中的完整符号数学系统,可以用于解决各种数学问题,从基本的代数问题到复杂的微积分和微分方程。" C0 K8 v/ \2 @3 D% Q" }
功能特点:4 w" y8 H s) I6 _# j! ]8 ^& Z
提供了符号计算的基本功能,包括代数运算、方程求解、微积分、离散数学等。4 r' v0 w# X6 N, x5 v/ G7 T
支持符号表达式的构建和操作,可以进行符号运算,推导和化简。
V4 p% ~/ |% W可以用于数学符号推导、证明和解决问题。( Q" W0 W+ |9 } w5 w8 |
可以生成 LaTeX 代码以用于文档和演示。
; |3 n! |/ I0 N/ B# q# g! \
$ S4 {. c5 _# k总的来说,Scipy 适用于进行数值计算和科学工程计算,而 SymPy 更适用于符号计算和数学推导。你可以根据自己的需求选择使用其中之一或两者结合起来使用。
3 Y0 S' w# F; t+ X. A' y- s- k; M1.导入模块:
9 U" G$ p% A9 R o4 n* V7 t) S$ r- r. i- `/ n
import numpy as np* v- u) j' }$ m+ A, U! N
from scipy.integrate import odeint; Z+ I' m/ c# ]# D
from sympy import *
7 b* x4 X0 P2 r* e; m. V2 F
1 b @# J6 I3 S! F' ]3 a6 x: K' W
6 @) F/ ^3 |" z2.numpy 是 Python 中用于科学计算的基本库,提供了大量的数学函数和支持多维数组的对象。
2 [9 w6 i6 ? x2 W3.scipy.integrate 模块包含了用于积分和解微分方程的函数。# b1 ?1 \: b* Q
4.sympy 是一个符号计算库,用于进行符号数学计算。
0 e3 o- G2 J9 c3 N+ `+ d+ d5 Q6 U
* z& u, ]: f- Q* F! r
5.微分方程和数值范围:
8 Z( }! ?1 g8 [
8 L! @$ Q/ |: i- _& U4 D dy = lambda y,x:-2*y + x**2 + 2*x% ?* Q! `8 E! L/ s4 a* `4 t& T8 F6 S
x1 = np.linspace(1,10,20)4 }# l( j" H' Y( I5 b2 h
/ B0 ^! u* P @3 Z7 Q# N9 g
1 h) b& O6 i1 m+ W$ n: `: e6 r6.定义了微分方程 dy,这是一个函数,表示了微分方程 $y' = -2y + x^2 + 2x$。
9 a& S8 z! G# J& m7.定义了一个包含 20 个点的线性空间 x1,用于数值解的计算。2 T. ?6 r$ X: M2 M2 \; Z9 z& K
5 A2 }. e) l& V1 N) J/ L8 `: r- S0 ?
2 v' P) }3 m/ n8 `
8.使用 SciPy 进行数值解:3 D# g& }7 [/ z4 c' S
. [( I" C0 y+ Q1 @5 O# e( S
y1 = odeint(dy, 2, x1)
7 P6 F& q! ]; Z. V$ ?( {3 s* [9 i9 \* z, {' S9 y
) U+ F9 }, v/ h% v9 M n9 k; |
9.调用 odeint 函数对微分方程进行数值求解。
4 h; E [# |% d8 i& f10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。
5 V$ a# {0 L5 o7 L11.数值解存储在 y1 中。: `7 v) d7 T. z0 m; S
/ l. `( g/ S8 x- e0 M, `" q% N1 i' I
12.使用 SymPy 进行解析解:5 g- P% t h) A8 z; k
/ w8 H1 A; G" [- @- g/ h eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x4 p. C; k. [5 b. F
con = {y(1): 2}
* R1 _ w6 m: U% {0 W" x+ F f = simplify(dsolve(eq, ics=con))
$ P; D1 ~3 n- W+ u
5 W2 P; k1 P) c% s- K. T/ c B y0 T: [& Z2 e6 |5 t
13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。
) }4 z+ G6 j4 @# k5 U7 G14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。
' Y. B. z) x6 a0 @2 B1 h% V1 H+ w W
% ? e6 B, E" R, o/ e/ p15.代入值并求解:! k% u% C2 |% n1 @ N8 p
; E- Q+ h7 v! h- u1 b" d
x2 = np.linspace(1,10,100)- Q- {7 p! r, Y2 J2 k A6 y
y2 = []; |4 \0 x K: M) P- T
for each in x2:# q7 i" p9 v f) l" M5 U8 X
y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1]) K1 W. I7 ~& D$ o
4 c x. x4 A( _# |# N
* f( C# f& k, ?: ~' T2 }
16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。
3 R; M+ D; Q1 f. d, G$ R, \17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。
# g! a l* `0 b. n) p& ?6 }; |
% s1 n* } ^) e$ H/ {) r1 N4 {) b( x
18.绘制图形:
( |- p i% o4 b4 u1 V9 }4 s7 {% D: P p0 M$ m# ]& e, n
plt.scatter(x1,y1, label='x1', color='coral')' o5 P1 M- A$ e7 I5 C; n
plt.plot(x2,y2, label='x2')
- `( a# D7 G; L& r, n9 n plt.legend()
1 }* j g) ]0 ?; [, J; v+ K
+ l L; Z$ E8 J. ?+ b: d+ L/ p
- \( g0 I6 m: Q' l0 r19.使用 Matplotlib 绘制了数值解和解析解的图形。
% d0 a$ E% N0 r) Z1 o' r20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。
( u R( P0 d; S$ g4 }) }8 A21.使用 plt.plot 绘制了解析解的连续曲线。 T9 [0 C0 Y G7 Y' e
22.添加了图例。
! F% g3 T+ |- t' v$ T& o7 w4 m* y
& c4 Z `, B! D# X! `这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。# N6 ~- h# p9 S2 ?$ F- k) j& G0 T
. ?7 J7 D7 h7 [; i0 }6 `& a% u0 n Z1 E) S- @! Z$ D0 k# P2 A
|
zan
|