QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-16 18:46 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
1.Scipy:: B7 h+ B8 z7 y1 k# `
简介: Scipy 是一个开源的 Python 科学计算库,提供了丰富的数学、科学和工程计算功能。它建立在 NumPy 的基础之上,并扩展了其功能,使得科学计算更加便利。Scipy 包含了许多专门的子模块,涵盖了统计、优化、插值、积分、信号处理、图像处理、常微分方程求解等领域。
4 y: x) S$ k: {5 _* W# v( @8 T: C0 W功能特点:/ T0 W% a4 H* N! t; \
提供了丰富的数学函数和常用的科学计算工具。
8 o. K, V' K, f包含了多种数值优化算法和方程求解方法。% ], j4 M( p! b9 `- \2 v
提供了各种插值、积分、微分方程求解等功能。. U1 W# K) N' x! I( a: L4 k
内置了统计分析、概率分布等统计工具。
- {( }+ x# ]4 |4 H, j+ S, {/ c+ D支持信号处理、图像处理、稀疏矩阵处理等功能。
, K0 C6 j5 S/ T/ e5 Z, @SymPy:& @' J# n" k/ l# o2 S* d; E
简介: SymPy 是一个符号计算库,用于进行符号数学计算。它能够执行符号计算,包括代数运算、微积分、离散数学等,而不仅仅是数值计算。SymPy 提供了一个 Python 环境中的完整符号数学系统,可以用于解决各种数学问题,从基本的代数问题到复杂的微积分和微分方程。
) r1 M3 y- Q' \, Y2 @! o5 w2 _功能特点:
# q# E, d: A! B7 G提供了符号计算的基本功能,包括代数运算、方程求解、微积分、离散数学等。
% A& o8 W" I" M/ x  ^+ F0 i支持符号表达式的构建和操作,可以进行符号运算,推导和化简。3 O+ x) y3 n6 S- ~" c4 Y
可以用于数学符号推导、证明和解决问题。
% C. U5 w# S; w可以生成 LaTeX 代码以用于文档和演示。: t  ~$ n! c* f+ N1 x
2 h& b: O1 n+ L+ m, C
总的来说,Scipy 适用于进行数值计算和科学工程计算,而 SymPy 更适用于符号计算和数学推导。你可以根据自己的需求选择使用其中之一或两者结合起来使用。7 w, n% g$ S7 l$ W' a
1.导入模块:
6 |  M& [6 T9 E: r/ D# T- }
; \- y" B3 L5 j( m% o6 p6 x) u   import numpy as np# G: g9 @, T* l7 [3 e
   from scipy.integrate import odeint
4 q  `" s# a8 }, I   from sympy import *
$ d0 w# d: }6 ]2 \
) z) \" n8 d5 Z) r6 }# s5 c: L/ m& D2 Y1 }1 Q% j5 a
2.numpy 是 Python 中用于科学计算的基本库,提供了大量的数学函数和支持多维数组的对象。5 z" g# O4 s0 q, ^3 c; g, I0 q/ K
3.scipy.integrate 模块包含了用于积分和解微分方程的函数。
$ Z7 G: d& H, n( I; Q; x4.sympy 是一个符号计算库,用于进行符号数学计算。! o  w, B1 E* p: J

6 T! b' P/ V: U- d0 f# B& c, U
* q$ W# O7 Q: X; J5.微分方程和数值范围:! F9 P, w7 O5 ^0 _0 ^$ j: w3 |

  A7 i' C. D& n* F- D4 o5 o. ~   dy = lambda y,x:-2*y + x**2 + 2*x
7 l* V& m) J9 V' [& U   x1 = np.linspace(1,10,20)# {: e9 ?+ d' T, D: l

2 |, X" p9 u4 D. i0 {, Y7 l' c. ~
7 R  F$ a6 _# s! `' ^3 k$ M) i6.定义了微分方程 dy,这是一个函数,表示了微分方程 $y' = -2y + x^2 + 2x$。
0 H, l0 J+ _% m9 P8 @9 |" I8 a. Z7.定义了一个包含 20 个点的线性空间 x1,用于数值解的计算。  Q, _9 W+ v! j$ F8 f

+ B# m6 V3 b' V; g3 |( j
. m+ L7 d2 P2 N6 ?8.使用 SciPy 进行数值解:: |& d, ?$ \$ ~/ g# V

8 J4 g( l" t9 j! L. c' [   y1 = odeint(dy, 2, x1)& y+ u  X' G  H

- N: X: r9 z# o/ u. [
* P7 x, S4 K  T2 u. Y' c1 f9.调用 odeint 函数对微分方程进行数值求解。2 x8 P) a" D( B7 b+ i( L3 @4 h
10.参数 dy 是微分方程的函数表达式,2 是初始条件 y(1)=2,x1 是自变量范围。
/ k& q* m+ [, ^11.数值解存储在 y1 中。# x! h8 G5 m+ l) f, k/ J: k* _
3 _; N, j  w( G5 q" @% I$ v

2 `. p; J+ I% Y& h/ d12.使用 SymPy 进行解析解:! L0 m6 E/ a4 J) H7 \& L
0 N2 [: O3 ~* n* @! i- L
   eq = y(x).diff(x) + 2*y(x) - x**2 - 2*x: R# ~3 |9 g! [" r
   con = {y(1): 2}
* t9 d! `3 b5 g, v5 I2 @   f = simplify(dsolve(eq, ics=con))
, u  u5 g/ x( {, v6 U/ |7 p5 A* G8 Y% s9 H. d+ _, @

5 `+ `/ G# D' f; v: I13.定义了符号微分方程 eq,并指定了初始条件 y(1)=2。
! b* g3 O" u: n3 t: @14.使用 dsolve 函数对微分方程进行解析求解,得到了解析解 f。
! t; L7 c9 E$ ?. X( r  P4 j8 {! \$ A3 C- N
9 J& l7 n3 \/ m) ]/ J/ t
15.代入值并求解:
' e/ h2 V: t: E$ l2 u
! c. d. J  g1 j, y   x2 = np.linspace(1,10,100)
; T; |' z8 m0 _; o   y2 = []
7 {# E1 m- D+ l- b9 t1 ^. [   for each in x2:
! K; n5 b$ j+ [. ]* @       y2.append(list(sorted(f.subs(x,each).evalf().atoms()))[1])( t6 n% ?  E& w/ O% x. u
. N- E$ ~* M$ ]/ ]1 D$ i- Z
; V# a$ n: b3 t9 X1 P
16.创建了一个更密集的自变量范围 x2,用于绘制解析解的曲线。
( e" A5 U6 {' y# u5 o/ v- ~17.遍历 x2 中的每个值,将其代入解析解中,并将结果存储在 y2 中。7 B! k3 q* I6 F8 S

  g" u! Y* r+ K, R2 T: B' K& ]: c0 F% ?3 W, I
18.绘制图形:" ?! d' y: j  S* T/ b3 M9 L: z

# @/ S" Y/ P# G4 y6 T   plt.scatter(x1,y1, label='x1', color='coral')7 ^1 F. g1 ]8 H" E
   plt.plot(x2,y2, label='x2')
5 ]. W& W. u& A9 N% ~/ t   plt.legend()0 U+ w  n8 e+ E/ n$ ^# A' f5 Y
# L0 P8 g5 W$ U  r# W

, y; j6 o  M6 H( _1 o. |$ e19.使用 Matplotlib 绘制了数值解和解析解的图形。) I9 V2 E# R% v  m# [/ @+ S
20.使用 plt.scatter 绘制了数值解的离散点,并用 coral 颜色表示。+ W" _9 V" j: Z& V* q
21.使用 plt.plot 绘制了解析解的连续曲线。
5 |8 Z+ ]5 X3 C22.添加了图例。! [1 B* c' g+ v9 @; t* p3 X
& @- i% V( e, D4 l% N0 i
这样,整个代码就完成了对微分方程的数值和解析解求解,并将结果可视化的过程。/ d' z; d! T8 T
( M  p& B9 e# O

9 l$ ^5 Z9 d9 b+ w

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-10 21:43 , Processed in 0.419542 second(s), 54 queries .

回顶部