在线时间 480 小时 最后登录 2026-6-1 注册时间 2023-7-11 听众数 4 收听数 0 能力 0 分 体力 7823 点 威望 0 点 阅读权限 255 积分 2934 相册 0 日志 0 记录 0 帖子 1174 主题 1189 精华 0 分享 0 好友 1
该用户从未签到
1.Scipy:. J, ~- f3 Q+ e2 g$ B( r
简介: Scipy 是一个开源的 Python 科学计算库,提供了丰富的数学、科学和工程计算功能。它建立在 NumPy 的基础之上,并扩展了其功能,使得科学计算更加便利。Scipy 包含了许多专门的子模块,涵盖了统计、优化、插值、积分、信号处理、图像处理、常微分方程求解等领域。
1 L$ s3 }0 L" Z8 v3 b 功能特点:
5 O7 N1 Y4 ^" J' G, L- e1 B 提供了丰富的数学函数和常用的科学计算工具。
# y) I0 A B) }+ F1 Y' Q 包含了多种数值优化算法和方程求解方法。
1 ~( ]3 a) B2 `. J! Y. h- g$ k 提供了各种插值、积分、微分方程求解等功能。
) X! Y5 O/ h3 ?: ?* n0 K# p- u" o# f 内置了统计分析、概率分布等统计工具。6 v% `. x" }3 [4 @: |" \( P
支持信号处理、图像处理、稀疏矩阵处理等功能。
- f" q& x4 e2 ~+ F Y SymPy:
3 K" L. B9 _: |4 \: ^- g9 n 简介: SymPy 是一个符号计算库,用于进行符号数学计算。它能够执行符号计算,包括代数运算、微积分、离散数学等,而不仅仅是数值计算。SymPy 提供了一个 Python 环境中的完整符号数学系统,可以用于解决各种数学问题,从基本的代数问题到复杂的微积分和微分方程。, R- |3 s& H) R. @3 m0 o
功能特点:( [& @. P7 }/ V- N9 V$ I
提供了符号计算的基本功能,包括代数运算、方程求解、微积分、离散数学等。
" L8 h$ u0 [3 f 支持符号表达式的构建和操作,可以进行符号运算,推导和化简。
: _- q* e% y3 a& K 可以用于数学符号推导、证明和解决问题。7 V3 h" [3 }) H% m5 V) e9 g
可以生成 LaTeX 代码以用于文档和演示。
+ M! h! r6 V$ U7 o4 C2 c$ E4 }
2 a: x- l7 r- V# V; }: m 总的来说,Scipy 适用于进行数值计算和科学工程计算,而 SymPy 更适用于符号计算和数学推导。你可以根据自己的需求选择使用其中之一或两者结合起来使用。6 g6 F/ A" n* G; `. ~
1.导入模块:# G4 p, P0 B! ?+ J: j
( y$ C6 ^) K5 K/ N& f4 z
import numpy as np
+ k" F$ E4 L( h- Q5 T' H5 \: ] from scipy.integrate import odeint" z, a; {9 l* U5 \2 U3 u
from sympy import *
( U8 J& @, H4 A4 B: T' E
4 e; Q7 z$ [4 d
: q' }2 ~" K; P6 B8 O 2.numpy 是 Python 中用于科学计算的基本库,提供了大量的数学函数和支持多维数组的对象。7 T6 {* k' ?& R# D- @% O0 Z
3.scipy.integrate 模块包含了用于积分和解微分方程的函数。2 b) t; x4 s5 y) T$ x( i; D3 l
4.sympy 是一个符号计算库,用于进行符号数学计算。) ?6 Q ]/ d* b n( q, t0 a% `
3 a3 E s. x! ~! d* m F# F4 |% B
# L( \" I+ f$ N: i1 g" C1 A6 u
5.微分方程和数值范围:! ?2 ]2 }/ P- }, W; W5 C
4 r2 g; P" E E( x, l$ Y
dy = lambda y,x:-2*y + x**2 + 2*x+ d: {* I, Y2 B! [* t! ?
x1 = np.linspace(1,10,20)# R# _, P O5 X3 v& x, O0 M
b0 \ J3 _) q+ L
4 j1 k- u; k4 r5 ?
6.定义了微分方程 dy,这是一个函数,表示了微分方程 $y' = -2y + x^2 + 2x$。; L$ t0 B5 n4 t' }
7.定义了一个包含 20 个点的线性空间 x1,用于数值解的计算。
4 V0 \6 Y7 I3 \) u# }) o2 p # A' K+ _, @, A8 E, ^& C# s# q, F
2 y0 }: l2 E3 ?! ^/ G4 B 8.使用 SciPy 进行数值解:+ T- N9 K) w. t& A7 _
/ s, k9 Y1 w" M& [8 e1 x/ c- l* g% w
y1 = odeint(dy, 2, x1)
7 `' M3 k& I" q! T ! U) e+ j n& n3 l6 i2 h8 a
9 g" U+ ?7 B8 t/ R) T& W/ T4 | 9.调用 odeint 函数对微分方程进行数值求解。
! K d0 h! s' c5 q9 i2 `$ g- {# Y 10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。
+ f- H @( P5 u" u; j- U 11.数值解存储在 y1 中。
% G5 a% @" y, G% V% U 9 a+ @: c4 ~9 U! F3 S% l" y
' c; f H1 B: D0 p1 c3 j+ l$ q
12.使用 SymPy 进行解析解:
, E( p6 K* a" }. s; B& p8 B7 l G6 }, Q/ i! @/ ~! O
eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x! C/ E( u& `- S' O. Z0 H2 e
con = {y(1): 2}
. J- T% o/ v. Z0 o9 G7 o f = simplify(dsolve(eq, ics=con))
o0 c G. F8 U" s: N& d 0 X5 m: ]9 Q& y4 K* a2 Y
% g: N; ?" ?1 A2 V# V$ Y; l" g0 A
13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。5 A( E. U& U; K W: z
14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。
, |4 ?/ G+ Q3 S0 t M ! o d0 v0 c. L7 K+ B3 |( h
' |; v5 f- L7 d- G5 D. u! g# p 15.代入值并求解:# J- i0 n) _) s- F8 M1 {" x3 o
( k8 I) Y0 \2 p2 { x2 = np.linspace(1,10,100)! N+ Y+ F { s9 `; x( W- x, o* w
y2 = []
" T; f. S. P6 y% Y7 e: Z1 n for each in x2:' Y) g! w! F+ [: V0 t
y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1])5 g' D$ s3 ]& z
- u8 m, N( A/ d: C' Q
3 X" c) v$ J; o6 a0 q0 e6 \ 16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。
4 b$ A+ c- }. Q* k, B n$ h0 q) r2 M 17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。, V" ]- s+ q, }4 n6 P" K8 h
0 k3 ~4 L' J, j$ D0 F
. u7 b, N! E6 C! H7 W( C( B 18.绘制图形:
- j) y$ r! `" n% V' L2 S
( \$ J% E8 y5 q2 j) G plt.scatter(x1,y1, label='x1', color='coral')/ n8 D, Z5 b$ ~7 ?( k z" |
plt.plot(x2,y2, label='x2')2 A3 H5 t9 u" K8 n A
plt.legend(): M( w: M3 R' B3 Z' o& Q+ Q
?) }9 v# Y. n" U" I `
3 G) ~: a: T% y$ P2 I
19.使用 Matplotlib 绘制了数值解和解析解的图形。
% w# ^. s; [9 |. z) f1 H 20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。
- `1 R# Z: o9 y: p 21.使用 plt.plot 绘制了解析解的连续曲线。
( C% ?3 {. w' P 22.添加了图例。
* h* U# a1 @/ x9 f$ ]
/ N) D" z7 T2 R0 L7 y$ o& ?4 I8 k# R 这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。
6 ]. x' e# J; V5 W$ N4 b6 t4 E ' N( }/ D& L3 j5 t) N& D5 }9 M/ V
% P2 N2 w ^; N9 \5 R5 s" i) p9 ]
zan