Está en la página 1de 21

TALLER DE PROGRAMACIÓN DE MATLAB

M. en C. Justino Alavez Ramírez.


XIII Foro de Matemáticas, en la D. A. C. B. – UJAT.
Del 27 al 31 de mayo de 2002.

1. Sobre MATLAB.
¿Qué es MATLAB? Es un software interactivo que ha sido usado re-
cientemente en varias áreas de ingeniería y aplicaciones científicas.
No es un lenguaje computacional en el sentido “normal”, pero trabaja
como tal. Un aspecto atractivo de MATLAB es que es relativamente
fácil de aprender. El poder de MATLAB es representado por la longi-
tud y simplicidad de su código. Por ejemplo, una página de código de
MATLAB puede ser equivalente a muchas páginas de códigos fuentes
de otros lenguajes computacionales. Para los cálculos numéricos,
MATLAB usa colecciones de subrutinas matemáticas científicamente
bien escritas como LINPACK y EISPACK.
MATLAB posee herramientas muy poderosas de interfaces gráficos
(GUI) y animaciones gráficas en tres dimensiones.
En general, MATLAB es una poderosa herramienta para manejos de
vectores y matrices. Estos arreglos no requieren dimensionamiento,
por lo que se resuelven muchos problemas de computación técnica,
sobre todo la formulación de vectores y matrices se hace en un tiem-
po corto, que no se podría hacer con lenguajes como Fortran o C.

MATLAB durante más o menos 15 años de vida (1984), tiene millo-


nes de usuarios.
En las universidades se usa como herramienta para cursos introducto-
rios y avanzados de matemáticas, ingeniería y ciencias.
En la industria, es una herramienta para la investigación de alta pro-
ductividad, desarrollo y análisis.

1
Para las aplicaciones específicas, MATLAB dispone de herramientas
especiales, llamadas toolboxes. En ellas se aprende y se aplica tecno-
logía especializada.

2. Manejo de Vectores y Matrices.


Al iniciar una sesión de trabajo en MATLAB, lo primero que aparece
es el apuntador » llamado el apuntador de MATLAB. Este apuntador
recibe información del usuario, lo procesa y genera un resultado de
salida en la siguiente línea. Por ejemplo, definimos la siguiente matriz.
» A=[1, –2, 4; 3, 4, 5; 6, 7, 1] ↵
“el símbolo ↵ significa que hay que apretar el enter del teclado”, en-
seguida aparecerá en la siguiente línea el resultado como
A=
1 –2 4
3 4 5
6 7 11
Así que una matriz se captura separando por , los elementos de sus
filas y por ; las filas. MATLAB es muy sensitivo porque distinque las
letras mayúsculas de las minúsculas, tanto para variables como para
los comandos ya establecidos. En este momento para MATLAB, “A”
es la matriz anterior pero “a” es una función o variable no definida.
El tamaño de una matriz se checa como
» size(A) ↵
ans =
3 3
que significa que A es una matriz de tamaño 3×3.
La transpuesta de una matriz. Para encontrar la transpuesta de A,
tecleamos
» A' ↵
ans =
1 3 6
–2 4 7
4 5 11

2
Componentes de una columna o fila. MATLAB posee operaciones
para visualizar o extraer filas o columnas de una matriz. La siguiente
expresión
» A(:,2) ↵
ans =
–2
4
7
visualiza la segunda columna de A, y la expresión
» A(3,:) ↵
ans =
6 7 11
visualiza la tercera fila de A.
También podemos hacer operaciones elementales sobre las filas o co-
lumnas, por ejemplo
» A(1,:) –2*A(3,:) ↵
ans =
–11 –16 –18
le resta de la primera fila 2 veces la tercera.
Podemos introducir otra matriz B como
» B=[–3, 1, 0; 3, 6, 2; –1, 3, 5] ↵
B=
–3 1 0
3 6 2
–1 3 5
Podemos realizar operaciones entre matrices del mismo tamaño, por
ejemplo
» C=A*B ↵
C=
–13 1 16
–2 42 33
–8 81 69
es el resultado de la multiplicación de A por B “en este orden”.

3
3. Matrices Elementales.
Presentaremos algunas matrices elementales que son muy útiles a la
hora de programar, para mayor información se puede consultar en “»
help elmat ↵”.

