プログラミング

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
MU

プログラミング

#1

投稿記事 by MU » 15年前

Heun法のプログラムをRunge-Kutta法にするにはどうしたらいいですか?

#include <stdio.h>
#include <math.h>
double f1(double y) { return y; }
double f2(double y) { return -4*y; }
int main(){
double a=0;
double b;
int m=10;
int n;
double h;
double x,y;
int k;
double e;
double f;
double k1,k2;
printf("Heun法計算例:y=e^x, y=1/e^4x\n\n");
// y = e^x
b = 1;
for(n=100;n<=10000;n*=100){
h = (b-a)/n;
printf("y' = y: h(=dx) = %.1e (y=e^x)\n",h);
x = a; y = 1;
for(k=0;k<=n;k++) {
x = k*h;
if(k%(n/m)==0) {
f = exp(x);
e = fabs(y-f);
printf("x=%.2f, y=%f, e^x=%f er=%.0e\n",x,y,f,e);
}
// Heun's method
k1 = h*f1(y);
k2 = h*f1(y+k1);
y += (k1+k2)/2;
}
}

non

Re:プログラミング

#2

投稿記事 by non » 15年前

前のshevchenkoさんのプログラムと同じ人が作ったプログラムですね。
ただし、Heun法まで進んだようですが。

>// Heun's method
>k1 = h*f1(y);
>k2 = h*f1(y+k1);
>y += (k1+k2)/2;

この部分を書き直せばいいのではないでしょうか?

閉鎖

“C言語何でも質問掲示板” へ戻る