QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2692|回复: 0
打印 上一主题 下一主题

使用 scipy、sympy 求微分方程的数值解、解析解

[复制链接]
字体大小: 正常 放大

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:46 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
1.Scipy:
7 M' Y$ L9 s! i  [/ J8 O, k简介: Scipy 是一个开源的 Python 科学计算库,提供了丰富的数学、科学和工程计算功能。它建立在 NumPy 的基础之上,并扩展了其功能,使得科学计算更加便利。Scipy 包含了许多专门的子模块,涵盖了统计、优化、插值、积分、信号处理、图像处理、常微分方程求解等领域。
3 |$ w5 U9 R+ x4 u# ?0 t( k功能特点:$ ?+ N8 A& R, ~# M0 I3 w$ W
提供了丰富的数学函数和常用的科学计算工具。
* E; a0 W* T$ P包含了多种数值优化算法和方程求解方法。  v# Y3 Z1 Q: O/ G/ X& e
提供了各种插值、积分、微分方程求解等功能。
5 ~4 Q; h$ d6 l! N' l5 a内置了统计分析、概率分布等统计工具。) N# j+ S, I2 J, u7 r, h
支持信号处理、图像处理、稀疏矩阵处理等功能。1 _; J7 Y8 w" N2 [
SymPy:9 ~6 R; B* @5 o% S$ ~& j
简介: SymPy 是一个符号计算库,用于进行符号数学计算。它能够执行符号计算,包括代数运算、微积分、离散数学等,而不仅仅是数值计算。SymPy 提供了一个 Python 环境中的完整符号数学系统,可以用于解决各种数学问题,从基本的代数问题到复杂的微积分和微分方程。
8 r6 r+ a: x* H" ?2 L功能特点:, h& _+ x9 m4 c/ k
提供了符号计算的基本功能,包括代数运算、方程求解、微积分、离散数学等。
0 q0 l0 N' Q* h" h; A支持符号表达式的构建和操作,可以进行符号运算,推导和化简。2 F  }" Z9 J7 t& R" D- q8 O" s& H
可以用于数学符号推导、证明和解决问题。* V% f  J9 b1 J4 w1 @
可以生成 LaTeX 代码以用于文档和演示。$ v4 o  x  g6 X3 n% W$ d

& ]- l! ^' w2 _+ f" P总的来说,Scipy 适用于进行数值计算和科学工程计算,而 SymPy 更适用于符号计算和数学推导。你可以根据自己的需求选择使用其中之一或两者结合起来使用。
* p- g5 ~7 g& I! f0 \$ s1.导入模块:
7 T7 m; A1 c1 A) b  _: K0 s& o% }3 ?( l0 ^+ ^  R
   import numpy as np
$ }8 n; E+ @  x, q' L! j5 }   from scipy.integrate import odeint
9 t, Z$ F- ~6 X2 A. P   from sympy import *: c/ [5 e4 I2 @) k' U3 o

1 x6 N9 I. \: Y7 ?1 @+ R5 X. b2 S
8 W4 U' l+ y( W# i/ v2.numpy 是 Python 中用于科学计算的基本库,提供了大量的数学函数和支持多维数组的对象。, c8 o" J  q0 \: _5 O7 p% z/ Y
3.scipy.integrate 模块包含了用于积分和解微分方程的函数。  o6 l* f2 x% x: D3 [* e
4.sympy 是一个符号计算库,用于进行符号数学计算。
1 b% j+ @7 v; c6 U! F3 P) g9 ^1 V+ q7 y

