物理问题由二阶常微分方程给出: m* x‘'= s*(v - x')^2数学解被重写为2x 1’阶常数:u=x‘,u’= s(v - u)^2
边界条件: u0 = 0,x0 =0
t0=0,tmax=10.,dt=1.
但是我认为有一些bug,并且找不到
代码:
import numpy as np
from scipy.integrate import odeint
import pylab as pl
rho=10e3
Cd=1
r=0.05
m=5
s=rho*Cd*(r**2)*np.pi/(2*m)
v=1
t_max, dt = 10., 1.
time_vec = np.linspace(0, t_max, num=np.round(t_max/dt)+1)
x_vec=[0.,0.]
def d(x_vec,t):
return np.array([s*((v-x_vec[0])**2), x_vec[0]]) # u'[0]=s*((v-u_vec[0])**2), u[1]'=u_vec[0]
x,u = odeint(func=d, y0=x_vec, t=time_vec).T
pl.plot(time_vec, u[:], label='u[m/s]=x/t')
pl.plot(time_vec, x[:], label="x[m]")
pl.legend()
pl.show()发布于 2014-01-06 09:24:15
在我看来,你可能想使用x和u,而不是u和u‘。参见示例here (page 2)和here以及odeint文档。使用系统x'=u和u' = s(v - u)^2,d可以接受[x,u]作为输入并返回[x',u'],正如odeint所期望的那样。
https://stackoverflow.com/questions/20941223
复制相似问题