Matrices Elementales.
zeros - Arreglo de ceros.
ones - Arreglo de unos.
eye - Matriz identidad.

Por ejemplo, » ones(size(A)) ↵, produce una matriz de unos del mis-


mo tamaño que la matriz A dado anteriormente.
ans =
1 1 1
1 1 1
1 1 1

Información Sobre los Arreglos.


size - Tamaño de una matriz.
length - Longitud de un vector.
ndims - Número de dimensiones.
disp - Matriz de despliegue de información o de texto.
isempty - Verdadero para la matriz vacía.
isequal - Verdadero si los arreglos son idénticos.
isnumeric - Verdadero para arreglos numéricos.
islogical - Verdadero para arreglos lógicos.
logical - Convierte valores numéricos a lógicos.

Para tener información sobre cómo se utiliza un comando, podemos


teclear por ejemplo, » help isempty ↵, enseguida se despliega la si-
guiente información de ayuda:

ISEMPTY True for empty matrix.

4
ISEMPTY(X) returns 1 if X is an empty array and 0 otherwise. An
empty array has no elements, that is prod(size(X)) = = 0.

En el caso de nuestra matriz A, tenemos


» isempty(A)
ans =
0
puesto que A no es vacía.

Variables Especiales y Constantes.


ans - Contiene la respuesta más reciente.
eps - Exactitud relativa de punto flotante.
realmax - Número positivo más grande de punto flotante.
realmin - Número positivo más pequeño de punto flotante.
pi - 3.1415926535897....
i, j - Unidad imaginaria.
inf - Infinito.
NaN - No es un número.
isnan - Verdadero para los que no son un número.
isinf - Verdadero para elementos infinitos.
isfinite - Verdadero para elementos finitos.
flops - Contador de operaciones aritméticas de punto flotante.
whos - Información sobre los arreglos utilizados.

4. Algunas Funciones Matriciales.


MATLAB es una poderosa herramienta para manejo de vectores y
matrices, y posee funciones matriciales especiales. A continuación
damos una muestra representativa de ellas, más funciones se pueden
consultar en “» help matfun ↵”.

Análisis Matricial.
norm - norma de un vector o de una matriz.
rank - rango de una matriz.

5
det - Determinante de una matriz.
trace - Suma de los elementos de la diagonal principal.
rref - Forma echelon reducida por filas.

Por ejemplo de nuestra matriz A=[1, –2, 4; 3, 4, 5; 6, 7, 1], tenemos


» rank(A) ↵ » det(A) ↵ » trace(A) ↵ » norm(A) ↵
ans = ans = ans = ans =
3 –97 6 11.0624

Ecuaciones Lineales.
\ y / - Solución de ecuaciones lineales, uso del "slash de ayuda".
inv - Matriz inversa.
cond - Número de condición con respecto a la inversión.
lu - La factorización LU.

Eigenvalores y Valores Singulares.


eig - Eigenvalores y eigenvectores.
svd - Descomposición en valores singulares.
poly - Polinomio característico.

Funciones Matriciales.
expm - Exponencial de una matriz.
logm - Logaritmo de una matriz.
sqrtm - Raíz cuadrada de una matriz.
28 de mayo de 2002.

5. Ciclos y Declaraciones Lógicas.


Existen algunas declaraciones lógicas en MATLAB que ayudan a es-
cribir combinaciones de comandos de MATLAB. Más aún, los co-
mandos de ciclos se utilizan como en otros lenguajes de programación
para escribir programas. Una colección de ciclos y declaraciones lógi-
cas en MATLAB son

6
for - Es un comando de ciclo similar a la de otros lenguajes.
while - Se usa para combinar ciclos con declaraciones condi-
cionadas.
if - Se usa para producir una declaración condicionada.
elseif, else - Se usa en conjunción con el comando if.
break - Se usa para terminar un ciclo cuando se cumple una
condición.

Siempre que se utilicen los comandos for, while e if se deben de cerrar


con el end.

Ejemplo 1. Escribir un programa en MATLAB que encuentre el mí-


nimo de un conjunto de n números x1, x2, ..., xn.
Un algoritmo sencillo es el siguiente

