钟摆式odeint整合

时间:2015-10-21 01:09:42

标签: python integration numerical odeint

我试图解决像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()

1 个答案:

答案 0 :(得分:1)

我怀疑这里有一个错误: - (g / R) * np .sin(phi)。也许你忘了为numpy lib import定义别名(例如:import numpy as np)。相反,你刚刚做了(来自numpy import *)。试试这个:

$form_state['input']['Offset']