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