Linux,GNOME端末です。Runge-Kutta法でdy/dx=x*x+yを解きます。初期値(x0,y0)=(1,1)計算間隔h=0.1として、答えはx=1.5の時y=2.64233となるはずなのですが、
i x y
0 1.0 1.00000
1 1.1 1.22068
2 1.2 1.47764
3 1.3 1.77504
4 1.4 2.11752
5 1.5 2.51019
6 1.6 2.95869
7 1.7 3.46926
8 1.8 4.04880
9 1.9 4.70492
10 2.0 5.44606
となってしまいます。間違いを指摘していただければ幸いです。
#include<stdio.h> #include<math.h> #define F(x,y) (x*x+y) #define h 0.1 int main(void) { double x,y,k1,k2,k3,k4; int i=0; x=y=1.; printf("i x y\n"); printf("%2d %3.1f %7.5f\n",i,x,y); do { i++; k1=h*F(x,y); k2=h*F(x+h/2.,y+k1/2.); k3=h*F(x+h/2.,y+k2/2.); k4=h*F(x+h,y+k3); y+=(k1+2.*k2+2.*k3+k4)/6.; x+=h; printf("%2d %3.1f %7.5f\n",i,x,y); } while(i-(2.0-1.0)/0.1<0); }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。