我正在尝试使用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解决相同的系统,但我想如果我明白在这里做什么它将是类似的。
谢谢。
答案 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);
}