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

来源:互联网 发布:淘宝开个什么店赚钱 编辑:程序博客网 时间:2024/04/29 09:45

这里写图片描述
取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;}

这里写图片描述

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

1 0
原创粉丝点击