二阶DE Runge Kutta 4 on C

时间:2018-08-02 18:40:22

标签: c differential-equations runge-kutta

我正在尝试使用C上的四阶Runge-Kutta解决一个简单的二阶DE。我的代码可以编译,但是结果有点尴尬,我找不到错误。我已经重复了多次计算,但是我总是得到相同的结果。我要解决的微分方程是:

enter image description here

我的代码是:

#include<stdio.h>
#include<math.h>

int main (){
    int b,t,h,w,m;
    double c1,c2,k1,k2,k3,k4,j1,j2,j3,j4,Y[15],Z[15];
    FILE * fp = fopen("VRL4.csv", "w");
    h=10000.0;
    Y[1]=0.0;
    Z[1]=1.0;

    for(m=1;m<=11;m++){ /*m is an auxiliary variable */
       b=(2.0*m-2.0)*100.0+10;
       c1=0.2222222222*b;   
       c2=0.14814814815*b;
          for(w=1;w<=11;w++){ /* w is an auxiliary variable */

            t=(w-1)*10000+1;

            k1=Z[w];
            j1=-c1*pow(t,-0.33333)*Z[w]-c2*pow(t,-1.33333)*Y[w];

            k2=Z[w]+0.5*j1;
            j2=-c1*pow(t+0.5*h,-0.33333)*(Z[w]+0.5*j1)-c2*pow(t+0.5*h,-1.33333)*(Y[w]+0.5*k1);

            k3=Z[w]+0.5*j2;
            j3=-c1*pow(t+0.5*h,-0.33333)*(Z[w]+0.5*j2)-c2*pow(t+0.5*h,-1.33333)*(Y[w]+0.5*k2);

            k4=Z[w]+j2;
            j4=-c1*pow(t+h,-0.33333)*(Z[w]+j2)-c2*pow(t+h,-1.33333)*(Y[w]+k2);

            Y[w+1]=Y[w]+0.166667*h*(k1+2.0*k2+2*k3+k4);
            Z[w+1]=Z[w]+0.166667*h*(j1+2.0*j2+2*j3+j4);

            fprintf(fp, "%d,%d,%lf\n",b,t,Z[w]);
            fprintf(fp, "%d,%d,%lf\n",b,t,Y[w]);
        }   
    }   

    return 0;
}

0 个答案:

没有答案