MATLABEuler法解常微分方程
- 格式:docx
- 大小:13.16 KB
- 文档页数:4
Euler法解常微分方程
Euler法解常微分方程算法:
Step 1 分别取积分上限、积分下限、步长
Step 2计算判断是否成立,成立转到Step 3,否则继续进行Step 4
Step 3 计算
Step 4
Euler法解常微分方程算程序:
function euler2(fun,y0,A,h)
%fun--y'
%y0---初值
%A----x取值范围
%a----x左区间端点值
%b----x右区间端点值
%h----给定步长
x=min(A);
b=max(A);
y=y0;
while x b=y; y=y+h*feval(fun,x,b) x=x+h; end 例:用Euler法计算下列初值问题(取步长h=0.2) 输入:fun=inline('-y-x*y^2') euler2(fun,1,[0 0.6],0.2) 得到: y = 0.8000 y = 0.6144 y = 0.4613 指导教师:年月日改进Euelr法解常微分方程 改进Euler法解常微分方程算法: Step 1 分别取积分上限、积分下限、步长 Step 2 取一个以h为步长,a,b分别为左右端点的矩阵 Step 3 (1)做显性Euler预测 (2)将带入 Step 4计算判断是否成立,成立返回Step 3,否则继续进行Step 5 Step 5 改进Euler法解常微分方程算程序: function gaijineuler2(fun,y0,A,h) %fun--y' %y0---初值 %A----x取值范围 %a----x左区间端点值 %b----x右区间端点值 %h----给定步长 a=min(A); b=max(A); x=a:h:b; y(1)=y0; for i=1:length(x)-1 w1=feval(fun,x(i),y(i)); y(i+1)=y(i)+h*w1; w2=feval(fun,x(i+1),y(i+1)); y(i+1)=y(i)+h*(w1+w2)/2; end x=x' y=y' 例:用改进Euler法计算下列初值问题(取步长h=0.25) 输入:fun=inline('-x*y^2') gaijineuler2(fun,2,[0 5],0.25) 得到: x = 0.2500 0.5000 0.7500 1.0000 1.2500 1.5000 1.7500 2.0000 2.2500 2.5000 2.7500 3.0000 3.2500 3.5000 3.7500 4.0000 4.2500 4.5000 4.7500 5.0000 y = 2.0000 1.8750 1.5939 1.2824 1.0096 0.7932 0.6282 0.5037 0.4097 0.3379 0.2824 0.2389 0.2043 0.1765 0.1538 0.1352 0.1196 0.1066 0.0955 0.0861 0.0779 指导教师:年月日禁止复制北京石油化工学院Onlyunited