Я пытаюсь решить маятниковое дифференциальное уравнение, которое выглядит как d2(phi)/dt = -(g/R) *sin(phi)
(это проблема скейтборда в классической механике Тейлора). Я новичок в scipy и odeint и т. П., Поэтому я делаю это для подготовки к более сложным численным решениям в будущем.Маятниковая интеграция 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()