Entrada: x = ( x1, x2, ..., xn)∈Rn.


Salida: m = mín1 ≤ i ≤ n xi.
Pasos computacionales
1. Si x1 < x2, hacer m = x1.
En caso contrario hacer, m = x2.
2. Para i = 3, 4, ..., n;
Si xi < m, hacer m = xi.

El siguiente programa se escribe en el editor de MATLAB y se guarda


en el disco duro o en algún otro lado como programa1.m
clear, clc
% Encuentra el mínimo de un conjunto de n números.

x=input('Dame el conjunto a minimizar como [x1,x2,...,xn]:');


if x(1)<x(2); m=x(1);
else m=x(2); end

for i=3:length(x);
if x(i)<m; m=x(i); end
end

7
disp(' ')
disp('El mínimo encontrado es')
m

Una vez que se guardó el programa1.m, se regresa en la pantalla prin-


cipal de MATLAB para correrlo.
» programa1 ↵
Aparecerá enseguida
Dame el conjunto a minimizar como [x1,x2,...,xn]:
Escribimos
[120, 115, 108, 111, 116, 132, 93, 107, 114, 118, 112, 125] ↵
Responde inmediatamente
El mínimo encontrado es
m=
93
En MATLAB existe una funciones llamados min y max que calculan
el mínimo y el máximo respectivamente de un conjunto de n números.

Actividad 1. El siguiente algoritmo ordena de menor a mayor un con-


junto de n números x1, x2, ..., xn.
Se conserva el orden inicial de los números.

Entrada: x = ( x1, x2, ..., xn)∈Rn.


Salida: y = ( y1, y2, ..., yn) que contiene los elementos ordena-
dos de x.
Pasos computacionales
1. Se crea el vector de salida como y=x;
2. Para i = 1, 2, ..., n−1;
Para k = i+1, ..., n;
Si yk < yi, entonces, z = yi; yi = yk & yk = z.

8
Escriba un programa en MATLAB del algoritmo y pruébelo con los
datos del Ejemplo 1. También en MATLAB existe una función llama-
do sort que ordena los números en orden ascendente y hace otras co-
sas.
Actividad 2. El siguiente algoritmo calcula el promedio de un conjun-
to de n números positivos x1, x2, ..., xn, donde varios de ellos son muy
“pequeños”.
Entrada: x = ( x1, x2, ..., xn)∈Rn.
Salida: promedio de los elementos de x.
Pasos computacionales
1. Ordene los números de menor a mayor como en el paso 2 de
la Actividad 1.
2. Hacer promedio = 0; “se inicializa una suma acumulativa”.
3. Para i = 1, 2, ..., n;
Hacer promedio = promedio + xi;
4. promedio = promedio / n.

Escriba un programa en MATLAB de este algoritmo y pruébelo con


los datos del Ejemplo 1.

29 de mayo de 2002.

6. Método de Newton-Raphson.
Ejemplo 2. El algoritmo de Newton–Raphson para aproximar una raíz
de la ecuación f (x) = 0, dada una aproximación inicial x0, es el si-
guiente.
Entrada: Aproximación inicial x0, tolerancia tol y un número
máximo N0 de iteraciones.
Salida: Solución aproximada x o mensaje de fracaso.
Pasos computacionales
1. Sea n = 1.
2. Mientras n ≤ N0, realizar los pasos 3 al 5.
3. Calcular x = x0 − f (x0) / f ’(x0).

9
4. Si el máx (x − x0,f (x)) < tol, entonces alto, la solución
aproximada es x.
5. En caso contrario, hacer x0 = x & n = n + 1.

El siguiente programa en MATLAB está basado en estas ideas.


% Calcula una raíz de f(x)=0 con el método de Newton-Raphson,
% desde un punto inicial x0.
% Se recomienda elegir x0 cerca de alguna raíz de f(x); para
% ello es recomendable esbozar la gráfica de f(x) y
% actualizarlo en el comando inline dentro del programa,
% antes de ejecutarlo.

