Sie sind auf Seite 1von 6

Usando Matlab para resolver EDOs de

primer orden.
Contenido
Funciones en la lnea de comando
Campo de direcciones
Soluciones numricas de un problema de valor inicial
Grfica de la solucin
Grfica del campo de direcciones y curvas solucin
Encontrar valores numricos de la solucin en valores t
Solucin simblica de las EDOs
Solucin general
Resolucin de los problemas de valor inicial
Grfica de la solucin
Encontrar valores numricos de la solucin en valores t

Definicin de funciones en la lnea de comando


Si se desea utilizar una funcin varias veces es conveniente definirla como una funcin de
lnea de comando (inline function):

f1=inline(sin(x)*x,x)

define la funcin f1(x)=sin(x)*x. Hay que notar que los argumentos de inline
deben de ser cadenas de caracteres (strings) y no expresiones simblicas. De esta forma se
puede usar f1 en las expresiones que se escriban en la lnea de comando.

Tambin se pueden definir funciones de varias variables:

g1=inline(x*y+sin(x),x,y)

define la funcin g1(x,y)=x*y+sen(x) de dos variables.

Campo de direcciones
En primer termino debes de descargar el archivo dirfield.m al directorio de
trabajo de Matlab.

Se define la funcin g en la lnea de comando. Dicha funcin es de dos variables: t y y,


correspondientes al lado derecho de la ecuacin diferencial . Por ejemplo,
la ecuacin diferencial se define como:
g=inline(t*y^2,t,y)

Es necesario utilizar inline(,t,y), aunque las variables t o y no aparezcan en


la frmula.

Para graficar el campo de direcciones de la EDO para un domino de t desde t0 hasta


t1 con un espaciamiento de dt y y desde y0 hasta y1 con un espaciamiento de dy se
utiliza dirfield(g,t0:dt:t1,y0:dy:y1). Por ejemplo, para t y y entre -2 y 2
con un espaciamiento de 0.2, es necesario escribir en la lnea de comando:

dirfield(g,-2:0.2:2,-2:0.2:2)

lo que resulta en:

Solucin numrica de un problema de valor inicial


En primer trmino es necesario definir la funcin en la lnea de comandos g
correspondiente al lado derecho de la ecuacin diferencial . Continuando
con el ejemplo, la ecuacin diferencial se define como:

g=inline(t*y^2,t,y)

Para graficar la solucin numrica de un problema de valor inicial: Para la condicin


inicial se puede graficar la solucin para t que va desde t0 hasta t1 usando
ode45(g,[t0,t1],y0).

Ejemplo: Para resolver el problema de valor inicial sujeto a en el


intervalo se usa:

ode45(g,[-2,2],1)
lo que resulta en

Los crculos marcan los puntos en los que se realiz el clculo numrico (dichos puntos son
elegidos por Matlab para optimizar la exactitud y eficiencia del algoritmo). Se pueden
obtener los vectores ts y ys con las coordenadas de estos puntos usando
[ts,ys]=ode45(g,[t0,t1],y0). Posteriormente es posible graficar la solucin
usando plot(ts,ys) y de esta manera se puede obtener una grfica sin los crculos.

Para combinar las grficas de campos de direcciones y varias curvas soluciones se


usan los comandos hold on y hola off: despus de obtener la primera grfica se
escribe hold on, por lo que todos los comandos relativos a las grficas subsecuentes
sern ejecutados en la misma ventana. Despus del ltimo comando se escribe hold off.

Ejemplo: Graficar el campo de direcciones y las 13 curvas solucin con las condiciones
iniciales :

dirfield(g,-2:0.2:2,-2:0.2:2)
hold on
for y0=-0.4:0.2:2
[ts,ys]=ode45(g,[-2,2],y0);
Plot(ts,ys)
end
hold off

resultando en:
Para obtener valores numricos de la solucin en determinados valores de t: Se puede
especificar un vector tv de t valores y usar [tx,ys]=ode45(g,tv,y0). El primer
elemento del vector tv es el valor inicial de t; el vector tv debe de tener al menos 3
elementos.

Ejemplo: Obtener la solucin con la condicin inicial en y


mostrar los resultados en un tabla con dos columnas.

[ts,ys]=ode45(g,-2:0.5:2,1);
[ts,ys]

Para obtener el valor numrico de la solucin en el valor final de t se utiliza ys(end).

Solucin simblica de EDOs


Para resolver una ecuacin de manera simblica es necesario definir la ecuacin
diferencial como una cadena de caracteres, usando Dy para y y para . Ejemplo:
para resolver la ecuacin diferencial se escribe en la lnea de comando:

sol=dsolve(Dy=t*y^2,t)

El ltimo argumento t es el nombre de la variable independiente.

Si Matlab no puede encontrar una solucin regresar como solucin un smbolo vaco. Si
Matlab encuentra varias soluciones regresar un vector de soluciones. En algunos casos
Matlab no podr encontrar soluciones explicitas, pero regresar la solucin en forma
implicita, i.e. dsolve(Dy=1/(y-exp(y)),t) regresa

t-1/2*y^2+exp(y)+C1=0
Desafortunadamente Matlab no puede manejar condiciones iniciales en este caso. Se puede
utilizar ezcontour(t-1/2*y^2+exp(y),[-4 4 -3 3]) para graficar varias
curvas solucin para t en el intervalo [-4,4] y y en [-3 3]. Adems se puede utilizar
ezplot(t-1/2*y^2+exp(y)-1,[-4 4 -3 3]) para graficar solo la curva t-
1/2*y^2+exp(y)=1.

La solucin presentar una constante C1. Dicha constante se puede sustituir por valores
determinados usando subs(sol,C1,valor). Ejemplo: para fijar el valor de C1 a 5
y graficar la solucin para t=-2 hasta 2 se utiliza:

ezplot(subs(sol,C1,5),[-2 2])

Para resolver un problema de valor inicial se debe de especificar la condicin inicial:

sol=dsolve(Dy=t*y^2,y(-2)=1,t)

Para graficar la solucin se utiliza ezplot(sol,[t0,t1]). Ejemplo: Grafique las 13


curvas solucin de la ecuacin diferencial con las siguientes condiciones iniciales
:

sol=dsolve(Dy=t*y^2,y(-2)=y0,t)
for y0=-0.4:0.2:2
ezplot(subs(sol,y0,y0),[-2 2])
hold on
end
hold off
axis tight

resultando:
Para obtener el valor numrico en uno o ms valores de t se utiliza
subs(sol,t,tval) y la funcin double o vpa (para obtener ms digitos).
Ejemplo: obtener el valor numrico de la solucin en t=0.5:

sol=dsolve(Dy=t*y^2,y(-2)=1,t)
double(subs(sol,t,0.5))

Para obtener los valores numricos de la solucin en y que los despliegue


como una tabla de dos columnas se utilizan los siguientes comandos:

tval=(-2:0.5:2); %vector columna con los valores de t


yval=double(subs(sol,t,tval)); %vector columna con los
valores de y
[tval,yval] %muestra las 2 columnas juntas

Pgina de inicio

Das könnte Ihnen auch gefallen