バーラル @ ウィキ

微分方程式オイラー法

数値解析のアルゴリズム Total《 -
数値解析の授業でオイラー法を知ったのでプログラミングしてみた!


<stdio.h>
<time.h>
<math.h>

#define
N 100000000 //分割数・・・配列決定のためマクロ!!
double x_value[N]; //x(t)用の配列
double end_value; //求めたいt
double h; //刻み幅
double con; //定数
clock_t start,end; //計測用

void calc_bibun(void);
void calc_shin(void);

int main(void){
//イニシャライズ
x_value[0]=0;			//初期値
end_value=1;			//計算するtの値
h=end_value/(int)N;		//刻み幅計算
con=(x_value[0]+0.25);	//定数計算

printf("刻み幅・・・・・・・%.20lf\n",h);
calc_shin();
calc_bibun();
printf("何かキーを押してください・・・\n");
getchar();
return 0;
}

void calc_bibun(void){
int i;	

start=clock();//calc_start
for(i=1;i<=N-1;i++){
	x_value[i]=x_value[i-1]+(-2*x_value[i-1]+(h*(i-1)))*h;
}
end=clock();//calc_end

printf("オイラー法・・・%.20lf\n",x_value[N-1]);
printf("処理時間:%d[ms]\n",end-start );
}

void calc_shin(void){
double x_shin;
x_shin=con*exp(-2*end_value)+(end_value-0.5)/2;
printf("理論値・・・・・・・%.20lf\n",x_shin);
}


タグ:

アルゴリズム
最終更新:2010年08月07日 09:19