Solución Numérica de Ecuaciones Diferenciales Mediante
Transcript of Solución Numérica de Ecuaciones Diferenciales Mediante
-
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