clear; clc
x0=input('Dame el punto inicial x0: ');
N0=input('Dame el número máximo de iteraciones: ');
disp(' ')
tol=10^(-4); n=1;
f=inline('x.^3+2*x-1','x');
while n<=N0;
if abs(x0)<eps; h=abs(x0)+eps;
else h=sqrt(eps); end
f0=f(x0);
fp=(f(x0+h)-f0)/h;
if abs(fp)<eps, break; end
x=x0-f0/fp; fx=f(x);
if max(abs(x-x0),abs(fx))<tol; break; end
fprintf('n=%2.0f, x0=%12.5e, fx0=%12.5e, fp=%12.5e\n',n,
x0,f0,fp)
x0=x; n=n+1;
end
fprintf('\n Raíz aproximada = %15.8e\n',x)

Antes de correr el programa se recomienda esbozar la gráfica de f en


MATLAB, para detectar la raíz que se desea calcular y elegir adecua-
damente el punto de inicio x0. Por ejemplo, para f (x) = x3 + 2x −1,
hacemos
» x=[-2:.01:2]; ↵
» y=x.^3+2*x-1; ↵
» plot(x,y); grid ↵

10
Enseguida MATLAB responde dibujando la gráfica de f en el interva-
lo solicitado, su respuesta es

15

10

-5

-10

-15
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2

Si la gráfica no se “ve bien” se recomienda repetir el proceso varias


veces, cambiando el intervalo y el paso que se usa en su partición,
hasta generar una gráfica a satisfacción.
Corremos el programa y generamos el siguiente reporte,

Dame el punto inicial x0: 1


Dame el número máximo de iteraciones: 30

n= 1, x0=1.00000e+000, fx0=2.00000e+000, fp=5.00000e+000


n= 2, x0=6.00000e−001, fx0=4.16000e−001, fp=3.08000e+000
n= 3, x0=4.64935e−001, fx0=3.03726e−002, fp=2.64849e+000

Raíz aproximada = 4.53397654e-001

La raíz obtenida es correcto en todas sus cifras decimales salvo posi-


blemente el último.

11
Actividad 3. Use el programa anterior para resolver los siguientes
problemas.
1. Una mezcla equimolar de monóxido de carbono y oxígeno debe
alcanzar el equilibrio a 3000 K (grados Kelvin) y una presión de 5
bar. La reacción teórica es CO+(1/2)O2↔CO2.
La reacción química real se escribe así
CO+O2→xCO+(1/2)(1+x)O2+(1−x)CO2.
La ecuación de equilibrio químico para determinar la fracción de
CO restante, o sea x, está dada por
(1 − x ) 3 + x
KP = , 0 < x <1,
x 1+ x P / P0
donde, KP=3.06 es la constante de equilibrio para CO+(1/2)O2 =
CO2 a 3000 K, P=5 bar y P0=1 bar. Determine el valor de x.
2. El factor de fricción f para los flujos turbulentos en una tubería
está dado por
1 e 9.35 
= 1.14 − 2 log 10  + 
D R f 
f  e 
llamada correlación de Colebrook, donde Re es el número de Rey-
nolds, e es la aspereza de la superficie de la tubería y D es el diá-
metro de la tubería. Evalué f adecuadamente para los siguientes
casos:
a) D = 0.1 m, e = 0.0025 m, Re = 3 ×10 4
b) D = 0.1 m, e = 0.0001 m, Re = 5 ×10 6
3. En estudios sobre recolección de energía solar al enfocar un cam-
po de espejos planos en un colector central, un investigador obtu-
vo la siguiente ecuación para el factor de concentración geométri-
π( h / cos A) 2 F
ca C: C = , donde A es el ángulo de
0.5πD 2 (1 + sen A − 0.5 cos A)
anillo del campo, F es la cobertura fraccionaria del campo con los
espejos, D es el diámetro del colector y h es la altura del mismo.
Encuentre A, si h=300, C=1200, F=0.8 y D=14.

