Euler法的改进

来源:百度知道 编辑:UC知道 时间:2024/05/19 12:52:14
请各位大侠帮帮忙,现在兄弟遇到一点难题,诚求Euler法的改进方法。
救急啊..
要求是:
1、理论分析(含问题分析,理论依据,求解对策等);
2、方法详解(含推导、求解、分析、程序框图等);
3、应用实例(含程序清单、计算结果输出、图形演示等);
4、效果分析(含对不同方法间的图形、数值等多方位的对比分析,对所得结果的合理解释等)。

如果设计合理的话,小弟还有高分相送...

欧拉公式
  y(xi+1)=yi+h*f(xi,yi)
  且xi=x0+i*h (i=0,1,2,…,n-1)
  局部截断误差是O(h^2)
  改进的欧拉算法
  先用欧拉法求得一个初步的近似值,称为预报值,然后用它替代梯形法右端的yi+1再直接计算fi+1,得到校正值yi+1,这样建立的预报-校正系统称为改进的欧拉格式:
  预报值 y~i+1=yi + h*f(xi,yi)
  校正值 yi+1 =yi+(h/2)*[f(xi,yi)+f(xi+1,y~i+1)]
  它有下列平均化形式:
  yp=yi+h*f(xi,yi)
  且 yc=yi+h*f(xi+1,yp)
  且 yi+1=(yp+yc)/2
  它的局部截断误差为O(h^3),可见,改进欧拉格式较欧拉格式提高了精度,其截断误差比欧拉格式提高了一阶。
  注:欧拉法用差商 [y(xi+1)-y(xi)]/h 近似代替y(xi)的导数,局部截断误差较大;改进欧拉法先用欧拉法求出预报值,再利用梯形公式求出校正值,局部截断误差比欧拉法低了一阶,较大程度地提高了计算精度。

m函数:
function[x,y]=Euler_r(ydot_fun,x0,y0,h,N)

% ydot_fun 为一阶微分方程的函数
% x0,y0为初始条件;
% h为区间步长
% N为区间个数

x=zeros(1,N+1);y=zeros(1,N+1);
x(1)=x0;y(1)=y0;
for n=1:N
x(n+1)=x(n)+h;
ybar=y(n)+h*feval(ydot_fun,x(n),y(n));
y(n+1)=y(n)+h/2*(feval(ydot_fun,x(n),y(n))...
+feval(ydot_fun,x(n+1),ybar));
end

主程序:
ydot_fun=inline('-2*y+exp(x)');