欧拉法、预估校正法(改进的欧拉法)与四阶龙格库塔法求解常微分方程的数值解C++程序

以y'=x+y,0<x<1,y(0)=1为例,取步长h=0.1,已知精确值为y=-x-1+2e^x,用来进行精度比较。

#include<stdio.h>
using namespace std;
double cor[10000];
double f(double x,double y)//改写函数
{
    return x+y;
}
double correctf(double x)//精确解函数
{
    return -x-1+2*exp(x);
}
void Euler(double h,double l,double r,double *a,double *b,double tol)//欧拉法
{
    double sum=0;
    for(int i=1; i<=tol; i++)
    {
        b[i]=b[i-1]+h*f(a[i-1],b[i-1]);
        sum+=fabs(b[i]-cor[i])/cor[i];
    }
    for(int i=1; i<=tol; i++)
        printf("当x=%lf时,近似解为:%lf,准确解为:%lf\n",a[i],b[i],cor[i]);
    printf("精度为:%lf\n\n",sum/tol);
}
void improvedEuler(double h,double l,double r,double *a,double *b,double tol)//改进的欧拉法
{
    double b1,sum=0;
    for(int i=1; i<=tol; i++)
    {
        b1=b[i-1]+h*f(a[i-1],b[i-1]);
        b[i]=b[i-1]+h/2*(f(a[i-1],b[i-1])+f(a[i],b1));
    }
    for(int i=1; i<=tol; i++)
 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值