Euler 格式和改进Euler 格式求解初值问题及代码

介绍

关于初值问题的解
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

实例

在这里插入图片描述在这里插入图片描述

代码

#include<iostream>
using namespace std;

double h;
double x[100],y[100];

double f(double x0, double y0)
{
	return -2*x0/y0 + y0;	
}

void Eluer()
{
	for(int i=1;i<10;i++)
	{
		y[i] = y[i-1] + h*f(x[i-1],y[i-1]);
		cout<<x[i]<<" "<<y[i]<<endl;
	}
}

int main()
{
	cout<<"输入迭代的步长:"<<endl;
	cin>>h;
	cout<<"输入初始值x,y"<<endl;
	cin>>x[0]>>y[0];
	for(int i=1;i<10;i++)  x[i] = x[0] + i*h;
//	for(int i=1;i<10;i++)  cout<<x[i]<<" ";cout<<endl; 
	Eluer();
	return 0;
}

结果(解与实例中对应 ):
在这里插入图片描述

Euler 改进算法

在这里插入图片描述

实例

在这里插入图片描述在这里插入图片描述在这里插入图片描述

代码

#include<iostream>
using namespace std;

double h;
double x[100],y[100],c[100];

double f(double x0, double y0)
{
	return -2*x0/y0 + y0;	
}

void Eluer()
{
	for(int i=1;i<10;i++)
	{
		c[i] = y[i-1] + h*f(x[i-1],y[i-1]);
		y[i] = y[i-1] + h/2*(f(x[i-1],y[i-1])+f(x[i],c[i]));
		cout<<x[i]<<" "<<y[i]<<endl;
	}
}

int main()
{
	cout<<"输入迭代的步长:"<<endl;
	cin>>h;
	cout<<"输入初始值x,y"<<endl;
	cin>>x[0]>>y[0];
	for(int i=1;i<10;i++)  x[i] = x[0] + i*h;
//	for(int i=1;i<10;i++)  cout<<x[i]<<" ";cout<<endl; 
	Eluer();
	return 0;
}

结果(解与实例中对应 ):
在这里插入图片描述

  • 9
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
初值问题是指给定一个微分方程的初值,求解该微分方程在给定初始条件下的Euler方法改进Euler方法都是常见的求解初值问题的数值方法Euler方法是一种简单的一阶数值方法,其基本思想是将微分方程转化为差分方程,然后通过迭代求解差分方程得到近似。具体的公式如下: $$ y_{n+1} = y_n + hf(x_n,y_n) $$ 其中,$h$为步长,$x_n$和$y_n$分别为迭代到第$n$步时的自变量和因变量,$f(x_n,y_n)$为微分方程右侧的函数。这个公式可以理为,我们从当前点$(x_n,y_n)$出发,向自变量增加一个步长$h$,同时根据微分方程的斜率$f(x_n,y_n)$来计算出纵坐标的变化量,从而得到下一个点$(x_{n+1},y_{n+1})$。 改进Euler方法是对Euler方法改进,它仍然是一种一阶数值方法,但是比Euler方法更精确。具体的公式如下: $$ y_{n+1} = y_n + \frac{h}{2}(f(x_n,y_n)+f(x_{n+1},y_n+hf(x_n,y_n))) $$ 这个公式与Euler方法的区别在于,它在计算下一个点$(x_{n+1},y_{n+1})$时,使用了两个点$(x_n,y_n)$和$(x_{n+1},y_{n+1})$之间的斜率的平均值,而不是只使用$(x_n,y_n)$处的斜率。这样可以减小误差,提高精度。 需要注意的是,这两种方法都有其局限性,对于某些微分方程,它们可能会产生不稳定的,甚至会出现发散的现象。因此,在使用这些数值方法求解初值问题时,需要仔细选择步长和算法,并对结果进行检验和评估。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值