资源描述:
《隐式euler求解一阶常微分方程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《MATLAB语言及应用》大作业姓名:学号:学院:班级:题目编号:2013年10月13隐式Euler求解一阶常微分方程。一、隐式Euler的数学理论微分方程的本质特征是方程中含有导数项,数值解法的第一步就是设法消除其导数值,这个过程称为离散化。实现离散化的基本途径是用向前差商来近似代替导数,这就是欧拉算法实现的依据。欧拉(Euler)算法是数值求解中最基本、最简单的方法,但其求解精度较低,一般不在工程中单独进行运算。所谓数值求解,就是求问题的解y(x)在一系列点上的值y(xi)的近似值yi。对于常微分方程:dy
2、/dx=f(x,y),x∈[a,b]y(a)=y0可以将区间[a,b]分成n段,那么方程在第xi点有y'(xi)=f(xi,y(xi)),再用向前差商近似代替导数则为:(y(xi+1)-y(xi))/h=f(xi,y(xi)),在这里,h是步长,即相邻两个结点间的距离。因此可以根据xi点和yi点的数值计算出yi+1来:yi+1=yi+h*f(xi,yi),i=0,1,2,L这就是欧拉公式,若初值yi+1是已知的,则可依据上式逐步算出数值解y1,y2,L。为简化分析,人们常在yi为准确即yi=y(xi)的前提下估
3、计误差y(xi+1)-yi+1,这种误差称为局部截断误差。如果一种数值方法的局部截断误差为O(h^(p+1)),则称它的精度是p阶的,或称之为p阶方法。欧拉格式的局部截断误差为O(h^2),由此可知欧拉格式仅为一阶方法。二、隐式Euler的算法和流程图算法:用向后差商[y(x(i+1))-y(x(i))]/h替代方程y’(x(i+1))=g[x(i+1),y(x(i+1))]中的导数项y’(x(i+1)),再离散化,即可导出下列格式y(i+1)=y(i)+hg(x(i+1),y(i+1)),i=0,1,2。。。
4、因此是隐式公式,一般要用迭代法求解,迭代公式通式为:y^(0)(i+1)=y(n)+hg(x(i),y(i));y^(k+1)(i+1)=y(i)+hg(x(i+1),y^(k)(i+1))(k=0,1,2….)流程图:三、隐式Euler的Matlab实现建立Euler_2.m文件:functionE2=Euler_2(fun,x0,y0,xN,N)%向后Euler公式,其中,%fun为一阶微分方程的函数%x0,y0为初始条件%xN为取值范围的一个端点%h为区间步长%N为区间的个数%x为xN构成的向量%y为yN
5、构成的向量x=zeros(1,N+1);y=zeros(1,N+1);x(1)=x0;y(1)=y0;h=(xN-x0)/N;forn=1:N%用迭代法求y(n+1)x(n+1)=x(n)+h;z0=y(n)+h*feval(fun,x(n),y(n));fork=1:3z1=y(n)+h*feval(fun,x(n+1),z0);ifabs(z1-z0)<1e-3break;endz0=z1;endy(n+1)=z1;endT=[x',y']四、隐式Euler的算例实现例:d(y)/d(x)=-y,y(0)=
6、1,(0≤x≤1)的近似解,并与精确值比较。建立f.m文件functionz=f(x,y)z=-y;>>Euler_2('f',0,1,1,10)T=01.00000.10000.90910.20000.82640.30000.75120.40000.68280.50000.62070.60000.56420.70000.51290.80000.46620.90000.42381.00000.3852>>