在C中使用Runge-Kutta方法的二阶ODE

时间:2017-05-27 14:06:03

标签: c numerical-methods runge-kutta

我想用一组二阶方程模拟粒子的运动 等式是

d2x/dt2 = 1 + dy/dt + dz/dt 
d2y/dt2 = 1 + dx/dt + dz/dt 
d2z/dt2 = 1 + dx/dt + dy/dt

向量V(dx/dt dy/dt dz/dt)X(x y z)V = [0 0 0]X = [0 0 0]最初

我将其实现为下面的一个ODE的C代码 CODE;

double X_function(double a[], double t, double at[],double b[],double c[]) {
//double yt, zt;
at[0] = a[0];
at[1] = 1 + b[0] + c[0];
double F = at[1];
return F;
}

我需要帮助了解如何在这种情况下使用R-K

1 个答案:

答案 0 :(得分:1)

你有一个等式

x''=F(x,x')

你重写为一阶系统

x' = v
v' = F(x,v)

将这个耦合的六维系统实现为一个功能

void derivs(double u[], double t, double du[]) {
    int j,k;
    for(k=0; k<3; k++) {
        du[k] = u[3+k];
        du[3+k] = 1;
        for(j=0;j<3; j++) 
            if(j!=k) du[3+k] += u[j]
    }
}

然后你可以以一般形式为一阶系统实现Runge-Kutta方法。