四阶龙格库塔(Runge-Kutta)求微分方程初值(C语言)

四阶龙格库塔(Runge-Kutta)求微分方程初值(C语言)_第1张图片

#include
//四阶龙格库塔
void runge(float(*f)(float x,float y),float a,float b,float y0,int N)
{
    float x=a,y=y0,K1,K2,K3,K4;
    float h=(b-a)/N;
    int i;
    printf("第一问\n");
    printf("x[0]=%f\ty[0]=%f\n",x,y);
    for(i=1;i<=N;i++)
    {
        K1=(*f)(x,y);
        K2=(*f)(x+h/2,y+h*K1/2);
        K3=(*f)(x+h/2,y+h*K2/2);
        K4=(*f)(x+h,y+h*K3);
        y=y+h*(K1+2*K2+2*K3+K4)/6;
        x=a+i*h;
        printf("x[%d]=%f\ty[%d]=%f\n",i,x,i,y);
    }
}

float f1(float x,float y)
{
    return x*x+y*y;
}

int main()
{
    float a=0,b=1,y0=0;
    runge(f1,a,b,y0,10);
    return 0;
}

你可能感兴趣的:(计算方法)