我试图解决像d2(phi)/dt = -(g/R) *sin(phi)
那样的钟摆式微分方程(它是泰勒经典力学中的滑板问题)。我是scipy和odeint之类的新手,所以我这样做是为了准备未来更复杂的数值解决方案。
我已使用here中的代码尝试导航编码,但我提出的所有内容都是phi(t)
的平面线。我认为这是因为我试图将二阶微分方程分成两个第一阶,其中一个不依赖于另一个(因为d(phi)/ dt出现) ;但我不确定如何修复它。
任何人都知道它有什么问题吗?
# integrate skateboard problem, plot result
from numpy import *
from scipy.integrate import odeint
import matplotlib.pyplot as plt
def skate(y, t, params):
phi, omega = y
g, R = params
derivs = [omega, -(g/R)*np.sin(phi)]
return derivs
# Parameters
g = 9.81
R = 5
params = [g, R]
#Initial values
phi0 = 20
omega0 = 0
y0 = [phi0, omega0]
t = linspace(0, 20, 5000)
solution = odeint(skate, y0, t, args=(params,))
plt.plot(t, solution[:,0])
plt.xlabel('time [s]')
plt.ylabel('angle [rad]')
plt.show()
答案 0 :(得分:1)
我怀疑这里有一个错误: - (g / R) * np .sin(phi)。也许你忘了为numpy lib import定义别名(例如:import numpy as np)。相反,你刚刚做了(来自numpy import *)。试试这个:
$form_state['input']['Offset']