2015-12-07 23 views
-1
明確解決常微分方程

我的兩個第一階微分如下使用RK4

y1' = -sin(y0) + (gamma)*cos(y0)sin(beta * x) 

y0' = y1 

其中

(theta)'' = y, (theta)' = y1, theta = y0 

我原來的方程爲

(((d^2)*theta)/dt^2)=-sin(theta)+(gamma)cos(theta)sin(Bx) 

從t = 0到t = 40,我該如何求解theta作爲時間和圖的函數。系統從theta = 0 and d(theta)/dt = 0開始休息。

+1

這是令人困惑的閱讀。看起來你正在使用四階RK4在這裏解決二階ODE。真正?你可以編輯原始ODE到問題中嗎? – duffymo

+0

是的,我確定現在將它放入 – darren

+1

還不清楚。我期望看到一個獨立變量(時間= t)和一個因變量(theta)。所有其他人應該是常數。什麼是正弦的論據?那是什麼x?這些是真正的正弦還是餘弦,用theta作爲參數? (如果是的話,這是一個非線性ODE。) – duffymo

回答

0

看起來你似乎在模擬一個受力物理擺與振盪外力。

theta''+sin(theta) = gamma * cos(theta)*sin(beta*t) 

正如你已經正確識別,這需要被翻譯成1階系統,然後打包成一個向量值ODE FUNC

def odefunc(t,y): 
    y0, y1 = y 
    return y1, -sin(y0)+gamma*cos(y0)*sin(beta*t) 

如果常量是全局變量,或作爲參數

def odefunc(t,y,params): 
    y0, y1 = y 
    beta, gamma = params 
    return y1, -sin(y0)+gamma*cos(y0)*sin(beta*t) 

然後您必須使用lambda表達式將參數減少爲ODE積分器的標準格式。