solución numérica de ecuaciones diferenciales
TRANSCRIPT
-
3/4/2015 Solucinnumricadeecuacionesdiferenciales
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/diferencial/diferencial.html 1/9
Racesdeecuaciones
Sistemasdeecuaciones
Valoresyvectorespropios
Integracinnumrica
Ecuacionesdiferenciales
Interpolacin,regresin
banner
Inicio MATLAB Numrico
Solucinnumricadeecuacionesdiferenciales(I)
Lasleyesquegobiernanlosfenmenosdelanaturalezaseexpresanhabitualmenteenformadeecuacionesdiferenciales.Lasecuacionesdelmovimientodeloscuerpos(lasegundaleydeNewton)esunaecuacindiferencialdesegundoorden,comoloeslaecuacinquedescribelossistemasoscilantes,lapropagacindelasondas,latransmisindelcalor,ladifusin,elmovimientodepartculassubatmicas,etc.
Pocasecuacionesdiferencialestienenunasolucinanalticasencilla,lamayorpartedelasvecesesnecesariorealizaraproximaciones,estudiarelcomportamientodelsistemabajociertascondiciones.As,enunsistematansimplecomounpndulo,laamplituddelaoscilacinhadeserpequeayelrozamientohadeserdespreciable,paraobtenerunasolucinsencillaquedescribaaproximadamentesumovimientoperidico.
SeestudiaelprocedimientodeRungeKuttaqueseaplicadeformadirectaaunaecuacindiferencialdeprimerorden,peroveremoscomoseextiendeaunsistemadeecuacionesdeprimerorden,aunecuacindiferencialdesegundoordenyaunsistemadeecuacionesdiferencialesdesegundoorden.
ElprocedimientodeRungeKuttasepuedeprogramarfcilmenteenlosordenadoresyadems,seempleamuchoenlaprctica,debidoalasuexactitudrelativamenteelevadadelasolucinaproximadadelaecuacindiferencial.LajustificacindelprocedimientodeRungeKuttanoessencilla,ellectorinteresadopuedeconsultaralgnlibrodemtodosnumricosdeanlisis.
MtododeEuler
Vamosaresolverlaecuacindiferencialdeprimerorden
conconlacondicininicialdequeenelinstantet0laposicinesx0
Laprimeraderivadanospermiteconocerlaposicinxi+1enelinstanteti+1,apartirdelaposicinxienelinstantetideacuerdoalafrmulasiguiente.Lalneadecolorrojoeslatangentealacurvaenelinstanteti
xi+1=xi+f(ti,xi)h
ElprocedimientodeEulerproduceunerrorqueseacumulaacadapasohdeintegracin,queeselsegmentoencolorazulqueunelosdospuntosenlafigura.
Escribimosunafuncindenominadaeuler,alaquelepasaremos:
lafuncinf(t,x),
lacondicininicialdequeenelinstantet0laposicinesx0,
elinstantefinaltf
elnmerodepasosdeintegracinn
ynosdevolverunvectortysucorrespondientevectorx.
function[t,x]=euler(f,t0,tf,x0,n)h=(tft0)/nt=t0:h:tfx=zeros(n+1,1)%reservamemoriaparan+1elementosdelvectorxx(1)=x0fori=1:n
"0 4
4
0
-
3/4/2015 Solucinnumricadeecuacionesdiferenciales
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/diferencial/diferencial.html 2/9
x(i+1)=x(i)+f(t(i),x(i))*hendend
Supongamosquequeremosintegrarlaecuacindiferencial
conlascondicininicialt=0,x=0.
Tomamosunintervaloh=/6,yconstruimoslasiguientetabla
t x(Euler) x=sint
0 1 0 0/6 0.866 0.523 0.5/3 0.5 0.977 0.866/2 0 1.239 12/3 0.5 1.239 0.8665/6 0.866 0.977 0.5 0.523 0
EstatablanosilustraelmododeaplicarelmtododeEuleraunaecuacindiferencialdeprimerorden.ParaaplicarelmtododeEulerprecisamosdeunpasohpequeo,inclusoasloserroressevanacumulandoyalcabodeciertotiempoladiferenciaentreelvalorexactoyelcalculadoesgrande.
Escribimosenscripteuler_scriptenelquedefiniremoslafuncinf(t,x),lascondicionesinicialesyllamaremosalafuncineuler.Finalmente,representaremosgrficamentelasolucinexactaylaobtenidaaplicandoelmtododeEuler
tf=input('tiempofinal,tf:')n=input('nmerodepasos,n:')f=@(t,x)cos(t)%condicionesinicialest0=0x0=0[t,x]=euler(f,t0,tf,x0,n)
holdonplot(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_scripttiempofinal,tf:pinmerodepasos,n:40
DPT 0
4
0
4 DPT 0 0
0
4 TJO 0
DPT 0
4
0
-
3/4/2015 Solucinnumricadeecuacionesdiferenciales
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/diferencial/diferencial.html 3/9
euler
HaydiferenciaentrelasolucinexactaylaobtenidamedianteintegracinnumricaporelmtododeEuler
MtododeRungeKutta
EnestaseccinvamosaestudiarlaaplicacindelmtododeRungeKuttaa:
Unaecuacindiferencialdeprimerorden
Unsistemadedosecuacionesdiferencialesdeprimerorden
Unaecuacindifrencialdesegundoorden
Unsistemadedosecuacionesdiferencialesdesegundoorden
Ecuacindiferencialdeprimerorden
Seaunaecuacindiferencialdeprimerorden,conlacondicininicialdequeenelinstantet0elvalorinicialdexesx0
Seeligeunaanchuradepasohysecalculancuatronmerosk1,k2,k3,k4deacuerdoconelprocedimientoesquematizadoenlatablaadjunta.SegnelprocedimientoordinariodeRungeKutta,apartirdelvalordexenelinstantetsedeterminaelvalordexenelinstantet+hmediantelafrmulaquefiguraenlaltimafiladedichatabla.
Definimoslafuncinrk_1queresuelvelaecuacindiferencialdeprimerorden,cuandolepasamos:
lafuncinf(t,x),
lacondicininicialdequeenelinstantet0elvalorinicialesx0,
elinstantefinaltf
"0 4
4
0
$"0 4'
$" 0 $ 4 '
'
$" 0 $ 4 '
'
$" 0 $ 4 '
'
40 $ 40
'
'
'
'
-
3/4/2015 Solucinnumricadeecuacionesdiferenciales
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/diferencial/diferencial.html 4/9
elnmerodepasosdeintegracinncomprendidosentreelinstanteinicalt0yfinaltf.
ynosdevolverunvectortysucorrespondientevectorx.
function[t,x]=rk_1(f,t0,tf,x0,n)h=(tft0)/nt=t0:h:tfx=zeros(n+1,1)%reservamemoriaparanelementosdelvectorxx(1)=x0fori=1:nk1=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)/6endend
Considreseelcircuitoenseriedelafigura.Inicialmenteelcondensadorestdescargado.SisecierraelinterruptorIlacargaempiezaafluirproduciendocorrienteenelcircuito,elcondensadorseempiezaacargar.Unavezqueelcondensadoradquierelacargamxima,lacorrientecesaenelcircuito.
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=10R=input('ResistenciaR:')C=input('CapacidadC:')tf=input('tiempofinal,tf:')n=input('nmerodepasos,n:')
f=@(t,x)V0/Rx/(R*C)%condicionesinicialest0=0x0=0[t,x]=rk_1(f,t0,tf,x0,n)
holdonplot(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
>>cargaResistenciaR:2CapacidadC:0.8tiempofinal,tf:10nmerodepasos,n:50
-
0
G
-
0- FYQ
-
-
-
G
0
G
0
-
3/4/2015 Solucinnumricadeecuacionesdiferenciales
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/diferencial/diferencial.html 5/9
Noseapreciadiferenciaentrelasolucinexactaylanumrica,aplicandoelprocedimientodeRunge_Kutta.
Sistemadedosecuacionesdiferencialesdeprimerorden
ElprocedimientodeRungeKuttaesigualmenteefectivoenlaresolucindeunsistemadedosecuacionesdiferencialesdeprimerorden.
ElprocedimientodeaplicacindelmtododeRungeKuttaacadaunadelasecuacionesdiferenciales,conlascondicininicialsiguiente,enelinstantet0
elvalorinicialdexesx0
elvalorinicialdeyesy0
seesquematizaenlatablaadjunta.Comovemosademsdeloscuatronmerosk1,k2,k3,k4paralaprimeraecuacindiferencialprecisamosotroscuatronmerosl1,l2,l3,l4paralasegundaecuacindiferencial.Apartirdelvalordexenelinstantet,sedeterminaelvalordexenelinstantet+h,yapartirdelvalordeyenelinstantetsedeterminaelvalordeyenelinstantet+hmediantelasfrmulasdelaltimafiladelatabla.
Definimoslafuncinrk_2_1queresuelveelsistemadedosecuacionesdiferencialesdeprimerorden,cuandolepasamos:
lasfuncionesf(t,x,y)yg(t,x,y)
lascondicionesiniciales(x0,y0)enelinstantet0
elnmerondepasosdeintegracinentret0yeltiempofinaltf
Nosdevuelvelosvectoresxeyparacadainstantequeseguardaenelvectortcomprendidoentreelinstante
"0 4 5 #0 4 5
4
0
5
0
"0 4 5
4
0
#0 4 5
5
0
$"0 4 5'
$" 0 $ 4 5 '
'
(
$" 0 $ 4 5 '
'
(
$" 0 $ 4 5 '
'
(
$#0 4 5(
$# 0 $ 4 5 (
'
(
$# 0 $ 4 5 (
'
(
$# 0 $ 4 5 (
'
(
40 $ 40
'
'
'
'
50 $ 50
(
(
(
(
-
3/4/2015 Solucinnumricadeecuacionesdiferenciales
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/diferencial/diferencial.html 6/9
inicialt0yelfinaltf.
function[t,x,y]=rk_2_1(f,g,t0,tf,x0,y0,n)h=(tft0)/nt=t0:h:tfx=zeros(n+1,1)%reservamemoriaparan+1element(i)osdelvect(i)orx(i)y=zeros(n+1,1)x(1)=x0y(1)=y0fori=1:nk1=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)/6y(i+1)=y(i)+(l1+2*l2+2*l3+l4)/6endend
ConsideremosunaserieradioactivadetreselementosA>B>Cenlaque,unasustanciaradiactivaAsedesintegraysetransformaenotrasustanciaradiactivaB,queasuvezsedesintegraysetransformaenunasustanciaCestable.Lasecuacionesdiferencialesquegobiernanelprocesoysussolucionesanalticasson,respectivamente,
Lasolucinanalticaqueaparecealaderecha,sehaobtenidoconlascondicionesinicialest=0,x=x0ey=0.Lasegundasolucinseobtienesiemprequeaseadistintodeb.Enelcasodequeaseaigualab,lasolucinanalticaparayes
Lainterpretacindelsistemadeecuacionesdiferencialesnoescomplicada.Enlaunidaddetiempo,desaparecenaxncleosdelasustanciaAaldesintegrarse(primeraecuacin).Enlaunidaddetiempo,seproducenaxncleosdelasustanciaByasuvezdesaparecenbxncleosdelasustanciaB,quealdesintegrarsesetransformanenncleosdelasustanciaCestable(segundaecuacin).
Escribimoselscriptradioactivoenelquedefiniremoslasfuncionesf(t,x,y),g(t,x,y),lascondicionesinicialesyllamaremosalafuncinrk_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*xg=@(t,x,y)a*xb*y%condicionesinicialest0=0
[t,x,y]=rk_2_1(f,g,t0,tf,x0,y0,n)holdonplot(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
>>radioactivoparmetroa:0.1parmetrob:.2valorinicialdex:100valorinicialdey:0tiempofinal,tf:10nmerodepasos,n:40
44 FYQ0
4
0
4
4 55 FYQ0 FYQ0
5
0
4
5 FYQ04
-
3/4/2015 Solucinnumricadeecuacionesdiferenciales
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/diferencial/diferencial.html 7/9
Ecuacindiferencialdesegundoorden
Existenmuchassituacionesenlasqueesnecesarioresolverunaecuacindiferencialdesegundoorden.
conlascondicionesiniciales
Unaecuacindiferencialdesegundoordenesequivalenteaunsistemadedosecuacionesdiferencialesdeprimerorden,porloqueaplicaremoselmismoesquema.
Definimoslafuncinrk_2queresuelvelaecuacindiferencialdesegundoorden,cuandolepasamos:
lafuncinf(t,x,v)
lascondicionesiniciales:posicininicialx0yvelocidadinicialv0enelinstantet0
elnmerondepasosdeintegracinentret0yeltiempofinaltf
Nosdevuelvelosvectoresdelasposicionesxylasvelocidadesvparacadainstantequeseguardaenelvectortcomprendidoentreelinstanteinicialt0yelfinaltf.
function[t,x,v]=rk_2(f,t0,tf,x0,v0,n)h=(tft0)/nt=t0:h:tfx=zeros(n+1,1)%reservamemoriaparan+1element(i)osdelvect(i)orx(i)v=zeros(n+1,1)x(1)=x0v(1)=v0
"0 4 2
4
0
4 0
4
4
0
0
2
2
4
0
"0 4 2
2
0
$2'
$ 2 '
(
$ 2 '
(
$ 2 '
(
$"0 4 2(
$" 0 $ 4 2 (
'
(
$" 0 $ 4 2 (
'
(
$" 0 $ 4 2 (
'
(
40 $ 40
'
'
'
'
20 $ 20
(
(
(
(
-
3/4/2015 Solucinnumricadeecuacionesdiferenciales
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/diferencial/diferencial.html 8/9
fori=1:nk1=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)/6v(i+1)=v(i)+(l1+2*l2+2*l3+l4)/6endend
Laecuacindiferencialquedescribeunosciladorarmnicoamortiguadoysusolucinparaunascondicionesinicialesfijadases
Condicionesiniciales:enelinstantet=0,laposicininicialesx0ylavelocidadinicialv0.
Escribimoselscriptosciladorenelquedefiniremoslafuncinf(t,x,v),lascondicionesinicialesyllamaremosalafuncinrk_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%condicionesinicialest0=0holdon%solucinnumrica[t,x,v]=rk_2(f,t0,tf,x0,v0,n)plot(t,x,'b')%solucinanalticaw=sqrt(w0*w0g*g)x=((v0+g*x0)*sin(w*t)/w+x0*cos(w*t)).*exp(g*t)plot(t,x,'r')gridonxlabel('t')ylabel('x')legend('aproximado','exacto')title('osciladoramortiguado')holdoff
Enlaventanadecomandoscorremoselscriptosciladorcondistintascondicionesiniciales
>>osciladorfrecuenciaangular,w0:2rozamiento,gamma:0.5posicininicial,x0:1.5velocidadinicial,v0:0tiempofinal,tf:8nmerodepasos,n:100
E 4
4
0
4
0
[
[ [
E
4 FYQE0 TJO[0 DPT[0
2 E FYQE0 TJO[0 DPT[0
[ FYQE0 DPT[0 TJO[0
4
0
0
4
E [2
4 FYQE0 TJO[0 DPT[0
E2
4
[
4
-
3/4/2015 Solucinnumricadeecuacionesdiferenciales
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/numerico/diferencial/diferencial.html 9/9
Noseapreciatampocodiferenciaentrelasolucinexactaylanumrica,aplicandoelprocedimientodeRunge_Kutta.
EnergasRenovablesEUITIdeEibar