如何用Python求解微分方程组
文章目录
- odeint简介
- 示例
odeint简介
scipy
文档中将odeint
函数和ode, comples_ode
这两个类称为旧API,是scipy早期使用的微分方程求解器,但由于是Fortran实现的,尽管使用起来并不方便,但速度没得说,所以有的时候还挺推荐使用的。
其中,odeint
的参数如下
scipy.integrate.odeint(func, y0, t, args=(), Dfun=None, col_deriv=0, full_output=0, ml=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0, hmax=0.0, hmin=0.0, ixpr=0, mxstep=0, mxhnil=0, mxordn=12, mxords=5, printmessg=0, tfirst=False)
其中func
为待求解函数;y0
为初值;t
为自变量列表,其他参数都有默认选项,可以不填,而且这些参数非常多,其中常用的有
args
func
中除了t
之外的其他变量Dfun
func
的梯度函数,当此参数不为None
时,若将col_deriv
设为True
,则可提升效率。full_output
如果为True
,则额外返回一个参数字典ml
=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0, hmax=0.0, hmin=0.0, ixpr=0, mxstep=0, mxhnil=0, mxordn=12, mxords=5,printmessg
为True
时打印信息。tfirst
当为False时,func
的格式为func(y,t...)
,否则格式为func(t, y...)
示例
对于常微分方程
θ ′ ′ ( t ) + b θ ′ ( t ) + c sin θ ( t ) = 0 b = 0.25 ; c = 5 θ ( 0 ) = π − 0.1 ; θ ′ ( 0 ) = 0 \theta''(t)+b\theta'(t)+c\sin\theta(t)=0\\ b=0.25;\quad c=5\\ \theta(0)=\pi-0.1;\quad \theta'(0)=0 θ′′(t)+bθ′(t)+csinθ(t)=0b=0.25;c=5θ(0)=π−0.1;θ′(0)=0
将其中的二阶导数项用一个新变量替代, ω ( t ) = θ ′ ( t ) \omega(t)=\theta'(t) ω(t)=θ′(t),则常微分方程可拆分成微分方程组
θ ′ ( t ) = ω ( t ) ω ′ ( t ) = − b ω ( t ) − c sin θ ( t ) \begin{aligned} \theta'(t)&=\omega(t)\\ \omega'(t)&=-b\omega(t)-c\sin\theta(t) \end{aligned} θ′(t)ω′(t)=ω(t)=−bω(t)−csinθ(t)
令 y = [ θ , ω ] y=[\theta, \omega] y=[θ,ω],则 y ′ = [ θ ′ , ω ′ ] y'=[\theta', \omega'] y′=[θ′,ω′],据此可设计函数func
import numpy as np
def pend(y, t, b, c):th, om = ydydt = [om, -b*om - c*np.sin(th)]return dydt
然后调用并求解
from scipy.integrate import odeint
y0 = [np.pi-0.1, 0]
t = np.linspace(0, 10, 101)
sol = odeint(pend, y0, t, args=(0.25, 5))
然后绘制一下结果
import matplotlib.pyplot as plt
plt.plot(t, sol[:,0], label="theta")
plt.plot(t, sol[:,1], label="omega")
plt.legend()
plt.show()
这个形状还是比较离奇的。
如何用Python求解微分方程组相关推荐
- python求解微分方程组_python – SymPy / SciPy:求解具有不同变量的常微分方程组...
我是SymPy和Python的新手,我目前正在使用Python 2.7和SymPy 0.7.5,其目标是: a)从文本文件中读取微分方程组 b)解决系统问题 我已经阅读了this question和t ...
- python求解微分方程组_python – SymPy / SciPy:求解具有不同变量的常微分方程组
我是SymPy和 Python的新手,我目前正在使用Python 2.7和SymPy 0.7.5,其目标是: a)从文本文件中读取微分方程组 b)解决系统问题 我已经阅读了this question和 ...
- 龙格库塔法解微分方程组的matlab程序,MATLAB实例源码教程:龙格库塔法求解微分方程组源代码实例.doc...
MATLAB实例源码教程:龙格库塔法求解微分方程组源代码实例.doc MATLAB实例源码教程龙格库塔法求解微分方程组源代码实例题目用经典 Runge-Kutta方法求下列一阶微分方程组的近似解y1 ...
- adams求微分方程c语言,ADAMS在求解微分方程组中的应用
ADAMS 在求解微分方程组中的应用在求解微分方程组中的应用 众所周知 ADAMS 具有强大的结算功能,在求解动力学问题方面可谓得心应手.在此 我想介绍一下它在求解非线性微分方程组方面的应用. 在工程 ...
- Matlab求解微分方程组
我们采用ode方法: (1)求解普通微分方程组:使用ode45方法 1. 创建一个函数文件eq2.m,在函数文件中描述这个解的微分方程组: %eq2.m文件 %描述微分方程组function dy=e ...
- matlab解二阶微分方程组,[微分方程组]急急急!用MATLAB按二阶龙格库塔法求解微分方程组,急用于毕业设计!...
急急急!用MATLAB按二阶龙格库塔法求解微分方程组,急用于毕业设计! 问题补充:今天才发现自己之前做的一点都不对,17号就交论文了,我傻了,急死了!求各位大侠帮帮忙.谢谢!要求解的微分方程如图所示. ...
- 数学建模学习(29):matlab求解微分方程组详细讲解,代码+案例讲解,学不会找我!
文章目录 前言 求解微分方程组 求解矩阵微分方程组 总结 前言 上一篇我已经详细讲过求微分方程,这一篇是对上一篇的补充,也就是变得稍微复杂一点,就是要求方程组了,如果你学会了上一篇,那么求解方程组其实 ...
- Mathematica求解微分方程组
Mathematica的符号式编程能够求解复数的微分方程组,matlab却提示不能,不知道理论基础.
- 龙格库塔法matlab求解微分方程组,微分方程组的龙格库塔公式求解matlab版.pdf
微分方程组的龙格库塔公式求解matlab版 微分方程组的龙格-库塔公式求解matlab版 南京大学 王寻 1. 一阶常微分方程组 考虑方程组 y'f x,y,z , y x y ...
最新文章
- AI 真的能够理解人类语言吗?
- spring cloud互联网分布式微服务云平台规划分析--服务统一配置中心
- 2019研究生新生大数据出炉!清华园迎来8900多名新主人
- java注释风格 与javadoc
- TypeSprict -- 基础类型
- 我的B端产品经理工作流
- 【Python之旅】第四篇(二):Python异常处理与异常捕捉
- SQL Server复制需要有实际的服务器名称才能连接到服务器 错误解决方案
- Gerrit修改前一次提交的方法
- 【矩阵论】矩阵的相似标准型(4)(5)
- Ubuntu16.04安装x11vnc服务并设置自动启动
- 如何开发一个小程序游戏?
- Howto: Download SLES or SLED Source Code
- 机器视觉实验三: 基于分水岭算法的肺部图像分割实验(OpenCV-python代码)
- 3D Tiles Next CesiumJS 路线图
- 专利编写——发明专利请求书
- 针对ARM的视频解码优化
- potplayer重置设置_potplayer 设置更清晰 - 卡饭网
- 倒排索引的数据结构:Term index、Term Dictionary、Posting List
- mysql中sql语句中常见的group_concat()函数意思以及用法,oracle中与其一样的功能函数是wmsys.wm_concat()
热门文章
- linux搭建天地伟业easy7,easy7视频监控系统客户端|天地伟业easy7监控客户端简洁版(Easy7 Smart Client Express)下载 V7.12 官方版 - 比克尔下载...
- linux socket函数详解,linuxSocket_函数.doc
- 微信多开工具 Mac版的安装及卸载教程
- 华科校园网内ubuntu12.04用锐捷客户端联网流程详解
- kvaser leaf light v2 安装 UBUNTU
- 瑞利信号公式(级联信道,多信道之和,多个瑞利信号之和,概率密度函数)
- 将 Visio 的图片复制到 ppt并能编辑
- 程序员年薪20万、30万、40万都是什么样的体验?
- 【Vue】Vue打包文件后需要添加版本号Version,来防止更新后的页面有缓存
- mysqldump 使用总结