求解常微分方程的函数 odeint

参考scipy的odeint函数,在MeteoInfo 3.5.5版本中增加了求解常微分方程的函数 odeint 。调用了Apache Commons Math库中的相关功能,并用Jython进行了封装。

求解受重力摩擦作用的摆锤角θ的二阶微分方程示例:

from mipylib.numeric.integrate import odeint

def pend(y, t, b, c):
    theta, omega = y
    dydt = [omega, -b*omega - c*np.sin(theta)]
    return dydt

b = 0.25
c = 5.0
y0 = [np.pi - 0.1, 0.0]
t = np.linspace(0, 10, 101)
sol = odeint(pend, y0, t, args=(b, c))

plot(t, sol[:, 0], 'b', label='theta(t)', linewidth=2)
plot(t, sol[:, 1], 'g', label='omega(t)', linewidth=2)
legend(loc='lower right')
xlabel('t')
grid()

Lorenz吸引子常微分方程组求解:

from mipylib.numeric import integrate

def lorenz(p,t,s,r,b):
    x,y,z = p          
    return s*(y-x), x*(r-z)-y, x*y-b*z   # dx/dt,dy/dt,dz/dt

t = np.arange(0, 30, 0.01)
track1 = integrate.odeint(lorenz, (0.0,1.00,0.0), t, args=(10.0,28.0,2.6))
track2 = integrate.odeint(lorenz, (0.0,1.01,0.0), t, args=(10.0,28.0,2.6))

axes3d()
plot3(track1[:,0], track1[:,1], track1[:,2], linewidth=2, color='r')             
plot3(track2[:,0], track2[:,1], track2[:,2], linewidth=2, color='g')   

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值