| reidai5-1.c |
/*
* reidai5-1.c -- 微分方程式の初期値問題を Euler 法で解く
* http://nalab.mind.meiji.ac.jp/~mk/program/ode_prog/reidai5-1.c
*/
#include <stdio.h>
#include <math.h>
int main(void)
{
/* 開始時刻と終了時刻 */
double a = 0.0, b = 1.0;
/* 変数と関数の宣言 */
int N, j;
double t,x,h,x0,f(double, double);
/* 初期値 */
x0 = 1.0;
/* 区間の分割数 N を入力してもらう */
printf("N="); scanf("%d", &N);
/* 小区間の幅 */
h = (b-a) / N;
/* 開始時刻と初期値のセット */
t=a;
x=x0;
printf("t=%f, x=%f\n", t, x);
/* Euler 法による計算 */
for (j = 0; j < N; j++) {
x += h * f(t,x);
t += h;
printf("t=%f, x=%f\n", t, x);
}
return 0;
}
/* 微分方程式 x'=f(t,x) の右辺の関数 f の定義 */
double f(double t, double x)
{
return x;
}
|
このプログラムをコンパイルして12
実行すると、分割数
を尋ねてきますので、色々な値を入力して試してみ
て下さい。各時刻
における
の値(
) を画面に
出力します。
確認用にいくつかの
の値に対する場合の、
の値を書いてお
きます。
の場合
,
の場合
,
の場合
,
の場合
,
.
分割数
が大きくなるほど、真の値
に近付いていくはずです。