QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:46 |只看该作者 |正序浏览
|招呼Ta 关注Ta
1.Scipy:
+ _: x( \, b& _; Q2 \) l简介: Scipy 是一个开源的 Python 科学计算库,提供了丰富的数学、科学和工程计算功能。它建立在 NumPy 的基础之上,并扩展了其功能,使得科学计算更加便利。Scipy 包含了许多专门的子模块,涵盖了统计、优化、插值、积分、信号处理、图像处理、常微分方程求解等领域。
& F! p* e+ J0 v3 W6 l- Y功能特点:
' s% T& O" ]- t8 c3 I提供了丰富的数学函数和常用的科学计算工具。
) _% ^' _& a! {, X% D$ o; @6 W5 Z. }包含了多种数值优化算法和方程求解方法。
7 o4 ?! z0 j* u" O- o& e) j提供了各种插值、积分、微分方程求解等功能。* V( Y" ]. m0 v2 Y+ }% e# I+ U6 x
内置了统计分析、概率分布等统计工具。/ G9 K) A6 o2 n) G- G+ P" q9 ~
支持信号处理、图像处理、稀疏矩阵处理等功能。
' N+ E0 d) Y3 {3 ESymPy:
, f) d! U  F0 ]5 h; ~" d简介: SymPy 是一个符号计算库,用于进行符号数学计算。它能够执行符号计算,包括代数运算、微积分、离散数学等,而不仅仅是数值计算。SymPy 提供了一个 Python 环境中的完整符号数学系统,可以用于解决各种数学问题,从基本的代数问题到复杂的微积分和微分方程。; J' P1 P( L& v2 w7 @6 [
功能特点:/ D( H0 F) M! u4 O  B
提供了符号计算的基本功能,包括代数运算、方程求解、微积分、离散数学等。
. E* e" H  {( `  J支持符号表达式的构建和操作,可以进行符号运算,推导和化简。: ^! {2 p2 s  {  b
可以用于数学符号推导、证明和解决问题。9 W3 }- h+ ?  o; d7 ~
可以生成 LaTeX 代码以用于文档和演示。2 d2 s( T8 C  {6 S

1 _) D3 S0 h! I" B总的来说,Scipy 适用于进行数值计算和科学工程计算,而 SymPy 更适用于符号计算和数学推导。你可以根据自己的需求选择使用其中之一或两者结合起来使用。: p; V0 f/ H3 E# R- x
1.导入模块:
) h5 d8 v! \' v
  o8 f" ~9 |5 F2 j+ e   import numpy as np
5 P8 O* O; w% z- {: T" q6 Z   from scipy.integrate import odeint
; y" K  t* g# V6 S   from sympy import *
$ r, ]1 g) x. N" Y$ ~5 f% F1 V* v# O# K

- H1 U6 Y+ l* `# W! y# ^2 C2.numpy 是 Python 中用于科学计算的基本库,提供了大量的数学函数和支持多维数组的对象。
5 m, c5 G6 m9 E0 L! j0 i" ~+ F3.scipy.integrate 模块包含了用于积分和解微分方程的函数。* M/ a) M- J8 b# e' ]! Y
4.sympy 是一个符号计算库,用于进行符号数学计算。; _7 @; W  @  P" M1 d' Q8 R
  C1 X" H6 k& s6 a  q0 J6 ^( V) }
/ }! ^  R3 R8 W( |
5.微分方程和数值范围:& x* I% F4 ]7 e1 F4 h

  R1 A1 C7 y1 ?9 [/ K5 K! t0 C   dy = lambda y,x:-2*y + x**2 + 2*x* F+ ]9 b& J1 r9 x
   x1 = np.linspace(1,10,20)9 E; b# x  O# b6 G
0 T. g: r  K+ d# x% v6 i0 X
: d1 a; p9 X4 E  f3 s
6.定义了微分方程 dy,这是一个函数,表示了微分方程 $y' = -2y + x^2 + 2x$。
, G4 n  r: {' W7.定义了一个包含 20 个点的线性空间 x1,用于数值解的计算。
* i5 W: [  B2 |5 f/ c; s6 Y& N' K' S' g
/ o5 W9 @/ W" d$ G! _0 m/ p
8.使用 SciPy 进行数值解:  V; W9 ~. Y# H) |/ f

4 W7 W( ^) r+ L. h! e$ b   y1 = odeint(dy, 2, x1)) e2 c. F; v: F9 n. w0 W( _

+ h" [) B2 g5 F7 K! j3 T, l) e9 X& \: ^7 `/ ?: N  o4 J
9.调用 odeint 函数对微分方程进行数值求解。
5 k, E9 L8 F$ v% S$ y6 ?( N7 ]10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。
: M3 D/ Y3 G) N- p2 _5 q& Q6 y  h) f11.数值解存储在 y1 中。
5 n( [8 O1 u, D2 h& S9 ~
* r2 d) S7 V. {+ u; T
7 h" z  |6 D3 B& t1 X) f! O12.使用 SymPy 进行解析解:% y5 F! Z. M# \5 }4 n; ^3 B# b7 L
, Q( I# z1 X9 }( |
   eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x
* T" p' H( j4 k$ l; b* G( x   con = {y(1): 2}
3 r3 b; f3 P# K9 C( c" W5 d* n   f = simplify(dsolve(eq, ics=con))
2 e8 S! y& S& w' e2 K
! O' g* L# t9 G1 S7 a% E( v* T1 G! k( B
13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。+ B: C: C7 A) I, A# P
14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。5 O! ~- H: E+ m' Y! k' @; t
5 o- E. N9 L# ?& V8 u

% G7 }6 [* i1 d/ u& R: S6 ~+ e. @15.代入值并求解:
; \5 U1 ^1 I4 E
9 {5 Q' a" v7 D- T   x2 = np.linspace(1,10,100)
4 O, \8 t6 H( M  ~+ u   y2 = []
, u6 r, `" e% e. {+ m" T   for each in x2:6 a3 _1 C( b' [8 E. _1 N3 x1 U
       y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1])& h5 V( w& o4 W+ e$ Q( m4 T

, n0 R, A$ P' }
0 I! N6 @; ^0 ~4 t- g$ n, N16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。+ r0 B! `& x' }9 o3 F
17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。' \8 g( x* r( j( I2 g. u

' M% b% C0 {. ]' ^+ g% _
% W* c. H$ A$ j7 |# p+ w* H; t18.绘制图形:
! k9 L+ {; k+ D# ^: R: o
) i1 l. L: w  b. v  {7 i* B6 a0 R   plt.scatter(x1,y1, label='x1', color='coral')
% m) \( Y7 D6 t3 o! c) x   plt.plot(x2,y2, label='x2')4 G; P9 @+ v- l7 r! q
   plt.legend()
9 A* {9 I. N  @! V; T, _9 Y  T3 p- l2 d1 V7 d# R" p

7 Z0 H/ A# g8 {* d( T6 C19.使用 Matplotlib 绘制了数值解和解析解的图形。+ q/ v  G5 W. {7 G8 I' g2 `/ V  Q! |
20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。
9 ]; \, k% d5 n2 X& E' |% p21.使用 plt.plot 绘制了解析解的连续曲线。- @' W; |5 l. ]2 U, k; ~
22.添加了图例。
  S; \  O8 E/ ^" y. C8 t
: [! R! x) H4 ^2 S- c这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。. _$ j% N' s0 _+ p

5 ~5 ~0 r  Z" p' y3 _' I+ G; ^
; L3 G  E/ \1 o! B  T

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-4-13 06:12 , Processed in 0.782323 second(s), 55 queries .

回顶部