欧拉、改进欧拉、四阶龙格-库塔

这里写图片描述
取h=0.1时用Euler法,改进Euler法,Rung-Kutta方法求其数值解并与精确解进行比较。
输入:求解区间,初值,数值解个数
输出:数值解
代码

#include<stdio.h>
#include<math.h>
#define f(y,x) (y-((2*x)/y))
#define F(y,x) (y-(2*x/y))
#define ff(y,x) (y-(2*x/y))
#define y(x) (sqrt(1+2*x))
int main()
{   

    int i,n=10;
    double h,a,b,y0,y1,y2,y3,x,k1,k2,n1,n2,n3,n4;
    printf("左区间:");scanf("%lf",&a);
    printf("右区间:");scanf("%lf",&b);
    printf("初值:") ;scanf("%lf",&y0);
    printf("数值个数:");scanf("%d",&n);
    y1=y2=y3=y0;
    x=a;
    h=(b-a)/n;
    printf("x\t\ty(4阶龙格)\ty(改进)\t\ty(欧拉)\t\ty(精确)\n");
    printf("%lf\t%lf\t%lf\t%lf\t%lf\n",x,y3,y2,y1,y(x));
    for(i=1;i<=n;i++)
    {
        n1=h*ff(y3,x);
        n2=h*ff((y3+n1/2),(x+h/2));
        n3=h*ff((y3+n2/2),(x+h/2));
        n4=h*ff((y3+n3),(x+h));         
        y3=y3+(n1+2*n2+2*n3+n4)/6;  //4阶龙格
        k1=h*F(y2,x);
        k2=h*F((y2+k1),(x+h));
        y2=y2+(k1+k2)/2;            //改进欧拉和二阶龙格 
        y1=y1+h*f(y1,x);            //欧拉 
        x=x+h;
        printf("%lf\t%lf\t%lf\t%lf\t%lf\n",x,y3,y2,y1,y(x));
    }
    return 0;
}

这里写图片描述

欧拉、改进欧拉、四阶龙格-库塔是比较简单的,只要理解其中的公式那就很好办啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值