2015-10-21 65 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