我正在尝试求解类似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()
最佳答案
我怀疑这里有一个错误:-(g / R)* np.sin(phi)。也许您忘记为numpy lib import定义别名(例如:import numpy as np)。相反,您只是做了(从numpy import *)。尝试这个:
def skate(y, t, params):
phi, omega = y
g, R = params
derivs = [omega, -(g/R)*sin(phi)]
return derivs
关于python - 钟摆式积分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33249327/