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