Está en la página 1de 6

Ecuaciones en Derivadas Parciales y Anlisis Numrico

Prcticas

Captulo 2. Ecuaciones diferenciales ordinarias (EDOs).

2.1Resolucindeunaecuacindiferencialordinaria.

Vamosaresolvernumricamentelasiguienteecuacindiferencial:

dy
=y 1y
dt

concondicininicialy(0)=0.2.ParaempezarvamosautilizarelmtododeEulerexplcito.Estealgoritmo,
queestudiarisenteoraconmsdetalle,sebasaenlaaproximacin:

y tdt y t dt y ' t =y tdt y t1y t

paraunvalordedtpequeo.Paraempezar,tomamosunconjuntodeinstantesdetiempo t n=t 0 n dt y
definimos y 0=y 0 .Acontinuacin,definimoselvalordelospuntos y n deformarecursiva,
medianteelesquemanumrico:

y n1=y n dt y n 1y n

Loimplementamosdelsiguientemodo

tsteps=1000; %Subdivisionesdelintervalo
t_f=10; %valorfinaldetiempo
dt=t_f/tsteps; %elpasodetiempo
t=0:dt:t_f; %definimoslosdiferentestiempos
y=zeros(1,tsteps+1);%inicializamosy
y(1)=0.2; %definimosdatoinicial
forn=1:tsteps
y(n+1)=y(n)+dt*y(n)*(1y(n));
end %metododeEulerexplicito

Dibujamoslosresultados

plot(t,y);

Matlabtieneimplementadosvariosmtodosnumricosquepodemosaplicardirectamente.Creaunfichero
deMatlab(File/New/Mfile)quecontengalassiguienteslneas:

functionderiv=edo(t,y)
deriv=y*(1y);

Guardaelarchivoconelnombreedo.myestableceeldirectoriodondelohasguardadocomodirectoriode
trabajo.Vuelvealalneadecomandosyteclea:
t_0=0;
t_f=10;
y0=0.2;
[t,y]=ode23('edo',[t_0,t_f],y0);
plot(t,y)

LafunctionMatlabode23esunaimplementacindeunmtodoRungeKuttadeorden(2,3).Enestecaso
noesnecesarioponerelpasodetiempoporquelamismafuncinode23lovareduciendosobrelamarchasi
esnecesario.OtrafunctionMatlabesode45basadoenunmtodoexplcitoRungeKuttadeorden(4,5).En
general,ode45eslamejorfuncinparaaplicarenunprimermomentoamuchosdelosproblemas:

[t,y]=ode45('edo',[t_0,t_f],y0);
plot(t,y)

Enestecaso,esfcilcomprobarquelafuncin:
et
y t=
4et

eslasolucinexactadelproblemadevalorinicialanterior.Podemosusarestareferenciaparacomprobarqu
talprecisinhemosobtenidoconlosdistintosmtodos.

y_exacta=exp(t)./(4+exp(t));
plot(t,abs(yy_exacta)); %repetircuandoysehacalculadocon
%distintosmetodos

2.2Errores.

Vamosaestudiarlaprecisinqueobtenemosenfuncindelpasodetiempoutilizado.Paraempezarcreamos
unafuncinenmatlabquedevuelvasloelvaloraproximadodey(1)tomandocomoargumentoelnmerode
pasostemporales:

functiony=euler1(tsteps)
t_f=1; %valorfinaldetiempo
dt=t_f/tsteps; %elpasodetiempo
t=0:dt:t_f; %definimoslosdiferentestiempos
y=0.2; %definimosdatoinicial
forn=1:tsteps
y=y+dt*y*(1y);
end %metododeEulerexplicito

Ahorapodemoshacerunagrficadelaprecisinobtenida(comparamosconelvalorexacto,
e
0,404609675 )enfuncindelpasotemporaldt.
4e

yexacto=exp(1)/(4+exp(1));
pasos=[];errores=[]; %vectoresconlospasostemporalesylos
%errores
fork=[410301003001000]
pasos=[pasos,1/k]; %engordamoslosvectoressobrelamarcha
errores=[errores,abs(euler1(k)yexacto)];
end
plot(pasos,errores)
Enlasiguientegrficaalaizquierdapuedesverelresultado,mientrasquealaderechasemuestralagrfica
correspondienteaunmtododeRungeKuttadeorden2(elmtododelpuntomedio).Comopuedesver,la
convergenciadelmtododeEulereslinealmientrasqueladelmtododelpuntomedioescuadrtica(la
grficaesaproximadamenteunaparbola).

Engeneral,paraestimarelordendeconvergencia
deunmtodo,seescribeelerrorcomouna
potenciadelpasodetiempo:
error=C dt
ysetomalogaritmosparaobtenerunaecuacin
lineal:

log error= logdt logC

Alaplicaresteprocedimientoalerrordelmtodo
deEuler,seobtieneunarecta(aladerecha,en
azul)conpendienteprcticamenteiguala1.Es
decir, 1 ,mientrasquesiusamoselerror
delmtododeRungeKutta,seobtieneunarecta
(aladerecha,enverde)conpendientecasiiguala2.Enestecaso 2 ,loquesignificaqueelerror
dependedelpasodeformacuadrtica.

2.3ResolucindeunsistemadeEDOs.

VamosaintentarahoraresolveraproximadamentelasecuacionesdeLorentz.Setratadeunsistemanolineal
caticoconloquesedenominaunatractorextrao.Sinembargo,esposibleobtenersolucionesaproximadas
concualquieradelosmtodosanteriores.Estudiamoselsistemadeecuaciones:

