文章目录

  • 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,
  • printmessgTrue时打印信息。
  • 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求解微分方程组相关推荐

  1. python求解微分方程组_python – SymPy / SciPy:求解具有不同变量的常微分方程组...

    我是SymPy和Python的新手,我目前正在使用Python 2.7和SymPy 0.7.5,其目标是: a)从文本文件中读取微分方程组 b)解决系统问题 我已经阅读了this question和t ...

  2. python求解微分方程组_python – SymPy / SciPy:求解具有不同变量的常微分方程组

    我是SymPy和 Python的新手,我目前正在使用Python 2.7和SymPy 0.7.5,其目标是: a)从文本文件中读取微分方程组 b)解决系统问题 我已经阅读了this question和 ...

  3. 龙格库塔法解微分方程组的matlab程序,MATLAB实例源码教程:龙格库塔法求解微分方程组源代码实例.doc...

    MATLAB实例源码教程:龙格库塔法求解微分方程组源代码实例.doc MATLAB实例源码教程龙格库塔法求解微分方程组源代码实例题目用经典 Runge-Kutta方法求下列一阶微分方程组的近似解y1 ...

  4. adams求微分方程c语言,ADAMS在求解微分方程组中的应用

    ADAMS 在求解微分方程组中的应用在求解微分方程组中的应用 众所周知 ADAMS 具有强大的结算功能,在求解动力学问题方面可谓得心应手.在此 我想介绍一下它在求解非线性微分方程组方面的应用. 在工程 ...

  5. Matlab求解微分方程组

    我们采用ode方法: (1)求解普通微分方程组:使用ode45方法 1. 创建一个函数文件eq2.m,在函数文件中描述这个解的微分方程组: %eq2.m文件 %描述微分方程组function dy=e ...

  6. matlab解二阶微分方程组,[微分方程组]急急急!用MATLAB按二阶龙格库塔法求解微分方程组,急用于毕业设计!...

    急急急!用MATLAB按二阶龙格库塔法求解微分方程组,急用于毕业设计! 问题补充:今天才发现自己之前做的一点都不对,17号就交论文了,我傻了,急死了!求各位大侠帮帮忙.谢谢!要求解的微分方程如图所示. ...

  7. 数学建模学习(29):matlab求解微分方程组详细讲解,代码+案例讲解,学不会找我!

    文章目录 前言 求解微分方程组 求解矩阵微分方程组 总结 前言 上一篇我已经详细讲过求微分方程,这一篇是对上一篇的补充,也就是变得稍微复杂一点,就是要求方程组了,如果你学会了上一篇,那么求解方程组其实 ...

  8. Mathematica求解微分方程组

    Mathematica的符号式编程能够求解复数的微分方程组,matlab却提示不能,不知道理论基础.

  9. 龙格库塔法matlab求解微分方程组,微分方程组的龙格库塔公式求解matlab版.pdf

    微分方程组的龙格库塔公式求解matlab版 微分方程组的龙格-库塔公式求解matlab版 南京大学 王寻 1. 一阶常微分方程组 考虑方程组     y'f x,y,z , y x y ...

最新文章

  1. AI 真的能够理解人类语言吗?
  2. spring cloud互联网分布式微服务云平台规划分析--服务统一配置中心
  3. 2019研究生新生大数据出炉!清华园迎来8900多名新主人
  4. java注释风格 与javadoc
  5. TypeSprict -- 基础类型
  6. 我的B端产品经理工作流
  7. 【Python之旅】第四篇(二):Python异常处理与异常捕捉
  8. SQL Server复制需要有实际的服务器名称才能连接到服务器 错误解决方案
  9. Gerrit修改前一次提交的方法
  10. 【矩阵论】矩阵的相似标准型(4)(5)
  11. Ubuntu16.04安装x11vnc服务并设置自动启动
  12. 如何开发一个小程序游戏?
  13. Howto: Download SLES or SLED Source Code
  14. 机器视觉实验三: 基于分水岭算法的肺部图像分割实验(OpenCV-python代码)
  15. 3D Tiles Next CesiumJS 路线图
  16. 专利编写——发明专利请求书
  17. 针对ARM的视频解码优化
  18. potplayer重置设置_potplayer 设置更清晰 - 卡饭网
  19. 倒排索引的数据结构:Term index、Term Dictionary、Posting List
  20. mysql中sql语句中常见的group_concat()函数意思以及用法,oracle中与其一样的功能函数是wmsys.wm_concat()

热门文章

  1. linux搭建天地伟业easy7,easy7视频监控系统客户端|天地伟业easy7监控客户端简洁版(Easy7 Smart Client Express)下载 V7.12 官方版 - 比克尔下载...
  2. linux socket函数详解,linuxSocket_函数.doc
  3. 微信多开工具 Mac版的安装及卸载教程
  4. 华科校园网内ubuntu12.04用锐捷客户端联网流程详解
  5. kvaser leaf light v2 安装 UBUNTU
  6. 瑞利信号公式(级联信道,多信道之和,多个瑞利信号之和,概率密度函数)
  7. 将 Visio 的图片复制到 ppt并能编辑
  8. 程序员年薪20万、30万、40万都是什么样的体验?
  9. 【Vue】Vue打包文件后需要添加版本号Version,来防止更新后的页面有缓存
  10. mysqldump 使用总结