solución numérica de ecuaciones diferenciales

9
Raíces de ecuaciones Sistemas de ecuaciones Valores y vectores propios Integración numérica Ecuaciones diferenciales Interpolación, regresión banner Inicio MATLAB Numérico Solución numérica de ecuaciones diferenciales (I) Las leyes que gobiernan los fenómenos de la naturaleza se expresan habitualmente en forma de ecuaciones diferenciales. Las ecuaciones del movimiento de los cuerpos (la segunda ley de Newton) es una ecuación diferencial de segundo orden, como lo es la ecuación que describe los sistemas oscilantes, la propagación de las ondas, la transmisión del calor, la difusión, el movimiento de partículas subatómicas, etc. Pocas ecuaciones diferenciales tienen una solución analítica sencilla, la mayor parte de las veces es necesario realizar aproximaciones, estudiar el comportamiento del sistema bajo ciertas condiciones. Así, en un sistema tan simple como un péndulo, la amplitud de la oscilación ha de ser pequeña y el rozamiento ha de ser despreciable, para obtener una solución sencilla que describa aproximadamente su movimiento periódico. Se estudia el procedimiento de RungeKutta que se aplica de forma directa a una ecuación diferencial de primer orden, pero veremos como se extiende a un sistema de ecuaciones de primer orden, a un ecuación diferencial de segundo orden y a un sistema de ecuaciones diferenciales de segundo orden. El procedimiento de RungeKutta se puede programar fácilmente en los ordenadores y además, se emplea mucho en la práctica, debido a la su exactitud relativamente elevada de la solución aproximada de la ecuación diferencial. La justificación del procedimiento de RungeKutta no es sencilla, el lector interesado puede consultar algún libro de métodos numéricos de análisis. Método de Euler Vamos aresolver la ecuación diferencial de primer orden con con la condición inicial de que en el instante t 0 la posición es x 0 La primera derivada nos permite conocer la posición x i+1 en el instante t i+1 , a partir de la posición x i en el instante t i de acuerdo a la fórmula siguiente. La línea de color rojo es la tangente a la curva en el instante t i x i+1 =x i +f(t i ,x i )h El procedimiento de Euler produce un error que se acumula a cada paso h de integración, que es el segmento en color azul que une los dos puntos en la figura. Escribimos una función denominada euler, a la que le pasaremos: la función f(t,x), la condición inicial de que en el instante t 0 la posición es x 0 , el instante final t f el número de pasos de integración n y nos devolverá un vector t y su correspondiente vector x. function [t,x] =euler(f,t0,tf,x0,n) h=(tft0)/n; t=t0:h:tf; x=zeros(n+1,1); %reserva memoria para n+1 elementos del vector x x(1)=x0; for i=1:n

Upload: leonardo-j-gimon

Post on 30-Sep-2015

11 views

Category:

Documents


4 download

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