2015-10-21 88 views
1

我试图求解类似于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() 

回答

1

我怀疑这里的错误: - (G/R)* NP .sin(PHI)。也许你忘了定义numpy lib导入的别名(例如:import numpy as np)。相反,你只是(从numpy导入*)。试试这个:

def skate(y, t, params): 
    phi, omega = y 
    g, R = params 
    derivs = [omega, -(g/R)*sin(phi)] 
    return derivs