solución numérica de ecuaciones diferenciales mediante

Upload: alex

Post on 05-Jul-2018

226 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/16/2019 Solución Numérica de Ecuaciones Diferenciales Mediante

    1/13

    Solución numérica de

    ecuaciones diferenciales

    mediante ode45MATLAB dispone de varias funciones para resolver

    mediante procedimientos numéricos ecuaciones

    diferenciales: ode23, ode45, ode113, etc, (véase en el

    sistema de auda para !ué tipos de pro"lemas es m#s

    adecuado cada uno de los procedimientos$%

    &li'iremos ode45 para resolver la maor parte de los

     pro"lemas%

    La función ode45

    u sinta)is es la si'uiente

    *t,x+ode45(odefun,tspan, x0, options, params$

    •   x es una matri- donde cada columna corresponde a las

    varia"les dependientes t  es el vector tiempo%

    •   odefun es el nom"re de la funci.n,

    •   tspan especifica el intervalo de tiempo, un vector de dos

    n/meros tspan*ti,tf], tiempo inicial final% 0ara o"tener

    valores de las varia"les dependientes en instantes

    concretos t 0 , t 1 , t 2 , ... t n% se escri"e tspan*t0,t1....tn+

    •   x es un vector !ue contiene los valores iniciales%

    •   options es una estructura !ue se crea con la

    funci.n odeset , !ue e)plicaremos al final de esta p#'ina

    a !ue es un asunto "astante complicado%

    •   params son par#metros !ue !ueremos pasar a la

    funci.n odefun

    &n la maor parte de los eemplos, utili-aremos los tres

     primeros par#metros: llamaremos a la funci.n ode45 le

     pasaremos la funci.n odefunc, los instantes inicial final

  • 8/16/2019 Solución Numérica de Ecuaciones Diferenciales Mediante

    2/13

    en el vector tspan  las condiciones iniciales en el

    vector x%

    amos a volver a resolver los pro"lemas planteados en

    este captulo mediante la funci.n MATLAB ode45%

    Ecuación diferencial de primer orden

    &la"oramos el script titulado carga 61 para inte'rar la

    ecuaci.n diferencial de primer orden !ue descri"e la

    car'a de un condensador%

    dqdt=VεR−qRCd!dt789!8V0=10;R=input('Resistencia R: ');C=input('Capacidad C: ');

    tf=input('tiempo final, tf: ');f=@(t,x) V0/R-x/(RC);

    tspan=!0 tf";x0=0;!t,x"=ode#$(f,tspan,x0);plot(t,x,'%')xla&el('t')la&el('');title('ca%a del condensado%')

    &n la ventana de comandos corremos el script carga 61

    ** ca%a+1Resistencia R: Capacidad C: 0.tiempo final, tf: 10

    Sistema de dos ecuaciones diferenciales de primer

    orden

    &la"oramos el script titulado radiactivo 61 para inte'rar el

    sistema de dos ecuaciones diferenciales de primer orden

    !ue descri"e la serie de desinta'raci.n radioactiva% A;;

  • 8/16/2019 Solución Numérica de Ecuaciones Diferenciales Mediante

    3/13

    representar# a la varia"le y% &l mismo criterio se emplear#

     para determinar el vector x de las condiciones iniciales%

    La definici.n de las funciones f  (t,x,y$  g (t,x,y$ aparecen

    en un vector columna, separadas por (punto coma$

    f=@(t,x) !-ax(1);ax(1)-&x()"; x(1) es x, x()es

    &l script radiactivo 61 ser# el si'uiente:

    a=input('pa%met%o a: ');&=input('pa%met%o &: ');condiciones iniciales en el ecto% x0x0=2e%os(1,);x0(1)=input('alo% inicial de x: ');x0()=input('alo% inicial de : ');tf=input('tiempo final, tf: ');

    tspan=!0 tf";

    f=@(t,x) !-ax(1);ax(1)-&x()";!t,x"=ode#$(f,tspan,x0);

    plot(t,x)xla&el('t')la&el('x,');title('dx/dt=-ax, d/dt=ax-&')

    &n la ventana de comandos corremos el script radiactivo 61

    ** %adioactio+1pa%met%o a: 01pa%met%o &: 0

    alo% inicial de x: 100alo% inicial de : 0tiempo final, tf: 0

    Alternativamente, vamos a definir las funciones f  (t,x,y$

     g (t,x,y$ en un fic>ero %M le pasamos los valores de los

     par#metros a  b%

    function 2=func+%adioactio(t,x,a,&)  2=!-ax(1);ax(1)-&x()"; x(1) es x, x() esend

    &la"oramos el script radioactivo 62 para esta"lecer losvalores de los par#metros a  b, las condiciones iniciales

    llamar a la funci.n !ue reali-a la inte'raci.n

    numérica ode45% &l primer par#metro de ode45 es el

    >andler (maneador de la funci.n$ a inte'rar !ue se

    especifica del si'uiente modo ?nombre_funcion%

    !t,x"=ode#$(@func+%adioactio,tspan,x0);

  • 8/16/2019 Solución Numérica de Ecuaciones Diferenciales Mediante

    4/13

    A>ora "ien, func_radioactivo precisa de los valores de los

     par#metros a  b% @a dos formas de >acerlo% La m#s

    sencilla es definir una funci.n an.nima fg  en términos

    de func_radioactivo% &n el pro"lema 3 istemas de

    ecuaciones de Lorent- descri"imos el se'undo

     procedimiento%

    f=@(t,x) func+%adioactio+1(t,x,a,&);

    éase la misma situaci.n en la llamada a funci.n fzero al

    final de la p#'ina 8aces de una ecuaci.n

    a=input('pa%met%o a: ');&=input('pa%met%o &: ');condiciones inicialesx0=2e%os(1,);x0(1)=input('alo% inicial de x: ');x0()=input('alo% inicial de : ');

    tf=input('tiempo final, tf: ');tspan=!0 tf";f=@(t,x) func+%adioactio(t,x,a,&);!t,x"=ode#$(f,tspan,x0);plot(t,x)xla&el('t')la&el('x,');title('dx/dt=-ax, d/dt=ax-&')

    &n la ventana de comandos corremos el

    script radioactivo 62

    ** %adioactio+

    pa%met%o a: 01pa%met%o &: 0alo% inicial de x: 100alo% inicial de : 0tiempo final, tf: 0

    Ecuación diferencial de segundo orden

    na ve- !ue se >a entendido como resolver un sistema de

    dos ecuaciones diferenciales de primer orden es posi"le

    entender la resoluci.n de cual!uier ecuaci.n diferencial o

    sistema% 0odemos definir las funciones de forma an.nimao e)plcitamente en un fic>ero %M

    dxdt=vd)dtv   dvdt=f (t,x,v)dvdtf(t,),v$

    &n este sistema de dos ecuaciones diferenciales de primer 

    orden x(1$ representar# los sucesivos valores de la

    http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/diferencial/ejercicios/diferencial-ejercicios.htmlhttp://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/diferencial/ejercicios/diferencial-ejercicios.htmlhttp://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices_1.htmlhttp://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/raices/raices_1.htmlhttp://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/diferencial/ejercicios/diferencial-ejercicios.htmlhttp://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/numerico/diferencial/ejercicios/diferencial-ejercicios.html

  • 8/16/2019 Solución Numérica de Ecuaciones Diferenciales Mediante

    5/13

    varia"le x  x(2$ representar# a la varia"le v% &l mismo

    criterio se emplear# para determinar el vector x de las

    condiciones iniciales%

    omo eemplo, estudiamos las oscilaciones

    amorti'uadas, !ue >emos descrito en la p#'ina anterior%

    d2xdt2+2γdxdt+ω20x=0

    {dxdt=vdvdt=−2γv−ω20xd2)dt2C2Dd)dtCE2) =d)dtvdvdt92Dv9E2)

    Las funciones a inte'rar v,  f  (t,x,v$ aparecen en un vector 

    columna, separadas por (punto coma$

    f=@(t,x) !x();-x()-3030x(1)"; x(1) es x,

    x() es

    &la"oramos el script oscilador  61 para resolver la ecuaci.n

    de se'undo 'rado !ue descri"e las oscilaciones

    amorti'uadas

    30=input('f%ecuencia anula%, 30: ');=input('%o2amiento, amma: ');condiciones inicialesx0=2e%os(1,);x0(1)=input('posici4n inicial, x0: ');x0()=input('elocidad inicial, 0: ');tf=input('tiempo final, tf: ');

    f=@(t,x) !x();-x()-3030x(1)";tspan=!0 tf";!t,x"=ode#$(f,tspan,x0);plot(t,x(:,1),'%')%id onxla&el('t')la&el('x');title('oscilado% amo%tiuado')

    i en el comando plot  ponemos plot (t,x$, se representa la

     posici.n x(1$ la velocidad x(2$ en funci.n del tiempo

    (en dos colores asi'nados por MATLAB$% i solamente

    !ueremos representar la posici.n x(1$ en funci.n del

    tiempo t , se escri"e plot (t,x(:,1$$% éase la p#'ina ectores

    matrices

    &n la ventana de comandos corremos el script oscilador  61

    ** oscilado%+1f%ecuencia anula% 30:

    http://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/basico/vectores/vectores.htmlhttp://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/basico/vectores/vectores.htmlhttp://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/basico/vectores/vectores.htmlhttp://www.sc.ehu.es/sbweb/energias-renovables/MATLAB/basico/vectores/vectores.html

  • 8/16/2019 Solución Numérica de Ecuaciones Diferenciales Mediante

    6/13

    %o2amiento, amma: 0$posici4n inicial, x0: 0elocidad inicial,0: 10tiempo final, tf: 10

    Sistema de dos ecuaciones diferenciales de segundoorden

    &n este caso tenemos un sistema de cuatro ecuaciones

    difrenciales de primer orden

    dxdt=vxd)dtv)   dvxdt=f (t,x,vx,y,vy)dv)dtf(t,),v),,v$

    dydt=vyddtv   dvydt=g(t,x,vx,y,vy)dvdt'(t,),v),,v$

    &n este sistema  x(1$ representar# los sucesivos valores de

    la varia"le x  x(2$ representar# a la varia"le v x , x(3$ a la

    varia"le  y   x(4$ a la varia"le v y% &l mismo criterio se

    emplear# para determinar el vector x de las condiciones

    iniciales%

    omo eemplo, estudiamos el movimiento de un planeta

    alrededor del ol o de un satélite artificial alrededor de la

    Tierra%

    d2xdt2=−4π2x(x2+y2)3/2 

    ⎧⎩⎨dxdt=vxdvxdt=−4π2x(x2+y2)3/2d2ydt2=−4π2y(x2+y2)3/2 

    ⎧⎩⎨⎪⎪dydt=vydvydt=−4π2y(x2+y2)3/2d2)dt294F2)()2C2$3G2 

    =d)dtv)dv)dt94F2)()2C2$3G2d2dt294F2()2C2$3G2 

    =ddtvdvdt94F2()2C2$3G2

    &la"oramos el script orbita 61 para resolver el sistema de

    dos ecuaciones de se'undo 'rado !ue descri"e el

    movimiento de un cuerpo celeste%

    condiciones inicialesx0=2e%os(1,#);x0(1)=input('posici4n inicial x: ');x0()=input('elocidad incial x: ');x0(5)=0;x0(#)=input('elocidad incial : ');

    tf=input('tiempo final, tf: ');

  • 8/16/2019 Solución Numérica de Ecuaciones Diferenciales Mediante

    7/13

    tspan=!0 tf";

    f=@(t,x)!x();-#pipix(1)/(s%t(x(1)x(1)6x(5)x(5)))75; x(#);-#pipix(5)/(s%t(x(1)x(1)6x(5)x(5)))75";!t,x"=ode#$(f,tspan,x0);plot(x(:,1),x(:,5),'%')xla&el('x')la&el('');title('4%&ita de un planeta')

    &n Hi'ure IindoJ representamos la traectoria, es decir,

    los puntos de a"scisas x(1$ !ue 'uardan los valores x  las

    ordenadas x(3$ !ue 'uardan los valores y, en funci.n del

    tiempo t , se escri"e plot (t,x(:,1$, x(:,3$$%

    &n la ventana de comandos corremos el script orbita 61

    ** o%&ita+1posici4n inicial x: 1elocidad incial x: 0elocidad incial : 89tiempo final, tf: 1

    Opciones de ode45

    Kma'inemos !ue estudiamos el movimiento de cada de

    un cuerpo, no sa"emos cuanto tiempo tardar# en lle'ar al

    suelo, desconocemos el valor del elemento tf  en el

    vector tspan% in em"ar'o, !ueremos detener el procesode inte'raci.n numérica de la ecuaci.n diferencial !ue

    descri"e el movimiento cuando la posici.n del m.vil sea

    cero% La funci.n MATLAB ode45 dispone de un

     par#metro adicional options donde podemos indicarlo,

     pero es "astante lioso e intentaremos e)plicarlo mediante

    eemplos%

    olvemos a resolver la ecuaci.n diferencial !ue descri"e

    las oscilaciones amorti'uadas detendremos el proceso

    de inte'raci.n cuando el m.vil alcance la posici.nm#)ima, su velocidad es nula%

    upon'amos !ue el oscilador amorti'uado estudiado

    anteriormente, de frecuencia natural ω2, constante de

    amorti'uamiento γ%25, parte de la posici.n x2%5 con

    velocidad nula, !ueremos detener el proceso de

    inte'raci.n cuando el m.vil alcance la posici.n m#)ima,

  • 8/16/2019 Solución Numérica de Ecuaciones Diferenciales Mediante

    8/13

    cuando su velocidad es nula, tal como se muestra en la

    fi'ura, con lo !ue se completa un periodo%

    Los pasos a se'uir son los si'uientes:

    1%;efinimos la funci.n cuo nom"re es opcion_ode45

    function !detect,stopin,di%ection"=opcion+ode#$(t,x)  detect=!x(1) x()"; !posici4n, elocidad"  stopin=!0 1"; 1 indice ue detiene lainte%aci4n cuando la elocidad se ace ce%o

    di%ection=!0 -1"; 1 c%ece, -1 dec%ece, 0 noimpo%taend

    2%;reamos la estructura opts con la llamada a la

    funci.n odeset 

    optsodeset (events,?opcion_ode45$

    uando se utili-a options la funci.n ode45 devuelve los

    tiempos te en los cuales ocurren los eventos los

  • 8/16/2019 Solución Numérica de Ecuaciones Diferenciales Mediante

    9/13

    correspondientes valores de las varia"les dependientes

    (posici.n, velocidad$ en el vector xe% Hinalmente, ie es un

    ndice !ue es /til cuando se vi'ilan varios eventos%

    3%;Le pasamos opts a la funci.n ode45 en su cuarto

     par#metro*t,x,te,xe,ie+ode45(odefunc,tspan,x,opts$

    &scri"imos el script oscilador  62 para resolver la ecuaci.n

    diferencial de se'undo orden detener el proceso de

    inte'raci.n de acuerdo con lo estipulado en el

     par#metro opts%

    30=;=0$;x0=!$ 0";tf=10;f=@(t,x) !x();-x()-3030x(1)";tspan=!0 10";opts=odeset('events',@opcion_ode45);!t,x,te,xe,ie"=ode#$(f,tspan,x0,opts);te,xe,ieplot(t,x(:,1),'%')%id onxla&el('t')la&el('x');title('oscilado% amo%tiuado')

    uando corremos el script oscilador  62 en la ventana de

    comandos se imprime los si'uientes datos relativos a los

    eventos%

    Tiempo, te Posición x (1) elocidad x (!) "ndice ie

    % 2%5 ;% 2

    2%43NO % 2%N1N3 1

    3%1PP2 1%1322 ;% 2

    • uando parte de la posici.n inicial  x(1$2%5 la velocidad

    es cero x(2$, detecta velocidad (ndice ie2$%

    • uando pasa por el ori'en x(1$ detecta posici.n

    (ndice ie1$, pero no se detiene a !ue en  stopin se >a puesto un cero%

    • uando la posici.n es x(1$1%1322 detecta velocidad

    nula x(2$, (ndice ie2$ la inte'raci.n numérica se

    detiene a !ue en stopin se >a puesto un uno la

    velocidad decrece en direction se >a puesto un ;1%

  • 8/16/2019 Solución Numérica de Ecuaciones Diferenciales Mediante

    10/13

    La columna de tiempos nos porporciona el periodo de la

    oscilaci.n, te3%1PP2%

    e su'iere al lector, cam"iar en la funci.n opcion_ode45

    direction* 1+

    amos a>ora a marcar en la representaci.n 'r#fica de la

    oscilaci.n amorti'uada, las posiciones de m#)ima

    amplitud x(2$ cuando pasa por el ori'en x(1$ sin

    detener el proceso de inte'raci.n numérica%

    efinimos una nueva versi.n de la funci.n opcion1 _ode45function!detect,stopin,di%ection"=opcion1+ode#$(t,x)  detect=!x(1) x()"; !posici4n, elocidad"  stopin=!0 0";

    di%ection=!0 0";end

  • 8/16/2019 Solución Numérica de Ecuaciones Diferenciales Mediante

    11/13

    reamos la estructura opts mediante odeset   se la

     pasamos al procedimiento de inte'raci.n ode45%

    30=;=0$;x0=!$ 0";

    tf=10;f=@(t,x) !x();-x()-3030x(1)";tspan=!0 9";opts=odeset('eents',@opcion1+ode#$);!t,x,te,xe,ie"=ode#$(f,tspan,x0,opts);

    old onplot(t,x(:,1),'%') plot(te(ie==1),xe(ie==1),'o','markersize',6,'markerfacecolor','k') plot(te(ie==2),xe(ie==2),'o','markersize',6,'markerfacecolor','')%id onxla&el('t')

    la&el('x');title('oscilado% amo%tiuado')old off

    i solamente estamos interesados en los m#)imos

    definimos una nueva versi.n de la funci.n opcion2 _ode45

    function!detect,stopin,di%ection"=opcion+ode#$(t,x)  detect=x();

    stopin=0;  di%ection=-1;end

    Modificamos el script oscilador  64

    30=;=0$;x0=!$ 0";tf=10;f=@(t,x) !x();-x()-3030x(1)";tspan=!0 9";opts=odeset('eents',@opcion1+ode#$);!t,x,te,xe,ie"=ode#$(f,tspan,x0,opts);te,xe,ieold onplot(t,x(:,1),'%')

     plot(te(ie==1),xe(ie==1),'o','markersize',6,'markerfacecolor','')%id onxla&el('t')la&el('x');title('oscilado% amo%tiuado')old off

    orremos el script oscilador  64 en la ventana de comandos

    o"servamos los resultados

  • 8/16/2019 Solución Numérica de Ecuaciones Diferenciales Mediante

    12/13

    Paso de par#metros a la función

    omo >emos visto, a ode45 se le pasa la funci.n (>andle$

    a inte'rar en su primer ar'umento% i la funci.n contiene

     par#metros como la frecuencia an'ular ω, no >a

     pro"lema si la funci.n se define como an.nima, tal comose >a mostrado en los eemplos previos% i la funci.n se

    define en un fic>ero entonces a la funci.n se le pasan los

    valores de los par#metros en el !uinto

    ar'umento params de ode45% Los pasos se e)plican en el

    si'uiente eemplo:

    &l sistema de ecuaciones de Lorent- es un sistema de tres

    ecuaciones diferenciales de primer orden

    dxdt=−σx+σy

    dydt=ρx−y−xz

    dzdt=−βz+xy

    d)dt9Q)CQd

    dtR)99)-d-dt9S-C)

    donde  1, ! OG3  "2O

    amos a resolver el sistema de tres ecuaciones

    diferenciales con las condiciones iniciales si'uientes: en

    el instante t , x;O, yO z 2N%

    1% &scri"ir una funci.n denominada lorentz (t,x, p$ como

    fic>ero%M !ue conten'a las tres ecuaciones dependa

    de los tres par#metros #p(1$ ,  !  p(2$  " p(3$% "servar 

    !ue la varia"le x se 'uarda en el primer elemento x(1$, lavaria"le y en el se'undo x(2$ la varia"le z  en el

    tercer x(3$ elemento del vector x%

    2% &scri"ir un script denominado lorentz_script  !ue llame a

    la funci.n MATLAB ode45, para resolver el sistema de

    ecuaciones diferenciales para las condiciones iniciales

    especificadas%

    3% 0asar los par#metros ,  !   " como elementos de un

    vector p a la funci.n ode45 para !ue a su ve- se los pase

    a la funci.n lorentz %

    4% i"uar el atractor de Lorent- de z  en funci.n de x >asta

    el instante t  f 2 en una primera ventana 'r#fica%

    5% i"uar x, y  z  en funci.n del tiempo en tres -onas de

    una se'unda ventana 'r#fica%

  • 8/16/2019 Solución Numérica de Ecuaciones Diferenciales Mediante

    13/13

    P% &)aminar el comportamiento del sistema para otras

    condiciones iniciales, t , x1, y2 z 3%

    efinimos la funci.n lorentz  como fic>ero %M

    function f=lo%ent2(t,x, p)

    x(1) es x, x() es x(5) es 2 p(1) es sima, p() es &eta p(5) es %o  f=!-p(1)x(1)6p(1)x(); p(5)x(1)-x()-x(1)x(5); -p()x(5)6x(1)x()";end

    &la"oramos el script lorentz_script 

    x0=!-. . 9"; alo%es inicialestspan=!0 0";p=!10 ./5 ."; pa%met%osno pasamos nada !" en el pa%met%o options de ode#$!t,x"=ode#$(@lo%ent2,tspan,x0,!", p);fiu%e

    plot(x(:,1),x(:,5),'%')xla&el('x')la&el('2');title('t%acto% de