python解常微分方程
一、sympy.dsolve
首先,感觉最科学的是用sympy的dsolve解常微分方程,直接贴代码
import sympy as sydef differential_equation(x,f):return sy.diff(f(x),x,2)+f(x)#f(x)''+f(x)=0 二阶常系数齐次微分方程
x=sy.symbols('x')#约定变量
f=sy.Function('f')#约定函数
print(sy.dsolve(differential_equation(x,f),f(x)))#打印
sy.pprint(sy.dsolve(differential_equation(x,f),f(x)))#漂亮的打印
输出:
Eq(f(x), C1*sin(x) + C2*cos(x))
f(x) = C₁⋅sin(x) + C₂⋅cos(x)
如果学过二阶常系数齐次解法的话,很容易知道这是对的,你也可以试下更简单的微分方程验证。
二、scipy.integrate.odeint
这个用起来就比较麻烦了,不过用于画图还是很棒的。先看一个一阶微分方程的例子。
import numpy as np
from scipy.integrate import odeint
#一阶微分方程的例子
def diff_equation(y,x):#dy/dx=y,其实手工解的话,很容易知道,y=Cexp(x)return np.array(y)#微分方程格式,左边一定是dy/dx,返回右边
x=np.linspace(0,1,num=100)#初始点是0
result=odeint(diff_equation,1,x)#中间那个是y0初值,即x=0时y=1
plt.plot(x,result[:,0])#result整个矩阵的第一列
plt.grid()#网格
plt.show()#这是y=exp(x)的图像
输出:
然而二阶的话,就有点麻烦了。
import numpy as np
from scipy.integrate import odeint
#二阶微分方程
def diff_equation(y_list,x):#y''+y=0 二阶的话,要换成两个一阶微分方程的方程组#设y'=z#那么z'=y''=-y#手工解也很容易知道是 y=C1sin(x)+C2cos(x)y,z=y_listreturn np.array([z,-y])
x=np.linspace(0,np.pi*2,num=100)
y0=[1,1]#y(0)=1,y'(0)=1
result=odeint(diff_equation,y0,x)
plt.plot(x,result[:,0],label='y')#y的图像,y=cos(x)+sin(x)
plt.plot(x,result[:,1],label='z')#z的图像,也就是y'的图像,z=-sin(x)+cos(x)
plt.legend()
plt.grid()
plt.show()
输出:
对了,想知道更详细的参数就看官网吧:
1、http://docs.sympy.org/dev/modules/solvers/ode.html
2、https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.odeint.html
python解常微分方程相关推荐
- python解常微分方程龙格库_数值常微分方程-欧拉法与龙格-库塔法
大三时候在跳蚤市场闲逛,从一位数学院的学长那里买了一些闲书,最近翻出来刚好有李荣华.刘播老师的<微分方程数值解法>和王仁宏老师的<数值逼近>,结合周善贵老师的<计算物理& ...
- python解常微分方程(组)
本人目前初三,能力所限,如有不足之处,还望多多指教. 一周前看到了一个视频,于是我便想用python来求解这个问题. 〇.分析 假设在平面内有一带电粒子q,质量为m.空间内存在匀强磁场B,方向垂直于平 ...
- python解常微分方程_Python-sympy.dsolve求解常微分方程(组)
这里分别介绍怎么利用sympy.dsolve求解常微分方程和常微分方程组. #首先利用sympy.dsolve求解单个的常微分方程: #代码 from sympy import Function, d ...
- python解常微分方程龙格库_求解二阶常微分方程的RungeKutta四阶方法
我试着做一个简谐振子的例子,它将用龙格-库塔四阶法求解.要求解的二阶常微分方程(ODE)和初始条件为: y''+y=0 y(0)=0和y'(0)=1/pi 范围在0到1之间,共有100步.我用u作为辅 ...
- python解常微分方程龙格库_excel实现四阶龙格库塔法runge-kutta解二阶常微分方程范例.xls...
excel实现四阶龙格库塔法runge-kutta解二阶常微分方程范例,rungekutta,四阶rungekutta法,rungekuttamatlab,四阶rungekutta,rungekutt ...
- python解常微分方程龙格库_求解常微分方程组初值问题的龙格库塔法分析及其C代码...
求解常微分方程组初值问题的 龙格库塔法分析及其 C 代码 1 .概 述 由高等数学的知识可知,一些特殊类型的常微分方程(组)能够求出给定初 始值的解析解, 而在科学与工程问题中遇到的常微分方程 (组) ...
- 用python的scipy中的odeint来解常微分方程中的一些细节问题(适用于小白)
用python的scipy中的odeint来解常微分方程中的一些细节问题(适用于小白) 写在前面 最近有些需要解决常微分方程的问题,网上查了很多教程都不是很明晰,便自己研究了一段时间,写一点小白初次接 ...
- 用python实现解常微分方程组的简单示例以及用odeint解常微分方程的范例
背景: 包括两个部分,一个是演示怎么自己写代码解常微分方程,另一部分就是示范python怎么调用解常微分方程的函数. 下面的方程组给出洛仑兹引子在三个方向上的速度,求解运动轨迹 软件: python3 ...
- Adams隐式4阶方法解常微分方程,python实现
Adams隐式4阶方法解常微分方程,由4阶Runge-Kutta方法提供初值,隐式方法比显式复杂一些,主要是因为需要解方程.这里使用弦截法解微分方程. import math import numpy ...
最新文章
- 北京“十四五”高精尖产业规划:到2025年集成电路产业实现营业收入3千亿元...
- swoole redis mysql_教你使用swoole监听redis数据
- ITK:创建Image
- Python3函数和代码复用
- visio对象放入word显示不全_办公人士必学visio技能 手把手教你使用visio绘制项目全景图!...
- [ECMAScript] 说说你对class的理解
- 苹果X可以升级5G吗_苹果x可以用5g网络吗
- JSR 299 建议草案第二版已提交
- centos8 安装geany
- 这二十个问题,可能是你技术人生中已经或即将遭遇的痛点,怎么解?
- TCP长连接和短连接-深入浅出(还在总说http长连接吗)
- 阿里大鱼短信接口PHP版,精简版阿里大鱼短信SMS发送接口PHP实例
- UnityC# MD5验证
- 学习日志-勉励自己-自律
- RL(Chapter 3): Finite Markov Decision Processes (有限马尔可夫决策过程)
- Matlab关于画数据网格图
- jdk17下载详细步骤
- 60岁代码匠的几篇小作文,解决了大多数程序的迷茫(上)
- 【树莓派】关于树莓派2代,更新最新内核后,DS18B20温度传感器无法找到对应文件的问题的解决
- 1455 B - Jumps