Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Solucinnumricadeecuacionesdiferenciales
banner
Inicio
MATLAB
Racesdeecuaciones
Sistemasdeecuaciones
Valoresyvectores
propios
Integracinnumrica
Ecuaciones
diferenciales
Interpolacin,regresin
Numrico
Solucinnumricadeecuacionesdiferenciales
(I)
Lasleyesquegobiernanlosfenmenosdelanaturalezaseexpresanhabitualmenteenformadeecuaciones
diferenciales.Lasecuacionesdelmovimientodeloscuerpos(lasegundaleydeNewton)esunaecuacin
diferencialdesegundoorden,comoloeslaecuacinquedescribelossistemasoscilantes,lapropagacindelas
ondas,latransmisindelcalor,ladifusin,elmovimientodepartculassubatmicas,etc.
Pocasecuacionesdiferencialestienenunasolucinanalticasencilla,lamayorpartedelasvecesesnecesario
realizaraproximaciones,estudiarelcomportamientodelsistemabajociertascondiciones.As,enunsistematan
simplecomounpndulo,laamplituddelaoscilacinhadeserpequeayelrozamientohadeserdespreciable,
paraobtenerunasolucinsencillaquedescribaaproximadamentesumovimientoperidico.
SeestudiaelprocedimientodeRungeKuttaqueseaplicadeformadirectaaunaecuacindiferencialdeprimer
orden,peroveremoscomoseextiendeaunsistemadeecuacionesdeprimerorden,aunecuacindiferencialde
segundoordenyaunsistemadeecuacionesdiferencialesdesegundoorden.
ElprocedimientodeRungeKuttasepuedeprogramarfcilmenteenlosordenadoresyadems,seempleamucho
enlaprctica,debidoalasuexactitudrelativamenteelevadadelasolucinaproximadadelaecuacin
diferencial.LajustificacindelprocedimientodeRungeKuttanoessencilla,ellectorinteresadopuedeconsultar
algnlibrodemtodosnumricosdeanlisis.
MtododeEuler
Vamosaresolverlaecuacindiferencialdeprimerorden
dx
= f (t, x)
dt
conconlacondicininicialdequeenelinstantet0laposicinesx0
Laprimeraderivadanospermiteconocerlaposicinxi+1enelinstanteti+1,apartirdelaposicinxienel
instantetideacuerdoalafrmulasiguiente.Lalneadecolorrojoeslatangentealacurvaenelinstanteti
xi+1=xi+f(ti,xi)h
ElprocedimientodeEulerproduceunerrorqueseacumulaacadapasohdeintegracin,queeselsegmentoen
colorazulqueunelosdospuntosenlafigura.
Escribimosunafuncindenominadaeuler,alaquelepasaremos:
lafuncinf(t,x),
lacondicininicialdequeenelinstantet0laposicinesx0,
elinstantefinaltf
elnmerodepasosdeintegracinn
ynosdevolverunvectortysucorrespondientevectorx.
function[t,x]=euler(f,t0,tf,x0,n)
h=(tft0)/n
t=t0:h:tf
x=zeros(n+1,1)%reservamemoriaparan+1elementosdelvectorx
x(1)=x0
fori=1:n
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/diferencial/diferencial.html
1/9
3/4/2015
Solucinnumricadeecuacionesdiferenciales
x(i+1)=x(i)+f(t(i),x(i))*h
end
end
Supongamosquequeremosintegrarlaecuacindiferencial
dx
= cos t
dt
conlascondicininicialt=0,x=0.
t
x 0 =
cos tdt
x = sin t
Tomamosunintervaloh=/6,yconstruimoslasiguientetabla
t
dx
= cos t
x(Euler)
dt
0
/6
/3
/2
2/3
5/6
1
0.866
0.5
0
0.5
0.866
0
0.523
0.977
1.239
1.239
0.977
0.523
x=sin
t
0
0.5
0.866
1
0.866
0.5
0
EstatablanosilustraelmododeaplicarelmtododeEuleraunaecuacindiferencialdeprimerorden.Para
aplicarelmtododeEulerprecisamosdeunpasohpequeo,inclusoasloserroressevanacumulandoyalcabo
deciertotiempoladiferenciaentreelvalorexactoyelcalculadoesgrande.
Escribimosenscripteuler_scriptenelquedefiniremoslafuncinf(t,x),lascondicionesinicialesyllamaremosa
lafuncineuler.Finalmente,representaremosgrficamentelasolucinexactaylaobtenidaaplicandoelmtodo
deEuler
tf=input('tiempofinal,tf:')
n=input('nmerodepasos,n:')
f=@(t,x)cos(t)
%condicionesiniciales
t0=0
x0=0
[t,x]=euler(f,t0,tf,x0,n)
holdon
plot(t,x,'b')
y=sin(t)
plot(t,y,'r')
xlabel('t')
ylabel('x')
legend('aproximada','exacta')
title('dx/dt=cost')
holdoff
Enlaventanadecomandoscorremoselscripteuler_script
>>euler_script
tiempofinal,tf:pi
nmerodepasos,n:40
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/diferencial/diferencial.html
2/9
3/4/2015
Solucinnumricadeecuacionesdiferenciales
euler
HaydiferenciaentrelasolucinexactaylaobtenidamedianteintegracinnumricaporelmtododeEuler
MtododeRungeKutta
EnestaseccinvamosaestudiarlaaplicacindelmtododeRungeKuttaa:
Unaecuacindiferencialdeprimerorden
Unsistemadedosecuacionesdiferencialesdeprimerorden
Unaecuacindifrencialdesegundoorden
Unsistemadedosecuacionesdiferencialesdesegundoorden
Ecuacindiferencialdeprimerorden
Seaunaecuacindiferencialdeprimerorden,conlacondicininicialdequeenelinstantet0elvalorinicialdex
esx0
Seeligeunaanchuradepasohysecalculancuatronmerosk1,k2,k3,k4deacuerdoconelprocedimiento
esquematizadoenlatablaadjunta.SegnelprocedimientoordinariodeRungeKutta,apartirdelvalordexenel
instantetsedeterminaelvalordexenelinstantet+hmediantelafrmulaquefiguraenlaltimafiladedicha
tabla.
dx
= f (t, x)
dt
k 1 = hf (t, x)
k 2 = hf (t +
k 3 = hf (t +
h, x +
h, x +
1
2
1
2
k1 )
k2 )
k 4 = hf (t + h, x + k 3 )
1
x(t + h) = x(t) +
6
(k 1 + 2k 2 + 2k 3 + k 4 )
Definimoslafuncinrk_1queresuelvelaecuacindiferencialdeprimerorden,cuandolepasamos:
lafuncinf(t,x),
lacondicininicialdequeenelinstantet0elvalorinicialesx0,
elinstantefinaltf
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/diferencial/diferencial.html
3/9
3/4/2015
Solucinnumricadeecuacionesdiferenciales
elnmerodepasosdeintegracinncomprendidosentreelinstanteinicalt0yfinaltf.
ynosdevolverunvectortysucorrespondientevectorx.
function[t,x]=rk_1(f,t0,tf,x0,n)
h=(tft0)/n
t=t0:h:tf
x=zeros(n+1,1)%reservamemoriaparanelementosdelvectorx
x(1)=x0
fori=1:n
k1=h*f(t(i),x(i))
k2=h*f(t(i)+h/2,x(i)+k1/2)
k3=h*f(t(i)+h/2,x(i)+k2/2)
k4=h*f(t(i)+h,x(i)+k3)
x(i+1)=x(i)+(k1+2*k2+2*k3+k4)/6
end
end
Considreseelcircuitoenseriedelafigura.Inicialmenteelcondensadorestdescargado.Sisecierrael
interruptorIlacargaempiezaafluirproduciendocorrienteenelcircuito,elcondensadorseempiezaacargar.
Unavezqueelcondensadoradquierelacargamxima,lacorrientecesaenelcircuito.
R
dq
dt
= V
q
C
dq
=
C V q
1
RC
dtq = C V (1 exp(
t
RC
))
Escribimoselscriptcargaparaquerealicelassiguientestareas:
1. Establezca,mediantecomandosinput:
LaresistenciaRdelcircuito
LacapacidadCdelcondensador
Eltiempofinal,tf
elnmerodepasos,n.
2. Fijelascondicionesiniciales,enelinstanteinicialt=0,elcondensadorestdescargadox=0.
3. Definalafuncinf(t,x),
4. Llamealprocedimientonumricork_1
5. Medianteelcomandoplotrealiceunarepresentacingrficadelasolucinnumrica
6. Realiceunarepresentacingrficadelasolucinexacta
Ejemplo:R=2.0,C=0.8,ytf=10.
V0=10
R=input('ResistenciaR:')
C=input('CapacidadC:')
tf=input('tiempofinal,tf:')
n=input('nmerodepasos,n:')
f=@(t,x)V0/Rx/(R*C)
%condicionesiniciales
t0=0x0=0
[t,x]=rk_1(f,t0,tf,x0,n)
holdon
plot(t,x,'b')
y=C*V0*(1exp(t/(R*C)))
plot(t,y,'r')
xlabel('t')
ylabel('q')
legend('aproximada','exacta','Location','Southeast')
title('Cargadelcondensador')
holdoff
Enlaventanadecomandoscorremoselscriptcarga
>>carga
ResistenciaR:2
CapacidadC:0.8
tiempofinal,tf:10
nmerodepasos,n:50
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/diferencial/diferencial.html
4/9
3/4/2015
Solucinnumricadeecuacionesdiferenciales
Noseapreciadiferenciaentrelasolucinexactaylanumrica,aplicandoelprocedimientodeRunge_Kutta.
Sistemadedosecuacionesdiferencialesdeprimerorden
ElprocedimientodeRungeKuttaesigualmenteefectivoenlaresolucindeunsistemadedosecuaciones
diferencialesdeprimerorden.
dx
dy
= f (t, x, y)
dt
= g(t, x, y)
dt
ElprocedimientodeaplicacindelmtododeRungeKuttaacadaunadelasecuacionesdiferenciales,conlas
condicininicialsiguiente,enelinstantet0
elvalorinicialdexesx0
elvalorinicialdeyesy0
seesquematizaenlatablaadjunta.Comovemosademsdeloscuatronmerosk1,k2,k3,k4paralaprimera
ecuacindiferencialprecisamosotroscuatronmerosl1,l2,l3,l4paralasegundaecuacindiferencial.Apartir
delvalordexenelinstantet,sedeterminaelvalordexenelinstantet+h,yapartirdelvalordeyenel
instantetsedeterminaelvalordeyenelinstantet+hmediantelasfrmulasdelaltimafiladelatabla.
dx
dy
= f (t, x, y)
= g(t, x, y)
dt
dt
k 1 = hf (t, x, y)
k 2 = hf (t +
k 3 = hf (t +
l1 = hg(t, x, y)
h, x +
h, x +
1
2
1
2
k1 , y +
k2 , y +
1
2
1
2
l1 , )
l2 )
k 4 = hf (t + h, x + k 3 , y + l3 )
l2 = hg (t +
l3 = hg (t +
h, x +
h, x +
2
1
2
k1 , y +
k2 , y +
1
2
1
2
l1 )
l2 )
l4 = hg (t + h, x + k 3 , y + l3 )
1
x(t + h) = x(t) +
1
(k 1 + 2k 2 + 2k 3 + k 4 )
y(t + h) = y(t) +
6
(l 1 + 2l 2 + 2l 3 + l 4 )
Definimoslafuncinrk_2_1queresuelveelsistemadedosecuacionesdiferencialesdeprimerorden,cuandole
pasamos:
lasfuncionesf(t,x,y)yg(t,x,y)
lascondicionesiniciales(x0,y0)enelinstantet0
elnmerondepasosdeintegracinentret0yeltiempofinaltf
Nosdevuelvelosvectoresxeyparacadainstantequeseguardaenelvectortcomprendidoentreelinstante
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/diferencial/diferencial.html
5/9
3/4/2015
Solucinnumricadeecuacionesdiferenciales
inicialt0yelfinaltf.
function[t,x,y]=rk_2_1(f,g,t0,tf,x0,y0,n)
h=(tft0)/n
t=t0:h:tf
x=zeros(n+1,1)%reservamemoriaparan+1element(i)osdelvect(i)orx(i)
y=zeros(n+1,1)
x(1)=x0y(1)=y0
fori=1:n
k1=h*f(t(i),x(i),y(i))
l1=h*g(t(i),x(i),y(i))
k2=h*f(t(i)+h/2,x(i)+k1/2,y(i)+l1/2)
l2=h*g(t(i)+h/2,x(i)+k1/2,y(i)+l1/2)
k3=h*f(t(i)+h/2,x(i)+k2/2,y(i)+l2/2)
l3=h*g(t(i)+h/2,x(i)+k2/2,y(i)+l2/2)
k4=h*f(t(i)+h,x(i)+k3,y(i)+l3)
l4=h*g(t(i)+h,x(i)+k3,y(i)+l3)
x(i+1)=x(i)+(k1+2*k2+2*k3+k4)/6
y(i+1)=y(i)+(l1+2*l2+2*l3+l4)/6
end
end
ConsideremosunaserieradioactivadetreselementosA>B>Cenlaque,unasustanciaradiactivaAse
desintegraysetransformaenotrasustanciaradiactivaB,queasuvezsedesintegraysetransformaenuna
sustanciaCestable.Lasecuacionesdiferencialesquegobiernanelprocesoysussolucionesanalticasson,
respectivamente,
dx
dt
dy
dt
= axx = x0 exp(at)
= ax byy =
a
ba
x0 (exp(at) exp(bt))
Lasolucinanalticaqueaparecealaderecha,sehaobtenidoconlascondicionesinicialest=0,x=x0ey=0.La
segundasolucinseobtienesiemprequeaseadistintodeb.Enelcasodequeaseaigualab,lasolucin
analticaparayes
y = x0 a exp(at)
Lainterpretacindelsistemadeecuacionesdiferencialesnoescomplicada.Enlaunidaddetiempo,desaparecen
axncleosdelasustanciaAaldesintegrarse(primeraecuacin).Enlaunidaddetiempo,seproducenaxncleos
delasustanciaByasuvezdesaparecenbxncleosdelasustanciaB,quealdesintegrarsesetransformanen
ncleosdelasustanciaCestable(segundaecuacin).
Escribimoselscriptradioactivoenelquedefiniremoslasfuncionesf(t,x,y),g(t,x,y),lascondicionesinicialesy
llamaremosalafuncinrk_2_1
a=input('parmetroa:')
b=input('parmetrob:')
x0=input('valorinicialdex:')
y0=input('valorinicialdey:')
tf=input('tiempofinal,tf:')
n=input('nmerodepasos,n:')
f=@(t,x,y)a*x
g=@(t,x,y)a*xb*y
%condicionesiniciales
t0=0
[t,x,y]=rk_2_1(f,g,t0,tf,x0,y0,n)
holdon
plot(t,x,'b')
plot(t,y,'r')
xlabel('t')
ylabel('x,y')
legend('x(t)','y(t)')
title('dx/dt=ax,dy/dt=axby')
holdoff
Enlaventanadecomandoscorremoselscriptradioactivo
>>radioactivo
parmetroa:0.1
parmetrob:.2
valorinicialdex:100
valorinicialdey:0
tiempofinal,tf:10
nmerodepasos,n:40
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/diferencial/diferencial.html
6/9
3/4/2015
Solucinnumricadeecuacionesdiferenciales
Ecuacindiferencialdesegundoorden
Existenmuchassituacionesenlasqueesnecesarioresolverunaecuacindiferencialdesegundoorden.
d
dt
x
2
= f (t, x, v)
conlascondicionesiniciales
dx
x(t0 ) = x0 (
)
dt
= v0
t0
Unaecuacindiferencialdesegundoordenesequivalenteaunsistemadedosecuacionesdiferencialesdeprimer
orden,porloqueaplicaremoselmismoesquema.
dx
dv
= v
= f (t, x, v)
dt
dt
l1 = hf (t, x, v)
k 1 = hv
k 2 = h (v +
k 3 = h (v +
l1 )
l2 )
l2 = hf (t +
l3 = hf (t +
h, x +
h, x +
1
2
1
2
k1 , v +
k2 , v +
1
2
1
2
l1 )
l2 )
l4 = hf (t + h, x + k 3 , v + l3 )
k 4 = h (v + l3 )
1
x(t + h) = x(t) +
6
1
(k 1 + 2k 2 + 2k 3 + k 4 )
v(t + h) = v(t) +
6
(l 1 + 2l 2 + 2l 3 + l 4 )
Definimoslafuncinrk_2queresuelvelaecuacindiferencialdesegundoorden,cuandolepasamos:
lafuncinf(t,x,v)
lascondicionesiniciales:posicininicialx0yvelocidadinicialv0enelinstantet0
elnmerondepasosdeintegracinentret0yeltiempofinaltf
Nosdevuelvelosvectoresdelasposicionesxylasvelocidadesvparacadainstantequeseguardaenelvectort
comprendidoentreelinstanteinicialt0yelfinaltf.
function[t,x,v]=rk_2(f,t0,tf,x0,v0,n)
h=(tft0)/n
t=t0:h:tf
x=zeros(n+1,1)%reservamemoriaparan+1element(i)osdelvect(i)orx(i)
v=zeros(n+1,1)
x(1)=x0v(1)=v0
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/diferencial/diferencial.html
7/9
3/4/2015
Solucinnumricadeecuacionesdiferenciales
fori=1:n
k1=h*v(i)
l1=h*f(t(i),x(i),v(i))
k2=h*(v(i)+l1/2)
l2=h*f(t(i)+h/2,x(i)+k1/2,v(i)+l1/2)
k3=h*(v(i)+l2/2)
l3=h*f(t(i)+h/2,x(i)+k2/2,v(i)+l2/2)
k4=h*(v(i)+l3)
l4=h*f(t(i)+h,x(i)+k3,v(i)+l3)
x(i+1)=x(i)+(k1+2*k2+2*k3+k4)/6
v(i+1)=v(i)+(l1+2*l2+2*l3+l4)/6
end
end
Laecuacindiferencialquedescribeunosciladorarmnicoamortiguadoysusolucinparaunascondiciones
inicialesfijadases
d
dt
+ 2
dx
dt
+ x = 0
0
dx
dt
Condicionesiniciales:enelinstantet=0,laposicininicialesx0ylavelocidadinicialv0.
t = 0{
x0 = B
v0 = B + A
x = exp(t) (
v 0 +x 0
sin(t) + x0 cos(t))
Escribimoselscriptosciladorenelquedefiniremoslafuncinf(t,x,v),lascondicionesinicialesyllamaremosala
funcinrk_2
w0=input('frecuenciaangularw0:')
g=input('rozamiento,gamma:')
x0=input('posicininicial,x0:')
v0=input('velocidadinicial,v0:')
tf=input('tiempofinal,tf:')
n=input('nmerodepasos,n:')
f=@(t,x,v)2*g*vw0*w0*x
%condicionesiniciales
t0=0
holdon
%solucinnumrica
[t,x,v]=rk_2(f,t0,tf,x0,v0,n)
plot(t,x,'b')
%solucinanaltica
w=sqrt(w0*w0g*g)
x=((v0+g*x0)*sin(w*t)/w+x0*cos(w*t)).*exp(g*t)
plot(t,x,'r')
gridon
xlabel('t')
ylabel('x')
legend('aproximado','exacto')
title('osciladoramortiguado')
holdoff
Enlaventanadecomandoscorremoselscriptosciladorcondistintascondicionesiniciales
>>oscilador
frecuenciaangular,w0:2
rozamiento,gamma:0.5
posicininicial,x0:1.5
velocidadinicial,v0:0
tiempofinal,tf:8
nmerodepasos,n:100
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/diferencial/diferencial.html
8/9
3/4/2015
Solucinnumricadeecuacionesdiferenciales
Noseapreciatampocodiferenciaentrelasolucinexactaylanumrica,aplicandoelprocedimientode
Runge_Kutta.
EnergasRenovablesEUITIdeEibar
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/diferencial/diferencial.html
9/9