12
4. Un método particularmente eficiente para la integración numérica
de una función es el cuadratura gaussiana. En el desarrollo de
fórmulas para este método es necesario evaluar los ceros de poli-
nomios de Legendre. Encuentre los ceros del polinomio de Le-
gendre de sexto orden: P6(x) =(1/48) (693x6 − 945x4 + 315x2 − 15).
(Nota: Todos los ceros de los polinomios de Legendre son meno-
res que uno en magnitud y, para polinomios de orden par, son
simétricos con respecto al origen.)
5. Los polinomios de Legendre son una clase de polinomios deno-
minados ortogonales. Otro conjunto son los polinomios de Lague-
rre. Encuentre los ceros de los siguientes:
a) L3(x) = x3 − 9x2 + 18x − 6.
b) L4(x) = x4 − 16x3 + 72x2 − 96x + 24.
6. Todavía, otra clase de polinomios ortogonales son los polinomios
de Chebyshev. Encuentre las raíces de:
T6(x) =32x6 − 48x4 + 18x2 − 1.
(Observe la simetría de esta función. Todas las raíces de los polino-
mios de Chebyshev también son menores que uno en magnitud).

30 de mayo de 2002.

7. Funciones que Optimizan y Calculan Raíces.


MATLAB dispone de funciones que minimizan y calculan raíces de
funciones no lineales de una y varias variables, funciones que calculan
integrales de funciones de una y dos variables y, funciones que resuel-
ven sistemas de ecuaciones diferenciales ordinarias de primer orden
con condiciones iniciales. Comenzamos a estudiar las que optimizan y
calculan raíces de funciones, algunas de ellas son

fplot - función para dibujar gráficas en diferentes ventanas.


fminbnd - Minimiza funciones de una variable con restricciones
acotadas.
fminsearch - Minimiza funciones de varias variables.

13
fzero - Encuentra raíces de una función de una variable.
También están las funciones fmin y fmins.
Por ejemplo,
» subplot(2,2,1), fplot('humps',[0 1]) ↵
» subplot(2,2,2), fplot('abs(exp(-j*x*(0:9))*ones(10,1))',[0 2*pi]) ↵
» subplot(2,2,3), fplot('[tan(x),sin(x),cos(x)]',2*pi*[-1 1 -1 1]) ↵
» subplot(2,2,4), fplot('sin(1 ./ x)', [0.01 0.1],1e-3) ↵
MATLAB responde dibujando lo siguiente

100 10

80 8

60 6

40 4

20 2

0 0
0 0.5 1 0 2 4 6

1
5
0.5

0 0

-0.5
-5
-1
-5 0 5 0.02 0.04 0.06 0.08 0.1

La primera gráfica es de la función humps, que es una función pro-


gramada en MATLAB con el nombre de humps.m; el programa es

function [out1,out2] = humps(x)


% HUMPS A function used by QUADDEMO, ZERODEMO and FPLOTDEMO.
% Y = HUMPS(X) is a function with strong maxima near x = .3
% and x = .9.
%
% [X,Y] = HUMPS(X) also returns X. With no input arguments,

14
% HUMPS uses X = 0:.05:1.
%
% Example:
% plot(humps)
%
% See QUADDEMO, ZERODEMO and FPLOTDEMO.
% Copyright (c) 1984-98 by The MathWorks, Inc.
% $Revision: 5.4 $ $Date: 1997/11/21 23:26:10 $

if nargin==0, x = 0:.05:1; end


y = 1 ./ ((x-.3).^2 + .01) + 1 ./ ((x-.9).^2 + .04) - 6;
if nargout==2,
out1 = x; out2 = y;
else
out1 = y;
end

1 1
Esta función define a f ( x ) = + −6 .
( x − 0.3) + 0.01 (0 − 0.9) 2 + 0.04
2

Otra alternativa es usar inline en lugar del programa humps.m, en este


caso se teclea simplemente
» f =inline('1 ./ ((x-.3).^2 + .01) + 1 ./ ((x-.9).^2 + .04) - 6','x'); ↵
» subplot(2,2,1), fplot(f,[0 1]) ↵
y MATLAB responde dibujando la primera gráfica de la figura ante-
rior.
Ejemplo 3: Encuentre el máximo y el mínimo local, así como la pri-
mera raíz positiva de f (x) = esen(x)cos(x) sobre −π ≤ x ≤ 2π.
» clear; clf; clc ↵
» f =inline('exp(sin(x)).*cos(x)', 'x'); ↵
» fplot(f,[-pi 2*pi]); grid ↵
Hasta aquí está viendo la gráfica de f y puede ver que tiene un mínimo
local entre 2 y 3. Para calcular este mínimo ejecutamos
» x1=fminbnd(f,2,3) ↵
MATLAB responde
Optimization terminated successfully:
the current x satisfies the termination criteria using OPTIONS.TolX of
1.000000e-004

