Está en la página 1de 9

3/4/2015

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

x = exp(t) (A sin(t) + B cos(t))


v =

dx
dt

= exp(t) (A sin(t) + B cos(t)) + exp(t) (A cos(t) B sin(t))

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

También podría gustarte