Você está na página 1de 3

12/05/2017 MtodosdeEulereRungeKutta

MtodosdeEulereRungeKutta
Vamosdescrevermtodosnumricosparaoproblema
devalorinicial(PVI):

Aideiaparticionarointervalo[a,b]atravsdepontosigualmenteespados:

econstruirconstruiraproximaesparaasoluo$$y(t)$$nessespontos.Mtodosqueusam
informaodasoluonotempoanteriorparaconstruirasoluoaproximadanotempo
correntesoditosmtodosdepassosimplesoumtodosdeumpasso.Noqueseguevamos
descreveromtododeEulereosmtodosdeRungeKuttadeordem2,3e4.

Contents

MtododeEuler
MtodoRungeKutta
ExemploNumrico

MtododeEuler

AssoluesaproximadasdomtododeEulersodefinidaspelaequaodediferens

NoMATLAB,omtododeEulerpodeserimplementadocomosegue:

%functiony=euler(fun,alpha,a,b,N,grau)
%
%y=euler(fun,alpha,a,b,N,grau)
%
%METODODEEULER:resolveumEDOdeprimeiraordem
%comumacondicaoinicialy(a)=alpha.
%
%DADOS:
%funfuncaocontinuamentediferenciavel
%alphacondicaoinicial
%[a,b]intervalo
%Nnumerodepassos
%Defaulth=0.01
%graugraudometodoEuler,graupodeser1,2ou3.
%Defaultgrau=1
%
%IsmaelRodrigoBleyer2006

h=abs(ba)/N;

k=1;
y=alpha;
t=a;
Y(k)=y;
T(k)=t;

switchgrau
case1
fork=2:(N+1)
phi=feval(fun,t,y,0);
http://www.mtm.ufsc.br/~fermin/runge 1/3
12/05/2017 MtodosdeEulereRungeKutta
t=t+h;
T(k)=t;
y=y+h*phi;
Y(k)=y;
end
case2
fork=2:(N+1)
phi=feval(fun,t,y,0)+(h/2)*[feval(fun,t,y,1)];
t=t+h;
T(k)=t;
y=y+h*phi;
Y(k)=y;
end
case3
fork=2:(N+1)
phi=feval(fun,t,y,0)+h/2*[feval(fun,t,y,1)]+(h^2)/6*[feval(fun,t,y,2)];
t=t+h;
T(k)=t;
y=y+h*phi;
Y(k)=y;
end
otherwiseerror('Entradaincorreta:grau');
end

Errorusing==>evalin
Undefinedfunctionorvariable'b'.

MtodoRungeKutta

%functiony=runge(fun,alpha,a,b,N,grau)
%y=runge(fun,alpha,a,b,N,grau)
%
%METODORUNGEKUTTAencontraumasolucaonumericaparaumaEDOcomuma
%dadacondicaoinicial.
%
%DADOS:
%funfuncaostringquedefiney'=f(t,y(t))
%alphacondicaoinicialy(a)=alpha
%[a,b]intervalo
%Nnumerodepassos
%graugraudometodoRungeKutta,graupodeser2,3ou4.
%Defaultgrau=4.
%
%IsmaelRodrigoBleyer2006

h=abs(ba)/N;

k=1;
y=alpha;
t=a;
Y(k)=y;
T(k)=t;

ifnargin<6,grau=4;end

switchgrau
case2
fork=2:(N+1)
K1=feval(fun,t,y);
K2=feval(fun,t+h,y+h*K1);
y=y+h/2*[K1+K2];
Y(k)=y;
t=t+h;
T(k)=t;
end
case3
fork=2:(N+1)
K1=feval(fun,t,y);
http://www.mtm.ufsc.br/~fermin/runge 2/3
12/05/2017 MtodosdeEulereRungeKutta

K2=feval(fun,t+(1/2)*h,y+(1/2)*h*K1);
K3=feval(fun,t+h,y+2*h*K2h*K1);
y=y+h/6*[K1+4*K2+K3];
Y(k)=y;
t=t+h;
T(k)=t;
end
case4
fork=2:(N+1)
K1=feval(fun,t,y);
K2=feval(fun,t+(1/2)*h,y+(1/2)*h*K1);
K3=feval(fun,t+(1/2)*h,y+(1/2)*h*K2);
K4=feval(fun,t+h,y+h*K3);
y=y+h/6*[K1+2*K2+2*K3+K4];
Y(k)=y;
t=t+h;
T(k)=t;
end
otherwiseerror('graunaoconfere')
end

ExemploNumrico

Verarquivopdf.

PublishedwithMATLAB7.3

http://www.mtm.ufsc.br/~fermin/runge 3/3