ZKX's LAB

Python模拟随机微分方程 python求微分方程组的数值解曲线01

2020-07-25知识12

python的scipy里的odeint这个求微分方程的函数怎么用啊? odeint实际是用来解微分方程组的。令z=y’,可以把方程化为方程组:y'=zz'=-b*y-a*z将y,z分别替换为y[0],y[1]就得到了程序里的returnarray([y[1],a*y[0]+b*y[1]]),这个程序把a,b前面的符号放到参数赋值里了。搞明白上面的就能用来解方程了,下面画图部分无关紧要hold('on')是用来保持之前画的曲线legend()显示曲线的标签如何使用python计算常微分方程? 常用形式odeint(func,y0,t,args,Dfun)一般这种形式就够用了。下面是官方的例子,求解的是D(D(y1))-t*y1=0为了方便,采取D=d/dt。如果我们令初值y1(0)=1.0/3*(2.0/3.0)/gamma(2.0/3.0)D(y1)(0)=-1.0/3*(1.0/3.0)/gamma(1.0/3.0)这个微分方程的解y1=airy(t)。令D(y1)=y0,就有这个常微分方程组。D(y0)=t*y1D(y1)=y0Python求解该微分方程。from scipy.integrate import odeintfrom scipy.special import gamma,airyy1_0=1.0/3*(2.0/3.0)/gamma(2.0/3.0)y0_0=-1.0/3*(1.0/3.0)/gamma(1.0/3.0)y0=[y0_0,y1_0]def func(y,t):return[t*y[1],y[0]]def gradient(y,t):return[[0,t],[1,0]]x=arange(0,4.0,0.01)t=xychk=airy(x)[0]y=odeint(func,y0,t)y2=odeint(func,y0,t,Dfun=gradient)print ychk[:36:6][0.355028 0.339511 0.324068 0.308763 0.293658 0.278806]print y[:36:6,1][0.355028 0.339511 0.324067 0.308763 0.293658 0.278806]print y2[:36:6,1][0.355028 0.339511 0.324067 0.308763 0.293658 0.278806]得到的解与精确值相比,误差相当小。args是额外的参数。用法请参看下面的例子。这是一个洛仑兹曲线的求解,并且用matplotlib绘。如何使用python的sympy模块解高阶微分方程,ytho是一个很有趣的语言,可以在命令行窗口运行。ytho中有很多功能强大的模块,这篇经验告诉你,如何使用ytho的ymy模块求解高阶。有没有专门画微分方程相图或方向场的软件,或者用Python如何实现? 有一个三变量(满足$x+y+z=1$)的微分方程组,有没有专门画相图或方向场的软件呢?另,我用python画了图…求助关于一个用Python求微分方程并算出极值 所说所有的变量都是对象。对象在python里,其实是一个指针,指向一个数据结构,数据结构里有属性,有方法。对象通常就是指变量。从面向对象OO的概念来讲,对象是类的一个。python fipy 求解偏微分方程 jingyan.baidu.com/article/46650658d71872f548e5f852.html 热量的传递由微分方程给出,可以简单地理解为热量按照温度降低最快的方向进行传递。公式右边是温度的梯度,左边。python中如何求微分方程的特解?谢谢 #y\"+a*y'+b*y=0from scipy.integrate import odeintfrom pylab import*def deriv(y,t):#返回值是y和y的导数组成的数组a=-2.0b=-0.1return array([y[1],a*y[0]+b*y[1]])time=linspace(0.0,50.0,1000)yinit=array([0.0005,0.2])#初值y=odeint(deriv,yinit,time)figure()plot(time,y[:,0],label='y')#y[:,0]即返回值的第一列,是y的值。label是为了显示legend用的。plot(time,y[:,1],label=\"y'\")#y[:,1]即返回值的第二列,是y’的值xlabel('t')ylabel('y')legend()show()

#微分方程#python函数#python

随机阅读

qrcode
访问手机版