月別: 2014年3月

C言語 常微分方程式 (ルンゲ・クッタ法)

Cでルンゲ・クッタ法を書いたので公開します。

 定義は以下のURLを確認して下さい

ルンゲ・クッタ法

#include
#include

double f(double x, double y){

    return (-y*tan(x)); //関数定義

}

int main(){

    double x0,a,b,x,y,h,d,k1,k2,k3,k4,num;
    int i;

    printf("刻み幅h:");
    scanf("%lf",&h);

    printf("範囲x[start end]:");
    scanf("%lf %lf",&a,&b);

    printf("初期値y(%f,0)=",a);
    scanf("%lf",&d);

    num = (b-a) / h;
    x = a;
    y = d;

    for (i = 0; i < num; 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);

        x = x + h;
        y = y + (k1 + 2 * k2 + 2 * k3 + k4) / 6;

    } //ルンゲクッタ法 終了

    printf("ANS:%fn",y);

    return 0;
}