C言語のプログラム
C言語で2つの微分方程式をEuler法、Heun法、Runge-Kutta法により求めるプログラムを作りたい。ただし、初期条件はx=0,y=1とする。また、間隔Δxを変えたときの解の変化を調べたい。
Euler法のプログラムはどうにか分かったのですが、Heun法、Runge-Kutta法のプログラムがわかりません。
Euler法のプログラム
#include_<stdio.h>
#include_<math.h>
int_main(){
__double__a=0;
__double__b;
__int_____m=10;
__int_____n;
__double__h;
__double__x,y;
__double__dydx;
__int_____k;
__double__e;
__double__f;
__printf("オイラー法計算例:y=e^x,_y=1/e^4x\n\n");
__//_y_=_e^x
__b_=_1;
__for(n=100;n<=10000;n*=100){
____h_=_(b-a)/n;
____printf("y'_=_y:_h(=dx)_=_%.1e_(y=e^x)\n",h);
____x_=_a;_y_=_1;
____for(k=0;k<=n;k++)_{
______x_=_k*h;
______if(k%(n/m)==0)_{
________f_=_exp(x);
________e_=_fabs(y-f);
________printf("x=%.2f,_y=%f,_e^x=%f_er=%.0e\n",
________x,y,f,e);
______}
______dydx_=_y;
______y_=_y_+_dydx*h;
____}
__}
__printf("\n");
__//_y_=_1/e^4x
__b_=_4;
__for(n=100;n<=10000;n*=100){
____h_=_(b-a)/n;
____printf("y'_=_-4y:_h(=dx)_=_%.1e_(y=1/e^4x)\n",h);
____x_=_a;_y_=_1;
____for(k=0;k<=n;k++)_{
______x_=_k*h;
______if(k%(n/m)==0)_{
________f_=_exp(-4*x);
________e_=_fabs(y-f);
________printf("x=%.2f,_y=%f,_1/e^4x=%f_er=%.0e\n",
________x,y,f,e);
______}
______dydx_=_-4*y;
______y_=_y_+_dydx*h;
____}
__}
__return_0;
}
分かる方がいましたら、回答よろしくお願いします。
お礼
なんとか自己解決できました。ありがとうございます。