使用Euler的四个ODES系统

时间:2013-12-17 17:21:28

标签: c

我正在尝试使用Euler方法和RK4(Runge Kutta四阶方法)求解四个一阶ODE的系统。 等式:

#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;
}

当循环达到C4时,它已经具有C1和C3的值,因此它从第一次开始计算,而不是等待下一步。所以这个方法都错了。我想我需要为我的方程式提供函数,但我之前从未这样做过,所以如果有人能再解释一下我会很感激。

稍后我必须使用RK4解决相同的系统,但我想如果我明白在这里做什么它将是类似的。

谢谢。

1 个答案:

答案 0 :(得分: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);
}