& _+ [6 Y9 m! g! m4 T$ O( S5.微分方程和数值范围:: N% Z& o1 Q$ [8 j. `5 T

/ c6 e, Z8 G2 j   dy = lambda y,x:-2*y + x**2 + 2*x
- J) ?3 ^  G* r- S! r2 m   x1 = np.linspace(1,10,20)
4 n4 e/ v$ E. x# t7 v
# X2 i' }% }8 v
7 g) {0 V/ K' a2 I9 d% z- m6.定义了微分方程 dy,这是一个函数,表示了微分方程 $y' = -2y + x^2 + 2x$。0 l! t( J0 H7 e
7.定义了一个包含 20 个点的线性空间 x1,用于数值解的计算。
& f& e1 x) [" G. F+ P7 f; E' W1 o2 l

* ~) {  U" p" B: |4 A7 f8.使用 SciPy 进行数值解:/ g3 X: F/ N+ @  e

/ s6 {7 t3 h8 ]8 ^8 y   y1 = odeint(dy, 2, x1)1 p, v4 N/ l( d1 }. \$ V

6 t/ y. d) ^: X. v$ m7 Y0 `6 |% V( M$ b; o, ^% c) `) u. `3 W, j% ~
9.调用 odeint 函数对微分方程进行数值求解。
% F9 q- {5 z( s' i5 n, ?10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。
( }! O* A0 x  [4 P, F! @. \( C: M( h11.数值解存储在 y1 中。; i+ V% c+ W9 G+ [4 u6 Y- J
0 X+ T: G* [0 z2 K; B
! L6 S) Q- f" S9 v$ j
12.使用 SymPy 进行解析解:
: Q" p' |6 T2 H; |/ f% r6 a
# ?0 f2 t  p% y' A   eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x0 i, b9 u  E* G+ F6 Y
   con = {y(1): 2}
6 T) T8 W  v5 ?* n9 v   f = simplify(dsolve(eq, ics=con)): q* w) [. [) {5 d( ~4 _% l0 @+ b

7 u! K3 L  A' E: a$ c5 E0 U! v8 W5 R: E
13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。0 |3 T, r. W* m! P1 T2 S$ W. G
14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。0 y8 X+ }! G6 t% k- L
2 K! m. l3 o& w' P/ }9 K
+ P6 K+ D! d7 i5 ?& L, ?4 ?7 C
15.代入值并求解:
" M/ [, E9 J/ W/ S' @
$ j9 e) |6 b% Y* T   x2 = np.linspace(1,10,100)0 x; ~! ~3 K0 j% x
   y2 = []
! O$ N6 l8 E! }( |: G  R/ Z   for each in x2:: p! h, \, G+ I
       y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1])9 L4 H& t4 k1 Y* \& b9 w" q" u' d

( Y4 }' A& _7 o7 H
+ e$ i3 o& H& T# |1 ]% ~7 t16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。
/ E$ q- D  g& i17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。
$ X+ {  [; I5 ^" B! N
8 X. S8 |6 F7 X0 T& c" M/ J; `8 x4 }$ S, I3 ]6 x
18.绘制图形:
! Q  l; F& r4 [# J. J) a+ @, d3 m0 p( }3 m7 O* y% m2 V
   plt.scatter(x1,y1, label='x1', color='coral')7 C( K& H0 s3 K
   plt.plot(x2,y2, label='x2')
. ~0 I8 a% u) H   plt.legend()! l& s# S4 @; q, r

2 p) B# |/ w. t' f6 F
2 b( n# O1 W* L19.使用 Matplotlib 绘制了数值解和解析解的图形。7 I! _! v' n( J
20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。
2 [) s  ?+ R8 _( h5 |21.使用 plt.plot 绘制了解析解的连续曲线。1 u! h- t( d9 ]( I/ }
22.添加了图例。9 C; E) a1 k/ b% u1 G; R$ }

. q2 L8 r* D) t7 M: ]7 a- N5 `这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。
- l7 |! K8 Z( i+ H/ u
& U7 P2 k: l0 Y$ O! u5 Q9 ^9 i5 J0 Z4 }! X  O. C

13.differential_equation.py

953 Bytes, 下载次数: 0, 下载积分: 体力 -2 点

售价: 2 点体力  [记录]  [购买]

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-6-21 00:26 , Processed in 0.563886 second(s), 55 queries .

回顶部