- 在线时间
- 478 小时
- 最后登录
- 2026-4-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7788 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
1.Scipy:* F: _/ w3 @/ N% v+ T. I
简介: Scipy 是一个开源的 Python 科学计算库,提供了丰富的数学、科学和工程计算功能。它建立在 NumPy 的基础之上,并扩展了其功能,使得科学计算更加便利。Scipy 包含了许多专门的子模块,涵盖了统计、优化、插值、积分、信号处理、图像处理、常微分方程求解等领域。+ N7 d- f! x$ }
功能特点:3 ]) D6 l2 `. v7 B! o; C3 ]
提供了丰富的数学函数和常用的科学计算工具。$ ~! Q3 I& @8 r
包含了多种数值优化算法和方程求解方法。
" x+ w8 |) D1 z& p. y' g, \& m7 c提供了各种插值、积分、微分方程求解等功能。
3 p6 }# { L: K内置了统计分析、概率分布等统计工具。
/ o5 N' f. o& Q) ^- Z支持信号处理、图像处理、稀疏矩阵处理等功能。
3 c9 |+ z. l% x& u6 x) K* uSymPy:
- [/ K* I0 M3 d( R/ `3 O# p7 T5 v& P8 }简介: SymPy 是一个符号计算库,用于进行符号数学计算。它能够执行符号计算,包括代数运算、微积分、离散数学等,而不仅仅是数值计算。SymPy 提供了一个 Python 环境中的完整符号数学系统,可以用于解决各种数学问题,从基本的代数问题到复杂的微积分和微分方程。
. |: A' s- [8 ]8 J5 W0 F功能特点:
- p3 O' f+ q6 e8 F# y% z/ a9 e2 L$ u提供了符号计算的基本功能,包括代数运算、方程求解、微积分、离散数学等。
7 n! c( }/ |, {4 B+ [支持符号表达式的构建和操作,可以进行符号运算,推导和化简。/ Y- ~6 R+ _0 G4 U6 W; Y
可以用于数学符号推导、证明和解决问题。8 {- F0 u$ P+ p7 u) w. |
可以生成 LaTeX 代码以用于文档和演示。
( r; _, {- G/ B6 X! |! W n* E9 g& X8 u
总的来说,Scipy 适用于进行数值计算和科学工程计算,而 SymPy 更适用于符号计算和数学推导。你可以根据自己的需求选择使用其中之一或两者结合起来使用。
7 p( s8 X, x- p, i6 y# L$ p1.导入模块:# @- t; Q% r, n) H+ W
- _5 o8 u9 I5 E' D# o3 g; q5 T import numpy as np
0 ^6 s8 @0 A: P3 I: a) }$ P from scipy.integrate import odeint* ]3 s7 v/ w7 i. B
from sympy import *, k/ E& i, Y+ ~5 d6 j( J& T' s
4 s0 W3 s t I3 \+ A
! M+ }0 N+ [( G' V' k* o
2.numpy 是 Python 中用于科学计算的基本库,提供了大量的数学函数和支持多维数组的对象。
+ U+ m/ J& e# R3.scipy.integrate 模块包含了用于积分和解微分方程的函数。
1 `1 G: v! h9 {- Y) o4.sympy 是一个符号计算库,用于进行符号数学计算。
. @7 c: z0 P5 p+ T# L1 P" E' s1 U% y; s
9 a5 ^5 m7 U# J) y9 C4 J
5.微分方程和数值范围:6 U% Y; h, X1 v7 s: ?
, p1 n1 [- r( F) l6 _& C6 C4 \1 S dy = lambda y,x:-2*y + x**2 + 2*x* N( \: G( O% E4 {& V+ q
x1 = np.linspace(1,10,20)
! v' w8 m/ ^( ?5 B: ?
1 b: A1 F1 I0 y- J( o* l
% O$ c9 E/ p" v) O6.定义了微分方程 dy,这是一个函数,表示了微分方程 $y' = -2y + x^2 + 2x$。; m9 K/ R; j! O$ V# n* H) X
7.定义了一个包含 20 个点的线性空间 x1,用于数值解的计算。% C+ _" h+ d( K8 W3 F# p4 J% K
4 n. P! j8 ]: X' H/ i5 o
- D3 A) f- w; H0 x
8.使用 SciPy 进行数值解:
2 e( M4 J- U. v8 U7 C
! @2 p( i& B5 k7 h1 u- Q y1 = odeint(dy, 2, x1)- M1 X5 W/ ?% t N
- ~ P7 a0 N. C3 _( y5 l, Z. x
! N! ~ H0 _0 h1 L9.调用 odeint 函数对微分方程进行数值求解。# P( V) z) G6 q
10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。/ ^# K4 R) t+ x$ A
11.数值解存储在 y1 中。
- }! ]" ~7 h D3 e+ X& T" p c$ D1 r+ D( V& u0 y2 e, m
% |$ H) f0 u: y6 O* o2 j
12.使用 SymPy 进行解析解:) h* X m5 e+ V2 @0 t6 ^
8 F0 C. Y2 U6 }/ V1 w eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x Z% r. M* D& @$ E5 Y: [6 ~. B
con = {y(1): 2}
8 x2 ^% E" ]1 d% W8 D7 M f = simplify(dsolve(eq, ics=con))* M$ W( B' g N* C" z6 `2 d; [
+ Z$ P! k/ S3 D ~
3 |0 c) ]0 o9 C f13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。
- ~1 p; s$ r/ N2 ]% }' D C14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。
; q$ A. q N/ {7 X F7 @) }& Q9 M5 w- W3 q
3 _* S, P: D9 v" E @* W15.代入值并求解:
4 B6 ]- R, C+ A8 `8 l3 ], x% R9 Y* o- {& g5 R, s* }3 B* I4 O
x2 = np.linspace(1,10,100)
' J7 y3 v- N6 C y2 = []
: e) F7 X4 B9 Z8 H4 ?9 n for each in x2:
; ?2 ?" C2 ?0 x; X y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1])( P0 w, k+ C$ j/ r- Y
, G( a: {8 z+ c" f
! E. p9 F% d/ w3 `7 {1 }. ?16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。
o$ `, L3 O" y; a17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。& l: ?* Z6 t9 S0 B+ ?3 f0 p0 l8 S" k8 I
9 U L6 G4 i. y# g3 u% w* R4 K7 F, L
18.绘制图形:
7 A8 @. z$ T. u, z- C
# i8 @# ~) [1 M' s plt.scatter(x1,y1, label='x1', color='coral')8 D" i: p4 T8 y
plt.plot(x2,y2, label='x2') t4 V2 I, O/ L( B
plt.legend()
. i8 l# [( ]8 c7 a% B/ N' Y* |2 Z/ {+ U
" ]1 O2 O: M% |1 T
19.使用 Matplotlib 绘制了数值解和解析解的图形。2 k3 U% [4 A! |1 ~
20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。 Z0 S. _* y9 j2 Q) h
21.使用 plt.plot 绘制了解析解的连续曲线。
! W2 x8 |4 p3 l& E) p8 J22.添加了图例。
+ i I! P9 [5 c2 F, P: F9 V# n+ i' C. s0 ~: Z
这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。
) T$ c: {; U+ L" k( M1 I- }# ?% q# k& J) t, q2 h+ j* b
- d8 I x$ P3 H* i( x) Q
|
zan
|