2013-12-17 64 views
0

我想用歐拉方法和RK4(龍格庫塔四階方法)求解四個一階ODE的系統。 方程:使用歐拉的四個ODES系統

#define F1(C2)   C2 
#define F2(C1,C3)  k2/Da*C1*C3 
#define F3(C4)   C4 
#define F4(C1,C3)  b*k2/Db*C1*C3 

這是我需要幫助的部分代碼:

for (x=start; x<=end; x+=h){ 
    C1 = C1_0 + h * F1(C2); 
    C2 = C2_0 + h * F2(C1,C3); 
    C3 = C3_0 + h * F3(C4); 
    C4 = C4_0 + h * F4(C1,C3); 
    C1_0 = C1; 
    C2_0 = C2; 
    C3_0 = C3; 
    C4_0 = C4; 
} 

當循環到達所以從第一次計算它,它已經爲C1和C3值C4而不是等待下一步。所以這個方法全錯了。我想我會爲我的方程式需要功能,但我從來沒有這樣做過,所以如果任何人都可以更深入地解釋我,我將不勝感激。

後來我必須使用RK4來解決同一個系統,但是我猜如果我理解在這裏做什麼,它會是類似的。

謝謝。

回答

1

這聽起來像你使用C1,C2,C3,C4作爲「新」值,C1_0,C2_0,C3_0,C4_0作爲「以前的迭代」值。在這種情況下,您可以使用以下內容:

for (x=start; x<=end; x+=h){ 
    C1_0 = C1; 
    C2_0 = C2; 
    C3_0 = C3; 
    C4_0 = C4; 
    C1 = C1_0 + h * F1(C2_0); 
    C2 = C2_0 + h * F2(C1_0,C3_0); 
    C3 = C3_0 + h * F3(C4_0); 
    C4 = C4_0 + h * F4(C1_0,C3_0); 
}