微分方程式をc言語でオイラー法とルンゲクッタ法(4次)で実装したのですが、オイラー法ルンゲクッタ法の方が精度がよくなってしまいます。本来ならルンゲクッタ法(4次)の方が精度がよくなるはずです。どこかコードにおかしなところがあるか見て欲しいです。
微分方程式は dy/dx=x^2-y,y(0)=2です。
オイラー法のコード
c
1# include <stdio.h> 2int main() 3{ 4double x=0; 5double dx; 6double y=2; 7double dy; 8printf("刻み幅の値を入力してください h="); 9scanf("%lf", &dx); 10printf("%lf %lf\n", x, y); 11for (x=dx; x<=1; x=x+dx) 12 { 13 dy=(x*x-y)*dx; 14 y=y+dy; 15 printf("%lf %lf\n", x, y); 16 } 17} 18
ルンゲクッタ法のコード
c
1# include <stdio.h> 2int main() 3{ 4double x=0; 5double dx; 6double y=2; 7double y1, y2, y3; 8double k1, k2, k3, k4; 9double dy; 10printf("刻み幅の値を入力してください h="); 11scanf("%lf", &dx); 12printf("%lf %lf\n", x, y); 13for (x=dx; x<=1; x=x+dx) 14{ 15k1=x*x-y; 16y1=y+k1*dx/2; 17k2=x*x-y1; 18y2=y+k2*dx/2; 19k3=x*x-y2; 20y3=y+k3*dx; 21k4=x*x-y3; 22dy = dx*(k1 + 2*k2 + 2*k3 + k4)/6; 23y=y+dy; 24printf("%lf %lf\n", x, y); 25} 26}
タイトルが直ってないです