Vous êtes sur la page 1sur 4

A continuación se muestra el procedimiento que se siguió en el MATLAB

para poder resolver las ecuaciones diferenciales a través del Método de


Euler Modificado.

Se puede resumir lo realizado en tres pasos:

Paso 1: desarrollo del bucle para la resolución de las ecuaciones


diferenciales a través del método de Euler Modificado

function[y,t]= eulmod(f,dominio,y0,h)

Con lo anterior se establece el nombre del programa a desarrollar. En este


caso, el nombre es “eulmod” que depender de distintos argumentos.
f – se refiere a las ecuaciones diferenciales
Dominio – se refiere al dominio que se indica en los problemas i y ii. El
dominio está formado por un vector de una fila y dos columnas.
y0 – se refiere a la condición inicial que en ambos casos es y(0)=0.05
h – que es lo que se denomina el paso y posee un valor de 0.01. Este
“paso”, es como el numero que indica la diferencia entre cada intervalo de
tiempo.

t0=dominio(1) -- indica el primer elemento del vector dominio (primera fila


primera columna)
tfinal=dominio(2) -- indica el otro elemento del vector dominio (primera fila
segunda columna)
t=t0; -- esta es la variable que va a ir corriendo en el tiempo. Es una
variable que no se almacena. Va cambiando según el valor que asuma para
el caso a evaluar.
y=y0(:); -- en este caso estará dado por un escalar, pero se debe poner (:)
para indicar que incluye todo los elementos solo que en este caso como te
acaba de mencionar se trata de un escalar.
n=floor((tfinal-t0)/h) + 1 ; -- esto es para indicar el numero de intervalos. Se
uso el comando floor, para que reduzca al menor inferior la expresión que
sale a la derecha.

tout=zeros(n,1); -- esto se crea para poder almacenar en este vector los


respectivos t’s. Lo que estas formando es un vector formado por ceros de n
filas y 1 columna. Este vector sirve como se menciono para rellenarlo
cuando se corra el bucle.
tout(1)=t
yout=zeros(n,size(y,1)); -- esto se crea para poder almacenar las
trayectorias de y.
yout(1,:)=y'

k=1 – esto es para establecer un contador

while k<n -- estas indicando que el bucle se va a correr hasta que k sea
menor que el número de intervalos. Por ejemplo: si n=20, el bucle se va a
correr hasta que k sea 19.
tout(k+1)=t0+k*h; -- esto se coloca para indicar como se debe rellenar el
vector tout que se formo lineas arriba.
k=k+1;
y=fsolve(@func,y,[],y,t,f,h); -- esto se realizo para poder rellenar el vector
yout que se creó anteriormente. Es importante aclarar que se uso fsolve ya
que es un comando que sirve para resolver ecuaciones de distinto tipo,
incluyendo las no lineales. Por este motivo, dado a que tenemos que
resolver los problemas a través de la euler modificada que es de la manera
que se indicara a continuación, conviene usar fsolve para solucionar el
ejercicio.

Ecuación de Euler modificado:

y(k+1)=y(k)+hf(tk +h/2; (y(k+1)


+ yk)/2

Adentro del fsolve se indican ciertos parámetros importantes. Entre ellos


esta @func que se usa para llamar a la función que sale líneas abajo,
justamente se está llamando a la función que indica el método de euler
modificado. Los otros parámetros que salen al lado derecho de @func, son
para determinar los dominios de las variables.

t=tout(k);
yout(k,:)=y';

Estas dos últimas indicaciones son para rellenar los vectores de t y los que
incluyen las trayectorias de y.

end

t = tout';
y = yout';
return

function residual = func(y,yo,t,f,h)


residual=yo+feval(f,t+h/2,y/2+yo/2)*h-y; -- esta ecuación es la de euler
modificada pero después de haberla igualado a cero y de pasado el y(k+1),
o en este caso, y, al lado derecho de la ecuación.
return

Esta es la función residual a la que se va a “llamar” en el bucle para


desarrollar el problema.

Paso 2: establecer cuáles son los problemas a resolver

En tres nuevos documentos vas a colocar las ecuaciones diferenciales que


se deben ser resueltas por el MATLAB.

Primer problema:

Se coloca en el nuevo documento lo siguiente:

function yprima=yp(t,y)
yprima=2*t+y
Acá se está indicando como es la ecuación diferencial que se debe resolver
y cuales con las variables.

Segundo problema:

Se abren dos documentos para tomar el caso en el cual el alpha es igual a 1


y el caso en el que es -1.

- Caso con alpha=1

function ysegun=ys(t,y)
ysegun=1*cos(t/2)*y

- Caso con alpha=-1

function ynegativa=yn(t,y)
ynegativa=-1*cos(t/2)*y

Acá se están indicando el otro problema que se debe resolver por medio del
método de euler modificado.

Paso 3: correr el bucle y la obtención de resultados

Finalmente en el MATLAB, en la ventana que se denomina “Command


Window” se debe escribir lo siguiente:

Primer caso:

[y,t]=eulmod(‘yp’, [0 6*pi], 0.5, 0.01)

Como se puede notar, al escribir esto se está haciendo referencia a como se


inicio el proceso del paso 1, es decir, se hace referencia a lo siguiente:

function[y,t]= eulmod(f,dominio,y0,h)

Donde:

f -- se refiere a las ecuaciones diferenciales del paso 2.


Dominio -- hace referencia al dominio de la ecuación diferencial a resolver.
y 0 – se refiere a la condición inicial
h – se refiere al “paso”

Segundo caso (se realiza lo mismo):

- Con alpha=1
[y,t]=eulmod(‘ys’, [0 pi], 0.5, 0.01)

- Con alpha=-1
[y,t]=eulmod(‘yn’, [0 pi], 0.5, 0.01)
Finalmente, después de realizar esto, se presiona enter y se espera a que
corra la macro.

Para saber cómo es el grafico se usa el comando plot(t,y).

Vous aimerez peut-être aussi