15
x1 =
2.4753
» hold on ↵
» plot(x1,f(x1),'Or') ↵
Marca el punto mínimo en la gráfica con una O de color rojo.
Para calcular el punto máximo, observamos que está entre 0 y 2, por
lo hacemos
» g =inline('-exp(sin(x)).*cos(x)','x'); ↵
» x2=fminbnd(g,0,2) ↵
Optimization terminated successfully:
the current x satisfies the termination criteria using OPTIONS.TolX of
1.000000e-004
x2 =
0.6663
» plot(x2,f(x2),'Og') ↵
Dibuja el punto máximo con una O de color verde.
Para calcular la primera raíz positiva, observamos que está entre 1 y 2,
por lo que ejecutamos
» x0=fzero(f, 2) ↵
Zero found in the interval: [1.5475, 2.32].
x0 =
1.5708
» plot(x0,0,'Ok')
Dibuja la primera raíz positiva con una O de color negro.
Si queremos ver nuestros resultados
» [[x0,x1,x2]',[f(x0),f(x1),f(x2)]'] ↵
ans =
1.5708 0.0000
2.4753 −1.4585
0.6663 1.4585
Si ya no queremos insertar más información que tenga que calcularse
en nuestra gráfica, es necesario cerrarla con hold off. Importante ca-
da vez que se ejecuta hold on se debe cerrar con hold off.

16
Podemos agregar leyendas de los resultados obtenidos en nuestra grá-
fica con la ayuda del ratón, para obtener el siguiente reporte

Punto máximo (0.6663, 1.4585)


1.5

1
f (x) = exp(sen(x)) cos(x)
0.5

0
Primera raíz positiva = 1.5708
-0.5

-1

-1.5
Punto mínimo (2.4753,-1.4585)

-2
-3 -2 -1 0 1 2 3 4 5 6

Tenemos la opción de guardar nuestra gráfica con extensión .fig para


poder visualizarlo posteriormente en MATLAB. También podemos
trasladar todos los comando ejecutados en el Ejemplo 3, en el editor
de MATLAB, depurarlo y tener un programa permanente que optimi-
ce y calcule raíces de funciones. Realice como ejercicio dicha tarea.

8. Funciones de Integración Numérica (Cuadratura).

quad - Calcula integrales numéricamente usando métodos de or-


den bajo.
quad8 - Calcula integrales numéricamente usando métodos de or-
den alto.
dblquad - Calcula integrales dobles numéricamente.

17
Ejemplo 4: Calcule el área limitada por f (x) = esen(x)cos(x) entre sus
dos primeras raíces positivas.
Sabemos que la primera raíz positiva es x0= 1.5708, calculemos de la
misma forma la segunda raíz positiva que está entre 4 y 5.
» x3=fzero(f,4) ↵
Zero found in the interval: [3.0949, 4.9051].
x3 =
4.7124
Depuramos nuestra gráfica si sigue activo o ejecutamos las siguientes
operaciones, para ver solamente la gráfica de f y sus raíces.
» f =inline('exp(sin(x)).*cos(x)','x'); ↵
» fplot(f,[-pi 2*pi]); grid ↵
» hold on ↵
» plot([x0,x3],[0,0], 'Or'); ↵

Para calcular la integral desde x0 hasta x3, ejecutamos


» q=quad8(f,x0,x3) ↵
q=
−2.3504
por lo que el área solicitada es 2.3504 unidades cuadradas.

Puede colorear la región donde se está calculando el área de la si-


guiente manera
» [x0:.01:x3]; ↵
» y=f(x); ↵
» area(x,y) ↵

La función area grafica la función como el plot pero colorea el área


bajo la curva. El resultado es el siguiente

18
1.5

1
f(x) = exp(sen(x)) cos(x)

0.5

Raíz = 1.5708 Raíz = 4.7124


0
Area = 2.3504

-0.5

-1

-1.5
-3 -2 -1 0 1 2 3 4 5 6

