01: #include <stdio.h>
02: #define NSTEPS 20                // 計算ステップ数
03: #define NDIM 30000               // 用意する配列の大きさ
04: #define X_MAX 2.0                // 計算する最大 x
05: 
06: double f(double x, double y);    // プロトタイプ宣言
07: 
08: //============================================================
09: // main 関数
10: //============================================================
11: int main(void){
12:   double x[NDIM], y[NDIM];      // 計算結果を入れる
13:   double dx, error;
14:   int i;
15:   FILE *out;                    // 計算結果を保存するファイル
16:   
17: 
18:   dx = X_MAX/NSTEPS;            // 計算のきざみ幅dxの計算
19:   x[0] = 0;
20:   y[0] = 0;
21: 
22: 
23:   //------- オイラー法の計算 --------
24: 
25:   for(i=0; i<NSTEPS; i++){
26:     x[i+1] = x[0]+(i+1)*dx;       //x[i+1]=x[i]+dxよりも精度が良い
27:     y[i+1] = y[i]+f(x[i],y[i])*dx;
28:   }
29: 
30: 
31:   //------- 計算結果をファイルに保存 --------
32: 
33:   out = fopen("result.txt","w");
34:   for(i=0; i<=NSTEPS; i++){
35:     error = x[i]*x[i]-y[i];      // 誤差の計算
36:     fprintf(out,"%20.15f\t%20.15f\t%20.15f\n", x[i],y[i],error);
37:   }
38: 
39: 
40:   fclose(out);
41: 
42:   return 0;
43: }
44: 
45: //============================================================
46: // dy/dx = f(x,y) の f(x,y)を計算する関数
47: //============================================================
48: double f(double x, double y){
49:   return 2*x;
50: }


no counter