欧拉法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程名称欧拉法求解微分方程学生学院理学院
专业班级信息与计算科学131班学号5501213051
学生姓名陈小娟
欧拉法(Euler)
简单欧拉法
欧拉法是简单有效的常微分方程数值解法,欧拉法有多种形式的算法,其中简单欧拉法是一种单步递推算法。
1 基本原理
对于一个简单的一阶微分方程:
Y’=f(x,y)
其中初始值为:
Y(x0)=y0
欧拉方法等同于将函数微分转换为数值差分,如下式,
y’(x)=(y(x+h)-y(x))/h
故原方程变形为:
y n+1=y n+h
2 算法的程序实现
在MA TLAB中编程实现的欧拉法函数为:MyEuler .
功能:以欧拉法求解常微分方程。
调用格式:[outx,outy]=Myeuler(fun,x0,xt,y0,pointNUM).
其中,fun为函数名;
x0为自变量区间初值;
xt为自变量区间终值;
y0为函数在x0处的值;
Pointnum为自变量在[x0,xt]上所取的点数;
Outx为输出自变量区间上所取点的x值;
Outy为对应点上的函数值。
欧拉法的MATLAB程序代码如下:
Function[outx.outy]=MyEuler[fun,x0,xt,yo,pointnum)
%用前向差分的欧拉方法解微分方程y’=fun
%函数f(x,y):fun
%自变量的初值和终值:x0,xt
%yo表示函数在x0处的值,输入初值为列向量形式
%自变量在[x0,xt]上取的点数;pointnum
%outx:所取的点的x值
%outy:对应点上的函数值
If nargin<5|pointnum<=0 %如果函数仅输入4个参数值,则pointnum默认值10 Pointnum=100
End
If nargin<4 %y0默认值为0
y0=0;
End
H=(xt-xo)/pointnum; %y0默认为0
X=xo+[0:pointnum]’*h; %自变量数组
Y(1,:)=y0(:)’; %输入存为列向量
For k=1:pointnum
F=feval(fun,x(k),y(k,:)); %计算发(x,y)在每个迭代点的值
F=f(:)’;
Y(k+1,:)=y(k,:)+h*f; %对于所取的点迭代计算y值
End
Outy=y
Outx=x
Plot(x,y)
3、实例分析
欧拉法求解常微分方程应用实例。
用欧拉法求常微分方程;
Y’=sinx+y
Y(x0)=1,x0=0
当h=2和h=0.4时的数值解,与精确解进行对比,
解:首先建立函数文件myfun01.m:
Function f=myfun01(x,y)
F=sin(x)+y;
通过在相同的积分区间上色丁不同的去点数,从而改变步长,可得到不同的欧垃圾。
以下程序即可实现此功能,并给出了几乎等于精确解的微分方程符号解。
Function ex0601()
[x1,y1]=myeuler(‘myfun01’,0.2*pi,1,16);
H1=2*pi/15
[x11,y11]=myeuler(‘myfun01’,0.2*pi,1,32);
H2=pi/15
Y=dsolve(‘dy=y+sin(t)’,’y(0)=1;
For k=1:33
T(k)=x11(k);
Y2(k)=subs(y,t(k));
End
Plot(x1,y1,‘+b’,x11,y11,’og’,x11,y2,’+r’)
Legend(‘h=0.4的欧拉法解‘,’h=0.2的欧拉解‘,’符号解‘)
改进的欧拉法
改进的欧拉法实际上是通过预估-校正过程对梯形公式进行修正,从而简化迭代过程的方法,又称为henu算法。
1.基本原理
改进的欧拉法的具体求解过程如下:
对方程y’=f(x,y)两边由x n到x n+1积分,并利用梯形公式,可得:
Y n+1=y n+h/2[f(xn,yn)+f(xn+1,yn+1)]
其中初始值为:
Y(x0)=y0
由上可知,所得到的迭代公式为隐式格式。
计算中为了保证一定的精确度,避免迭代过程不菲的计算量,一般先用显式格式算出初始值,再用隐式公式进行一次修正,此过程称为预估-校正过程。
具体迭代公式如下:
Y’n+1=yn+hf(xn,yn)
Yn+1=yn+h/2[f(xn,yn)+f(xn+1,y’n+1)]
2.算法的程序实现
在MA TLAB中编程实现的改进的欧拉法函数为:myeulerpro.
功能:用改进的欧拉法求解常微分方程。
调用格式:【xout,yout】=myeulerpro(fun,x0,xt,y0,pointnum).
其中,fun为函数名;
x0为自变量区间初值;
xt为自变量区间终值;
y0为函数在x0处的值;
Pointnum为自变量在[x0,xt]上所取的点数;
xOut为输出自变量区间上所取点的x值;
Yout为对应点上的函数值。
改进的欧拉法的MA TLAB程序代码如下;
Function[xout,yout]=MyEulerpro[fun,x0,xt,yo,pointnumber)
%用改进的欧拉方法解微分方程y’=fun
%函数f(x,y):fun
%自变量的初值和终值:x0,xt
%yo表示函数在x0处的值,输入初值为列向量形式
%自变量在[x0,xt]上取的点数;pointnumber
%xout;所取的点的x值
%yout:对应点上的函数值
If nargin<5|pointnum<=0 %如果函数仅输入4个参数值,则pointnum默认值10 Pointnum=100
End
If nargin<4 %y0默认值为0
y0=0;
End
H=(xt-x0)/pointnumber;
X=x0+[0:pointnumber]’*h
Y(1,:1)=y0(:)’;
For i=1:pointnumber
F1=h*feval(fun,x(i),y(i,:));
F1=f1(:)’;
F2=h*feval(fun,x(i+1),y(i,:)+f1);
F2=f2(:)’;
Y(i+1,:)=y(i,:)+1/2*(f1+f2);
End
Xout=x; Youy=y;。