Вы находитесь на странице: 1из 5

Universidad de Pamplona

Facultad de Ciencias Basicas


Departamento de Matematicas
Pr
actica Computacional Ecuaciones Diferencales 2015-II

Contenido:
1. Funciones en la lnea de comando.
2. Campo de direcciones.
3. Soluciones numericas de un problema de valor inicial.
Grafica de la solucion.
Grafica del campo de direcciones y curvas solucion.
Encontrar valores numericos de la solucion en valores t.
4. Solucion simbolica de las EDOs.
Solucion general.
Resolucion de los problemas de valor inicial.
Grafica de la solucion.
Encontrar valores numericos de la solucion en valores t.
1. Definici
on de funciones en la lnea de comando
Si se desea utilizar una funcion varias veces es conveniente definirla como una funcion de
lnea de comando (inline function):
f1=inline(0 sin(x)*x0 ,0 x0 )
define la funcion f1 (x) = sen(x) x. Hay que notar que los argumentos de inline deben
ser cadenas de caracteres (strings) y no expresiones simbolicas. De esta forma se puede
usar f1 en las expresiones que se escriban en la lnea de comando.
Tambien se pueden definir funciones de varias variables:
g1=inline(0 x*y+sin(x)0 ,0 x0 ,0 y0 )
define la funcion g1 (x, y) = xy + sen(x) de dos variables.
2. Campo de direcciones
En primer termino debes copiar el archivo dirfield.m al directorio de trabajo de Matlab.
function dirfield(f,tval,yval)
% dirfield(f, t1:dt:t2, y1:dy:y2)
% grafica el campo de direcciones para la ED ordinaria de primer orden
y=f(t,y)
% usando valores de t desde t1 hasta t2 con espaciamiento dt

%
%
%
%
%
%
%
%

usando valores de y desde y1 hasta t2 con espaciamiento dy


f es el nombre de funcion escrita (sin comillas) (inline function) o el
nombre de un archivo m (con comilas).
Ejemplo: y = -y^ 2+t
Muestra el campo de direcciones para t en [-1,3], y en [-2,2], usando
un espaciamiento de 0.2 tanto para t como para y:
f = inline(- y^ 2 + t,t,y)
dirfield(f, -1:.2:3, -2:.2:2)

[tm,ym]=meshgrid(tval,yval);
dt = tval(2) - tval(1);
dy = yval(2) - yval(1);
yp=feval(vectorize(f),tm,ym);
s = 1./max(1/dt,abs(yp)./dy)*0.35;
h = ishold;
quiver(tval,yval,s,s.*yp,0,.r); hold on;
quiver(tval,yval,-s,-s.*yp,0,.r);
if h
hold on
else
hold off
end
axis([tval(1)-dt/2,tval(end)+dt/2,yval(1)-dy/2,yval(end)+dy/2])
Se define la funcion g en la lnea de comando. Dicha funcion es de dos variables: t y y,
correspondientes al lado derecho de la ecuacion diferencial y 0 (t) = g(t, y(t)). Por ejemplo,
la ecuacion diferencial y 0 (t) = ty 2 se define como:
g=inline(0 t*y^ 20 ,0 t0 ,0 y0 )
Es necesario utilizar inline(. . .,0 t0 ,0 y0 ), aunque las variables t o y no aparezcan en la
formula.
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:

3. Soluci
on num
erica de un problema de valor inicial
En primer termino es necesario definir la funcion en la lnea de comandos g correspondiente
al lado derecho de la ecuacion diferencial y 0 (t) = g(t, y(t)). Continuando con el ejemplo, la
ecuacion diferencial y 0 (t) = ty 2 se define como:
g=inline(0 t*y^ 20 ,0 t0 ,0 y0 )
Para graficar la solucion numerica de un problema de valor inicial con la condicion inicial y(t0 ) = y0 , se puede graficar la solucion para t que va desde t0 hasta t1 usando
ode45(g,[t0,t1],y0).
Ejemplo: Para resolver el problema de valor inicial y 0 (t) = ty 2 sujeto a y(2) = 1 en el
intervalo [2, 2] se usa:
ode45(g,[-2,2],1)
lo que resulta en

Los crculos marcan los puntos en los que se realizo el calculo numerico (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 solucion usando
plot(ts,ys) y de esta manera se puede obtener una grafica sin los crculos.
Para combinar las graficas de campos de direcciones y varias curvas soluciones se usan los
comandos hold on y hold off despues de obtener la primera grafica se escribe hold on,
por lo que todos los comandos relativos a las graficas subsecuentes seran ejecutados en la
misma ventana. Despues del u
ltimo comando se escribe hold off.

Ejemplo: Graficar el campo de direcciones y las 13 curvas solucion con las condiciones
iniciales y(2) =-0.4,-0.2,. . .1.8, 2:

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
generando:

Para obtener valores numericos de la solucion 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 solucion con la condicion inicial y(2) = 1 en t = 2,1.5, ,1.5, 2 y
mostrar los resultados en una tabla con dos columnas.
[ts,ys]=ode45(g,-2:0.5:2,1);
[ts,ys]
Para obtener el valor numerico de la solucion en el valor final de t se utiliza ys(end).
4. Soluci
on Analtica de EDOs
Para resolver una ecuacion de manera simbolica es necesario definir la ecuacion diferencial
como una cadena de caracteres, usando Dy para y 0 (t) y y para y(t).
Ejemplo: para resolver la ecuacion diferencial y 0 (t) = ty 2 se escribe en la lnea de comando:
sol=dsolve(0 Dy=t*y^ 20 ,0 t0 )
El u
ltimo argumento 0 t0 es el nombre de la variable independiente.
Si Matlab no puede encontrar una solucion regresara como solucion un smbolo vaco. Si
Matlab encuentra varias soluciones regresara un vector de soluciones. En algunos casos
Matlab no podra encontrar soluciones explicitas, pero regresara la solucion en forma implicita, esto es dsolve(0 Dy=1/(y-exp(y))0 ,0 t0 ) regresa

t-1/2*y^ 2+exp(y)+C1=0
Para resolver un problema de valor inicial se debe de especificar la condicion inicial:
sol=dsolve(0 Dy=t*y^ 20 ,0 y(-2)=10 ,0 t0 )
Para graficar la solucion se utiliza (sol,[t0,t1]).Ejemplo: Grafique las curvas solucion de la
ecuacion diferencial con las siguientes condiciones iniciales y(t) =0.2,0.4, ,1.8,2:
sol=dsolve(0 Dy=t*y^ 20 ,0 y(-2)=y00 ,0 t0 )
for y0=0.2:0.2:2
ezplot(subs(sol,0 y00 ,y0),[-2 2])
hold on
end
hold off
axis tight
resultando:

Вам также может понравиться