dx
= yx
dt
dy
=x z y
dt
dz
= xy z
dt
paralosvaloresdelosparmetros =10, =28, =8/3 ydatoinicialx(0)=y(0)=z(0)=1.Como
ejercicio,puedesintentarresolverlaecuacinaproximadamenteconelmtododeEuler.Parautilizarunode
losmtodosnumricosdeMatlab,creamosunficherodeMatlab(File/New/Mfile)conelnombrelorentz.m
yescribimos:

functionv=lorentz(t,x)
sigma=10; %parametros
rho=28;
beta=8/3;
v=[sigma*(x(2)x(1));x(1)*(rhox(3))x(2);x(1)*x(2)beta*x(3)];

ydespusescribimosenlaterminal:

t_0=0;
t_f=40;
v0=[1;1;1];
[t,v]=ode45('lorentz',[t_0,t_f],v0);
plot3(v(:,1),v(:,2),v(:,3))

2.4Resolucindeunsistemastiff.

Estudiaremosahoraunsistemalinealmuchomssencilloperoquemuestralasdebilidadesdemtodos
explcitoscomoeldeEuler:
dx
=x
dt
dy
=10 3 y
dt

condatoinicialx(0)=y(0)=1.Ponemoslasdosvariablesjuntasenunmismovectorvparaescribirelsistema
deecuacionesenformamatricial:


dx
dt
dy
=
1 0
0 10 y3
x

dt
dv
=M v
dt
yaplicamoselmtododeEulerexplcito:

tsteps=1000; %Subdivisionesdelintervalo
t_f=10; %valorfinaldetiempo
dt=t_f/tsteps; %elpasodetiempo
t=0:dt:t_f; %definimoslosdiferentestiempos
v=zeros(2,tsteps+1);
v(:,1)=[1;1]; %definimoseldatoinicial
M=[10;010^3];
A=eye(2)+dt*M;
forn=1:tsteps
v(:,n+1)=A*v(:,n);
end %metododeEuler
plot(t,v) %dibujalaposicionylavelocidad
Repitiendoloanteriorparadistintosvaloresdetstepsobservamoscomportamientosmuydistintos.Para
obtenerresultadosrazonables,esnecesarioquetstepsvalgaalmenos10000,unvalorexcesivamente
grandeparaunaecuacintansencilla.Paravaloresdetstepsmenoresque5000,elresultadoes
catastrfico.Sinembargo,laecuacinestansencillaquesepuedeintegrardeformaexacta:

x t=et
3

y t=e10 t

Esclaroquelaecuacindeberaconvergera(0,0),ybastantedeprisa.Tambinesfcilcalcularlasolucin
exactadelmtododeEulerexplcito:

x n=1dt n x 0
3 n
y n=110 dt y 0

Ahorapodemosexplicarelcomportamientoobservado:paradt>2103: y n tiendeainfinitoenn.
ProbamosahoraelmtododeEulerimplcito,quesecomportamuchomejorquelosmtodosexplcitoscon
ecuacionesdetipostiff.Estemtodosebasaenlaaproximacin:

v tdtv tdt v ' tdt

paraunvalordedtpequeo.Paraempezar,tomamosunconjuntodeinstantesdetiempo t n=t 0 n dt y
definimos v 0=v 0 .Acontinuacin,definimoselvalordelospuntos v n deformarecursiva,mediante
elesquemanumrico:
v n 1 =v ndt M v n 1
v n1= I dt M 1 v n

AdaptamoselcdigodelesquemadeEulerexplcitoparaqueutiliceelmtodoimplcito:

tsteps=1000; %Subdivisionesdelintervalo
t_f=10; %valorfinaldetiempo
dt=t_f/tsteps; %elpasodetiempo
t=0:dt:t_f; %definimoslosdiferentestiempos
v=zeros(2,tsteps+1);
v(:,1)=[1;1]; %definimoseldatoinicial
M=[10;010^3];
A=(eye(2)dt*M)^(1);
forn=1:tsteps
v(:,n+1)=A*v(:,n);
end %metododeEulerimplicito
plot(t,v) %dibujalaposicionylavelocidad

Ahoralosresultadossonmsrazonables,inclusoparavaloresdetstepstanpequeoscomo10.
Observemoslasolucinexactadelmtodonumrico:

v n = I dt M n v0

1
x n= x0
1dtn
1
y n= y0
1103 dt n
Enestecasoparacualquiervalordedtlasolucinconvergealvector(0,0)deformaexponencial,aligualque
lasolucinexacta.Engeneral,losmtodosimplcitossonmsestablesquelosexplcitos.Inclusomtodos
numricosmssofisticadoscomolosdeode23uode45nodanbuenresultadoconecuacionesdetipo
stiff.Alsermtodosadaptativos,reducensupasodetiempolosuficientecomoparadarunbuenresultado,
peroacostadenecesitarmuchasmsoperacionesqueunmtodoimplcito.Porcontra,losmtodos
implcitostienenensucontraquenosonfcilesdeaplicaraproblemasnolineales.Adems,cuandose
aplicanaproblemaslinealesperoconunvectordedimensinmuygrande,requierenmuchotiempode
cmputo,pueshayqueobieninvertirunamatrizgrande,oalmenosresolverunsistemalinealdeecuaciones
encadapaso.Paraimplementarestaltimaopcinenelcdigoanterior,cambiaramoselcdigodelbucle
principaldeestemodo:

A=(eye(2)dt*M);
forn=1:tsteps
v(:,n+1)=A\v(:,n);
end %metododeEulerimplicito

Aunqueenestecasonovamosapercibirladiferencia,stapuedeserimportanteensistemasdedimensin
alta.Veremosenelsiguientecaptulodelasprcticasqueesteproblemasurgedeformanaturalalresolver
ecuacionesenderivadasparciales.

También podría gustarte