QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:46 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
1.Scipy:
  ^* Y; ^$ s- l# l# J; _简介: Scipy 是一个开源的 Python 科学计算库,提供了丰富的数学、科学和工程计算功能。它建立在 NumPy 的基础之上,并扩展了其功能,使得科学计算更加便利。Scipy 包含了许多专门的子模块,涵盖了统计、优化、插值、积分、信号处理、图像处理、常微分方程求解等领域。
7 n- v* u! u- }& ~8 s4 z: @! y; j功能特点:. R: @; a+ E/ P' [- {4 O
提供了丰富的数学函数和常用的科学计算工具。; a  |: w. S, f0 I2 W, w
包含了多种数值优化算法和方程求解方法。' E3 v6 ?/ j8 D" d; a# i8 i0 `
提供了各种插值、积分、微分方程求解等功能。
1 |6 p" c- U! ~6 r" k内置了统计分析、概率分布等统计工具。
$ C2 \8 r  o0 r8 c* V支持信号处理、图像处理、稀疏矩阵处理等功能。9 g' A2 t: I6 _$ T) g
SymPy:  X; L. D0 [4 _: k7 u4 n& P8 y
简介: SymPy 是一个符号计算库,用于进行符号数学计算。它能够执行符号计算,包括代数运算、微积分、离散数学等,而不仅仅是数值计算。SymPy 提供了一个 Python 环境中的完整符号数学系统,可以用于解决各种数学问题,从基本的代数问题到复杂的微积分和微分方程。+ N4 e% \( P5 a% G& `7 z" c
功能特点:
; j" b, R# l# I0 Y提供了符号计算的基本功能,包括代数运算、方程求解、微积分、离散数学等。  D! g* D& A1 p6 x4 t! x7 y
支持符号表达式的构建和操作,可以进行符号运算,推导和化简。
" Z8 Y5 ]5 C) N$ |可以用于数学符号推导、证明和解决问题。  r0 l  G8 B8 T
可以生成 LaTeX 代码以用于文档和演示。
5 {- A" E" @% y/ d* Z
2 `% ?; e& z( a* A1 v! y4 {+ n7 ?总的来说,Scipy 适用于进行数值计算和科学工程计算,而 SymPy 更适用于符号计算和数学推导。你可以根据自己的需求选择使用其中之一或两者结合起来使用。& A, W$ U, y* `% p3 \8 s
1.导入模块:
! Y* Y3 N1 H, R$ i
$ L0 w, O9 t6 \- K( ?   import numpy as np
% m8 k) `3 Z% Y+ h* [   from scipy.integrate import odeint
9 s" K% d# c5 w. D+ N( f   from sympy import *
3 V3 I9 K; X" F7 i% |  a- v3 Y
1 D' ~8 |! v' E/ J& B
2 q$ e; z4 F* |& t7 a# j8 ?2.numpy 是 Python 中用于科学计算的基本库,提供了大量的数学函数和支持多维数组的对象。
. P' @) u. _! ^  ^1 S3.scipy.integrate 模块包含了用于积分和解微分方程的函数。
0 D  T$ t5 x1 ]& q4 [! k" W( ]4.sympy 是一个符号计算库,用于进行符号数学计算。
+ t  C+ O9 A% p2 Z7 U. C1 u
9 a) [: {( H( N9 u9 B" O% @% b& D
' m( Q5 Z- S$ V' H7 Y5.微分方程和数值范围:0 Q+ F$ S8 _! J& T4 @2 Z

5 g: ?% u2 q/ U. _& c% H0 A; ?. @* x   dy = lambda y,x:-2*y + x**2 + 2*x
* v1 Q. Z* ]0 K7 c$ g: Y7 ]   x1 = np.linspace(1,10,20)
/ C  |8 X. e! I' R3 c0 J
7 l5 C; K0 y3 C* o5 N: ?% K, z6 W
2 A9 e( x1 t+ J5 V9 `$ f6.定义了微分方程 dy,这是一个函数,表示了微分方程 $y' = -2y + x^2 + 2x$。8 J# [5 h& `1 G/ n
7.定义了一个包含 20 个点的线性空间 x1,用于数值解的计算。
8 R( Y9 ^* s" S( n& p
5 }+ Y( M4 E  H% d
, ^! X' E* {* [: E& |. `$ Y8.使用 SciPy 进行数值解:
' Z, r7 G, s& Y! X* r! k/ K' b. H  C! b# v& p
   y1 = odeint(dy, 2, x1)
$ c7 {9 K) D( |5 J0 a& @* H4 v0 ?" D' x0 I5 e; M+ M/ P

" B5 I7 x$ U0 @* N9.调用 odeint 函数对微分方程进行数值求解。
0 t2 J$ i" l6 ?10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。2 H8 p: x. y, [. V' B, H5 j4 W
11.数值解存储在 y1 中。2 ?/ _& f* N% i# Z4 [2 l

& w5 g0 z0 n# y) q# n! m1 R
" x4 E1 U0 d. U& }& J* b7 a12.使用 SymPy 进行解析解:* r: ^  H% a- D0 R7 }) t/ W1 h

5 f& F# i. e0 E   eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x
) x. Y+ U" u& o; g1 \5 ]   con = {y(1): 2}
# q- K: ?/ ]  C   f = simplify(dsolve(eq, ics=con))2 k! C  W7 E8 ^: R. X' b# L7 B  D

1 o8 a: K$ T/ i5 x- x1 B) K  K- b
13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。5 R& r) F) W3 H
14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。
0 c4 w* ~6 ?/ G6 e$ c2 ^$ j
) U+ e+ O. v3 g  D$ F+ S. c4 k6 W% o/ z6 @; |4 C; x
15.代入值并求解:7 x5 X) q6 G1 {1 D
9 V. Q# B) |4 \6 p# g
   x2 = np.linspace(1,10,100)
5 k4 \8 B  {! Q+ H: r: J6 H7 m) H# C; j   y2 = []
# t4 _8 q2 B2 I5 n! Z   for each in x2:, g, w, Z* _, C0 R1 x
       y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1])6 _% s! X2 d! g& a5 g% {
- }3 s: q6 e$ s; N( w

: H( u8 Y" J! N; [9 m16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。) x" ~7 G+ C! T7 }
17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。
5 X* a" h. I7 {6 ^9 W0 U  O2 n, ^6 @
3 j5 C# g# `4 B* K$ u% t
18.绘制图形:+ K. V  Y$ x* _6 x

' z0 N5 f2 y& C7 m8 s2 i2 u% K, I   plt.scatter(x1,y1, label='x1', color='coral')
2 d: ]% R8 _# D% U9 i4 ]1 V8 b0 U   plt.plot(x2,y2, label='x2')& c6 m/ d3 f- Q3 z
   plt.legend()
5 |9 B- d- n: {; n+ d2 m
9 y% n: z9 {% v; I9 G
1 e% H1 x8 ?1 [5 j( G& k3 B19.使用 Matplotlib 绘制了数值解和解析解的图形。( l" u0 g, b+ d. `, }
20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。
8 ~+ K4 B# o7 H7 H- \% O21.使用 plt.plot 绘制了解析解的连续曲线。
1 I. X# T+ R2 w* t6 g& x# @22.添加了图例。
, c# O3 M# L% n: a7 d( a* i8 r% a
这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。/ a( N( _& |9 K/ `8 ^* S; Z6 g

$ a8 E8 u4 ]6 J' d
; Q: U$ K8 O' n5 [. C# I- l$ M, Q

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-7-11 03:14 , Processed in 0.324379 second(s), 54 queries .

回顶部