9. Funciones que Resuelven Numéricamente Ecuaciones Dife-


renciales Ordinarias.

Algunas de las funciones básicas que dispone MATLAB para resolver


numéricamente EDO’s con condiciones iniciales son los siguientes.
(Si Usted no conoce sobre las ecuaciones stiff, puede probar primero
con ode45 y luego con ode15s.)
ode45 - Resuelve ecuaciones diferenciales no-stiff con método de
orden mediano.
ode23 - Resuelve ecuaciones diferenciales no-stiff con método de
orden bajo.
ode113 - Resuelve ecuaciones diferenciales no-stiff con método de
orden variable.
ode23t - Resuelve ecuaciones diferenciales stiff moderados con la
regla del trapecio.

19
ode15s - Resuelve ecuaciones diferenciales stiff y ecuaciones dife-
renciales algebraicas con método de orden variable.
ode23s - Resuelve ecuaciones diferenciales stiff con método de or-
den bajo.
odefile - Formato de archivo para EDO’s.
Para mayor información consultar en » help funfun ↵.

Ejemplo 5. Resuelva el problema del valor inicial dado por


y’ = y/t − (y/t)2, 1 ≤ t ≤ 2 con y(1) = 1.
Y compare el resultado con la solución exacta y = t/(1+log t).
En efecto, un programa que resuelve el problema usando ode23.m y
ode45.m y visualiza los resultados es el siguiente.
% Este programa simula un problema de valor inicial con ode23
% y ode45.
clear; clc; clf;
tspace=input('Dame el intervalo a resolver [t0 tf]: ');
y0=input('Dame las condiciones iniciales [ ]: ');

dy=inline('y./t-(y./t).^2','t','y');
y1=inline('t./(1+log(t))','t');
[t,y]=ode23(dy,tspace,y0);

% Distribución del error local


err=y-y1(t);
figure(1)
subplot(2,2,1), plot(t,y); grid; title('Solución Numérica')
subplot(2,2,2), plot(t,y1(t)); grid; title('Solución Exacta')
subplot(2,2,3), plot(t,err); grid; title('Error local')
clear t y err
[t,y]=ode45(dy,tspace,y0);

% Distribución del error local


err=y-y1(t);
figure(2)
subplot(2,2,1), plot(t,y); grid; title('Solución Numérica')
subplot(2,2,2), plot(t,y1(t)); grid; title('Solución Exacta')
subplot(2,2,3), plot(t,err); grid; title('Error local')

20
Analice lo que hace el programa en cada etapa, luego córrela en MA-
TLAB y analice los resultados gráficos que obtiene. Puede también
ver los resultados numéricos con » [t, y] ↵.

Actividad 4. Use el programa anterior para resolver los siguientes


problemas, y compare su resultado con la solución exacta.
1. y’ = 1 + y/t + (y/t)2, 1 ≤ t ≤ 3 con y(1) = 0; y = t tan (log t).

2. y’ = −(y + 1)(y + 3), 0 ≤ t ≤ 2 con y(0) = −2; y = −3 + 2/(1+e−2t).

3. y’ = −5y + 5t2 + 2t, 0 ≤ t ≤ 1 con y(0) = 1/3; y = t2 + (1/3)e−5t.

4. y’ = 1/t2 − y/t − y2, 1 ≤ t ≤ 2 con y(1) = −1; y = −1/t.

5. y’ = (2/t)y + t2 e t + 2t, 1 ≤ t ≤ 2 con y(1) = 0; y = t2 (et − e).

Ejemplo 6. Resuelva el problema de valores iniciales dado por


y”’ − 3y” −y’ y = 0; y(0) = 0, y’(0) = 1 & y”(0) = −1.
En efecto, primero convertimos la ecuación de tercer orden en un sis-
tema de 3 ecuaciones de primer orden, haciendo el cambio de varia-
bles y1 = y, y2 = y’, y3 = y”’ ; con lo se obtenemos el sistema

y’1 = y2
y’2 = y3
y’3 =3y3 + y2 y1
y0 = (y1(0), y2(0), y3(0)) = (0, 1, −1).

» options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]); ↵


» ode113('rigidode',[0 12],[0 1 1],options); ↵

21