Euler法解微分方程-Matlab程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%主程序main.m-----OK!

clear;

T=0.0;

Y=zeros(3,1);

Y(1)=1.0;Y(2)=1.0;Y(3)=1.0;

H1=0.05;M=3;EPS=1.0e-05;%EPS精度要求M方程个数H1拟定的输出步长

for i=1:10

[X,Y]=euler1(T,H1,Y,M,EPS)

T=T+H1;

End

%变步长euler方法

function [X,Y1]=euler1(T,H1,Y,M,EPS) %M-方程个数,EPS-精度,Y0-右端初值,T-自变量前一点值,H-步长

N=1;P=1+EPS;X=T;G=zeros(M,1);

H=H1;%H-在程序中要改变的步长H1-主程序中确定的输出步长

for i=1:M

C(i)=Y(i);

end

K1=zeros(M,1);K2=zeros(M,1);K3=zeros(M,1);K4=zeros(M,1);

while P>=EPS %变步长积分一步(H1)

for i=1:M

G(i)=Y(i);

Y(i)=C(i);

end

DT=H/N;

T=X;

%--变步长积分过程

for j=1:N

K1=F(Y);

K2=F(Y+H/2*K1');

K3=F(Y+H/2*K2');

K4=F(Y+H*K3');

for i=1:M

Y(i)=Y(i)+H/6*(K1(i)+2*K2(i)+2*K3(i)+K4(i));

T=T+DT;

end

end

%---------------------

P=0.0;

for i=1:M

Q=abs(Y(i)-G(i));

if Q>P

P=Q;

end

end

H=H/2.0;

N=N+N;

end

T=X;

X=T+H1;

Y1=Y;

%右端函数值function D=F(y)

D(1)=y(2);

D(2)=-1*y(1);

D(3)=y(3);

相关文档
最新文档