euler.c |
/* * 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; } |