初めて投稿します。
C言語で次の二つの微分方程式
y'=yの解をx=0~1の範囲
y'=-4yの解をx=0~4の範囲
を、Euler法、Heun法、Runge-Kutta法により求めるプログラムを作りたい。
初期条件はx=0,y=1で、また、間隔Δxを変えたときの解の変化も調べたい。
何とかEuler法のプログラムは完成?したのですが、残りのHeun法、Runge-Kutta法が全く分からずお手上げ状態です。C言語は全くの初心者なので簡単に解説(回答)して頂ければありがたいです。回答よろしくお願いします。
<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;
}
C言語のプログラミング
Re:C言語のプログラミング
Heun法、Runge-Kutta法をCでプログラミングする際の何がわからないのでしょうか?
何の解説が必要なのですか?
Heun法、Runge-Kutta法の理論はわかっているのですよね。
しかも、上のプログラムは自力で作れていますよね。
なお、ファイルを添付するときは、スペースやタブをアンダーバーで置き換えるのは
やめてください。
何の解説が必要なのですか?
Heun法、Runge-Kutta法の理論はわかっているのですよね。
しかも、上のプログラムは自力で作れていますよね。
なお、ファイルを添付するときは、スペースやタブをアンダーバーで置き換えるのは
やめてください。