/*
* euler.c --- 前進 Euler 法で次の常微分方程式の初期値問題を解く。
*
* dx
* ---- = x^2 (0<t<1)
* dt
*
* x(0)=1
*/
#include <stdio.h>
double f(double t, double x)
{
return x * x;
}
int main()
{
int j, N;
double a, b, h, t, x;
/* 解くべき区間 [a,b] は [0,1] で、初期値 x0=1 */
a = 0; b = 1; x = 1;
/* 区間を何等分するか */
printf("N:"); scanf("%d", &N);
/* 等間隔刻み */
h = (b - a) / N;
for (j = 0; j < N; j++) {
t = a + j * h;
/* 前進 Euler 法 */
x += h * f(t, x);
if (j + 1 == N / 2) {
printf("t=1/2 での x の値=%20.15f\n", x);
}
}
printf("t=1 での x の値=%20.15f\n", x);
return 0;
}
|