| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> python解常微分方程(组) -> 正文阅读 |
|
[Python知识库]python解常微分方程(组) |
本人目前初三,能力所限,如有不足之处,还望多多指教。 一周前看到了一个视频,于是我便想用python来求解这个问题。 〇、分析
则可直接列出粒子的运动方程 将这个方程分解成x和y两个方向 联立即可求得该方程组的解。 一、sympy中的dsolve方法
首先声明符号x,y,q,m,B,g
再将微分方程表示出来
现在打印出sol(用jupyter notebook效果更好)?
很明显,这个式子非常冗杂,用trigsimp()方法化简
然后,可以将里面的积分常数算出
紧接着,将积分常量替换到x和y里面,我们就得到了解的最终形式
当然,这个解还可以写成这种形式 用plt画图来看看
但是sympy有一个缺点,当微分方程很复杂时,它会直接罢工。 于是另一个新的方法替我们解决了这个问题 二、scipy.integrate中的odeint方法
? 我们首先要创建一个函数,使它可以表示这个微分方程。 对于这个函数应该具备怎样的形式,先从一阶微分方程开始 比如说,我们要求解下面这个方程 它的解通过一些简单的分离变量即得 下面用odeint来解出它,令y(1)=1
同理,对于下面的一阶微分方程组 此时我们设向量u=(x,y) (列向量),方程组化为 其实对于任意的一阶微分方程,都可以写成这样的形式 f的含义就是 此时微分方程就可以化为 而f(t,u)正是我们要找的那个函数 odeint中支持向量输入,因此,可以这样构造这个函数
因此,对于二阶常微分方程 我们首先把这个方程化解成这样的形式 此时这是一个关于dy/dx和y的一个微分方程组 令u=(y,dy/dx),我们有
对于更高阶的微分方程也是同样处理 此时我们在回过头来看最初的问题,可以轻松的得到
定义一些常量?
使用odeint方法
将图像画出
odeint解这个方程也十分精确,与sympy相差无几。 最后我们还可以让他实现动画效果
如果要深度学习这两个库的话,还是推荐官方文档 sympy:https://docs.sympy.org/latest/tutorial/index.html scipy:https://docs.scipy.org/doc/scipy/reference/tutorial/index.html 最近还准备在更新几篇(如果期末不挂的话) ?注:我在b站上也发布了这篇文章 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 3:49:20- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |