QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:46 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
1.Scipy:
6 Y$ F# F! ^  X/ K% `简介: Scipy 是一个开源的 Python 科学计算库,提供了丰富的数学、科学和工程计算功能。它建立在 NumPy 的基础之上,并扩展了其功能,使得科学计算更加便利。Scipy 包含了许多专门的子模块,涵盖了统计、优化、插值、积分、信号处理、图像处理、常微分方程求解等领域。
3 ^/ D8 s+ A! H0 W功能特点:4 f$ V. S- t1 }  C" S
提供了丰富的数学函数和常用的科学计算工具。
7 \* z4 O- i0 C. f: }4 ?2 `8 h包含了多种数值优化算法和方程求解方法。
1 m" a, E- Q& L提供了各种插值、积分、微分方程求解等功能。2 V" V! |! x5 Q9 B
内置了统计分析、概率分布等统计工具。
2 x6 [% \9 N4 b* A支持信号处理、图像处理、稀疏矩阵处理等功能。
' }, P& a4 H2 {8 w8 X0 x. ISymPy:1 Q- V2 S2 |! _7 Q, K( F6 J  E
简介: SymPy 是一个符号计算库,用于进行符号数学计算。它能够执行符号计算,包括代数运算、微积分、离散数学等,而不仅仅是数值计算。SymPy 提供了一个 Python 环境中的完整符号数学系统,可以用于解决各种数学问题,从基本的代数问题到复杂的微积分和微分方程。
6 Z- F5 C* @6 D3 z5 D( G功能特点:
2 K2 d. u' Q6 w& v3 K提供了符号计算的基本功能,包括代数运算、方程求解、微积分、离散数学等。4 K" m5 ~" Q+ t+ C! k. t
支持符号表达式的构建和操作,可以进行符号运算,推导和化简。* N- t$ C, s" `' y" P
可以用于数学符号推导、证明和解决问题。' H" x. K) z5 t5 W. }. h
可以生成 LaTeX 代码以用于文档和演示。
$ W+ w, R4 g& M) P5 w) @+ k4 x% m0 t2 B; k5 o3 g2 X
总的来说,Scipy 适用于进行数值计算和科学工程计算,而 SymPy 更适用于符号计算和数学推导。你可以根据自己的需求选择使用其中之一或两者结合起来使用。3 X; j# B5 w8 {% R
1.导入模块:
9 ?8 d. e2 ]  I; {! A. Y$ ]2 H
   import numpy as np
$ M4 S3 K0 Y/ T& U   from scipy.integrate import odeint
  x2 j+ N) k) m( _% t8 o" f; @  Y3 r   from sympy import *
) k  h% m" w4 J
* G6 z3 |* ^" M7 D7 {: ^: `2 N1 |. F. r) Z, p! K
2.numpy 是 Python 中用于科学计算的基本库,提供了大量的数学函数和支持多维数组的对象。5 i0 r6 q! P5 H4 `9 ~
3.scipy.integrate 模块包含了用于积分和解微分方程的函数。' v* _7 g7 g8 r0 X* L/ z
4.sympy 是一个符号计算库,用于进行符号数学计算。, Y9 l" Q2 D- c5 C  s$ t
1 A! W; u* z  D$ ]
; M' a, S6 W( \! u  z) @
5.微分方程和数值范围:. D& n% ?; u* p0 Q, w- O2 b

  U# o' p) U+ i" S   dy = lambda y,x:-2*y + x**2 + 2*x7 M" J. _- M: r+ o0 j0 f
   x1 = np.linspace(1,10,20)
& ^; ?! g3 N& S: f  `% A, U& u8 c  |: J4 D- ?* r
) Q' S# w, W1 ]3 q: g, u) l
6.定义了微分方程 dy,这是一个函数,表示了微分方程 $y' = -2y + x^2 + 2x$。5 q5 M' h# h/ p5 D! r) K) @
7.定义了一个包含 20 个点的线性空间 x1,用于数值解的计算。
; t5 D( R+ b' B# V* y( Q
* \) v4 U: V2 X; y+ b8 Y
# |- [! J5 g# V/ b4 o1 Y1 `7 s8.使用 SciPy 进行数值解:0 R* y0 U5 W+ {

4 e6 x, K$ H9 x* s* ]( ?- V   y1 = odeint(dy, 2, x1). p$ ]  g" U: Z2 j  @

% @' h7 @2 [& S, E- Y' U
% k, q# x3 W) v9 b9 B+ Z9.调用 odeint 函数对微分方程进行数值求解。$ z! K, Q0 c! Y  p8 B, Q, m) |
10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。
9 ^  l! d8 K  i1 ], P" ~% C11.数值解存储在 y1 中。
* n% s! u( z$ y1 L% B- r& a! }, x8 U. n8 ?! J( D

9 r- w$ l& K% r+ X0 L; h2 k12.使用 SymPy 进行解析解:
3 m" E0 i+ ]5 ]% ?* ]0 E
; T0 p( s+ B' M9 |9 r   eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x+ {; c: ^& k' D7 e- H
   con = {y(1): 2}
6 R. w( i5 I7 ~( ]4 l7 P$ z# y   f = simplify(dsolve(eq, ics=con))
) K. {. I+ ]- g. z  l* S+ D
. A# j+ p( C$ P& I4 m! ^
& }( N9 M7 q1 T3 I$ Y13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。
: M9 O6 h* t  l" ]" M. \, \& @14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。
3 w1 v$ \9 [- y$ ]5 u* p& A
) W4 j, @$ B. n, S6 [* {6 u
9 R  K8 ~8 q( I& I5 ?2 B15.代入值并求解:) L8 W' b$ P' A% K" S$ d
4 A) V& k2 n, E0 z
   x2 = np.linspace(1,10,100)/ u0 f& M$ u, p) h; e7 t
   y2 = []$ B+ W" l! m6 V- O8 [
   for each in x2:
; [2 b3 B7 B! H7 r       y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1])
6 A4 l/ [5 G$ m( ^% s
( R& U  x9 ?! m# ?: V  t8 t
' U9 b( T' I/ F16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。
5 P3 j1 v, z4 f* H6 F- H2 R17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。
  M5 b: Y9 m/ `8 y5 p
8 ]; L3 \1 J- K: t+ r' O, {
& h$ e/ d; g7 Q+ Q18.绘制图形:
) _* i( S( U+ k( R1 F# I
3 z& b2 A4 `2 p2 e6 o   plt.scatter(x1,y1, label='x1', color='coral')+ M6 x, P' p2 `1 v2 `% \7 Z3 y
   plt.plot(x2,y2, label='x2')
% G' k- @8 d' U" n5 ~0 l4 G   plt.legend()
7 D2 y5 t2 ^6 N" p8 S) B5 P
: @9 ]+ l# A1 o3 @, }4 u! V8 a6 |+ c# E$ u
19.使用 Matplotlib 绘制了数值解和解析解的图形。' G5 `' \) q& S" Q6 H
20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。
+ y2 U% n. ^( r' o6 D21.使用 plt.plot 绘制了解析解的连续曲线。
5 k: [  r% {% V0 k22.添加了图例。
9 R+ Y0 Q% E! Y# p# h
8 L% m* F& k# D8 K4 {3 s/ h  Y% }这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。
. p5 q: k" P/ N5 g3 m
1 y' D2 O( l  I4 w6 a6 o! m4 s. Y5 b. ~' c3 z  j( g5 S

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-8-9 07:10 , Processed in 0.614274 second(s), 55 queries .

回顶部