next up previous
Next: この文書について... Up: 現象数理特論B 常微分方程式の初期値問題 (1) Previous: A..4 RKF45 (Runge-Kutta-Fehlberg 公式)

B. 参考: Euler 法のプログラム

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


next up previous
Next: この文書について... Up: 現象数理特論B 常微分方程式の初期値問題 (1) Previous: A..4 RKF45 (Runge-Kutta-Fehlberg 公式)
Masashi Katsurada
平成18年5月3日