M¶etodos Num¶ericos con Matlab
Mishelle Segu¶³1
[email protected]
Esta es una primera versi¶on, por lo que se agradece cualquier comentario o sugerencia.
1
Introducci¶on
El prop¶osito de estas notas es dar una introducci¶on a los sistemas de software interactivo
Matlab (Matrix laboratory) y Octave, los cuales son equivalentes, con la ventaja de que
Octave es un software libre2. Esto con el objetivo de que posteriormente los alumnos puedan
crear sus propios programas de programaci¶on din¶amica, los cuales pueden incluir gr¶a¯cas,
regresiones, o cualquier computo num¶erico que se desee.
Dado que Matlab est¶a diseñado para resolver problemas num¶ericamente, es decir, que
tienen un aritm¶etica de precisi¶on ¯nita, nos va a producir soluciones aproximadas y no
exactas. Sin embargo, esto no resta credibilidad a este programa, ya que es uno de los
programas m¶as ultizados entre los economistas que realizan calibraciones, y es muy f¶acil de
usar.
2Si tienen Windows, lo pueden bajar de http : ==sourceforge:net=project=showfiles:php?group id =
2888 y se llama \Octave 2.1.73 for Windows Installer".
2
Temario
1. Introducci¶on a Matlab: Sint¶axis, c¶alculos sencillos y gr¶a¯cas b¶asicas
2. Integraci¶on y diferenciaci¶on num¶erica
3. Resolver un sistema de ecuaciones no lineales con m¶etodos de gradiente (Newton,
secante)
4. Resolver una ecuaci¶on en diferencias con m¶etodos num¶ericos (Gauss-Seidel).
5. Programaci¶on din¶amica num¶erica:
² Iteraci¶on de la funci¶on de valor
² Programaci¶on din¶amica determin¶istica
² Programaci¶on din¶amica estoc¶astica
6. Otros m¶etodos de la aproximaci¶on: polinomios, interpolaci¶on
7. Aplicaciones econ¶omicas
3
1 Introducci¶on a Matlab
1.1 Sint¶axis y c¶alculos sencillos
Antes que nada señalemos que cuando una quiere iniciar Matlab, ¶este puede tardar unos
segundos en abrir (de 10 a 15 seg.).
Algunas cosas que uno debe de saber de Matlab son:
² Las min¶usculas y las may¶usculas no son equivalentes
² Un punto y coma al ¯nal del comando har¶a que no se vea en la pantalla el resultado
² Matlab utiliza par¶entesis () y corchetes [], los cuales no son intercambiables
² Las teclas con las °echas hacia arriba y hacia abajo ayudan para desplazarse entre los
comandos previos que se realicen
² Para seleccionar ayuda, hay que teclear help seguido del comando del cual se requiere
la ayuda
² Matlab se puede cerrar tecleando quit o exit
Explicar las barras de herramienta
Notemos que en la ventana de comandos, cuando asignamos un nombre a una expresi¶on,
es s¶olo un nombre y NO representa una variable matem¶atica, como lo hace Maple.
Veamos ahora unos ejercicios de s¶³mbolos y puntuaci¶on3 para realizarlos en la com-
putadora:
Ver ejercicios1.1.pdf
3 + 7
a = sqrt(3)
b = sin(pi)
c = [1 : 10]
d = 1 : 2 : 8
e = [1 4];
e0
e: ¤ e
f = [1 4; 2 5]
f ^2
3http://www.indiana.edu/~statmath/math/matlab/gettingstarted/
4
Recordemos ahora algunas propiedades b¶asicas de las matrices. Digamos que tenemos el
vector ¯la g = [1 2 3] y el vector columna h = [4; 5; 6], entonces podemos como los vectores
son conformables, podemos multiplicar g ¤ h; o tambi¶en podemos computar el producto
interno con la funci¶on dot(g; h):
Hacerlo y comprobar que da 32
Recordar que el producto a ¤ a no est¶a de¯nido, dado que las dimensiones no son
compatibles, con lo cual si lo tecleamos, Matlab nos arroja un error.
Matlab tiene muchas funciones matem¶aticas para las matrices, por ejemplo exp(g);
log(h), sqrt(g); abs(g); sin(g);etc.
Por default Matlab nos muestra el resultado con 4 d¶³gitos decimales, aunque siempre
los guarda completos en la memoria y computa el equivalente a 14 d¶³gitos decimales. Si
deseamos ver dichos d¶³gitos, escribimos format long, por ejemplo sqrt(g). Si deseamos
regresar al formato anterior, s¶olo escribimos format.
Notemos tambi¶en que Matlab nos muestra los n¶umeros muy grandes y muy pequeños
en notaci¶on de exponencial, con una factor de 10 denotado por e.Por ejemplo, 2^(¡24).
Para redondear n¶umeros, Matlab tiene los comandos round; f ix; ceil y f loor; por
ejemplo round(g):
Matlab tambi¶en puede realizar varias funciones de an¶alisis de datos, por ejemplo sumar,
sacar la media,mediana, desviaci¶on est¶andar o ver la diagonal: sum(g); mean(g); median(g);
std(g); diag(f ):
Veamos a continuaci¶on algunas funciones de algebra lineal que Matlab realiza. Por
ejemplo, recordando que h es un vector columna, tal vez quisieramos resolver el sistema
lineal B ¤ x = h, en donde B = [¡3 0 1; 2 5 ¡7;¡1 4 8]; a trav¶es del operador n, de
la forma x = Bnh: Recordemos que la divisi¶on inclinada a la derecha a=b, signi¯ca a
b , pero
inclinada a la izquierda anb, signi¯ca b
a:
Ver que el resltado es -1.3717, 1.3874, -0.1152.
Uno podr¶³a comprobar el resultado a trav¶es de la norma euclideana del residuo: norm(B¤
x¡ h); que es practicamente cero. Los valores propios (eigenvalues) se pueden encontrar us-
ando eig, por ejemplo j = eig(B):
Si queremos saber el tamaño de la matriz, simplemente escribimos size(B): Si la quer-
emos transponer ponemos B0:
Como ya vimos podemos generar una secuencia se n¶umeros a trav¶es de los dos puntos,
como en el caso c; el cual tambi¶en lo podemos observar sin los corchetes. Notamos que en
5
este caso va del 1 al 10 en valores de uno, pero >c¶omo hacemos para que incrementen on
otras unidades? Esto es muy sencillo, s¶olo se incorporan los incrementos especi¯candolo
como m : s : n; en donde m es el valor con el que se desea inicializar, s es el paso con el cual
se desea incrementar, y n es el valor ¯nal. Por ejemplo, k = 1 : 3 : 10 ¶o l = 1 : 0:2 : 10:
En Matlab tambi¶en podemos hacer matrices m¶as grandes usando otras que ya ten¶³amos,
por ejemplo:
C = [B; g]:
Si deseamos s¶olo un elemento de la matriz, lo señalamos como C(i; j); en donde i es
la ¯la y j es la columna, por ejemplo C(2; 3); que nos de ¡7: Pero >qu¶e tal si queremos
una submatriz? Entonces s¶olo seleccionamos C(i1 : i2; j1 : j2);por ejemplo, C(2 : 3; 1 : 2):
En Matlab tambi¶en podemos escoger s¶olo las columnas o las ¯las, por ejemplo C(:; j) es la
columna j de C, y C(i; :) es la ¯la i:
Matlab tambi¶en tiene por default algunas matrices, como la identidad y la de ceros
y unos, a trav¶es de eye, zeros y ones. Por ejemplo, I3 = eye(3; 3), Y = zeros(3; 5);
Z = ones(2): Si lo que deseamos es una secuencia de s¶olo un n¶umero repetido varias veces,
por ejemplo si el n¶umero cero lo queremos repetido 3 veces, escribimos x(3) = 0:
Posteriormente veremos que es ¶util generar valores aleatorios a trav¶es de los comandos
rand y randn, los cuales vienen de la distribuci¶on uniforme [0,1] y de la normal (0,1),
respectivamente. Por ejemplo, F = rand(3) y G = randn(1; 5):
Matlab puede computar el in¯nito, a trav¶es del comando inf, sin embargo recordemos
que no podemos dividir inf/inf, porque matem¶aticamente no est¶a de¯nido y en la pantalla
de Matlab aparecer¶³a NaN(Not a Number).
Por ¶ultimo veamos que Matlbab, como muchos lenguajes de programaci¶on, trabaja con
bucles (loops). Un ejemplo es:
1+
1
1 + 1
1+ 1
1+1
Dicha soluci¶on se puede obtener generando el bucle
m = 2;
for n = 1 : 3; m = 1 + 1
m;
end
m
6
Si deseamos ver todas nuestras variables escribimos who y se desplegaran todos los
nombres de nuestras variables. Aunque si se desea mayor informaci¶on acerca de las variables,
escribimos whos.
1.2 Gr¶a¯cas
Las gr¶a¯cas m¶as sencillas de hacer son las gr¶a¯cas de puntos en el plano cartesiano. Por
ejemplo,
x = [0; 3; 6:1; 7];
y = [3; 8; 10; 9:2];
plot(x; y)
N¶otese que por default, Matlab junta los puntos con l¶³neas rectas, pero para tener s¶olo los
puntos ponemos
plot(x; y;0o0)
Tambi¶en podemos gra¯car una funci¶on con los puntos de x; por ejemplo,
plot(x; sin(x))
Podemos tambi¶en dar no s¶olo puntos, sino intervalos, por ejemplo,
x = (0 : :1 : 2 ¤ pi);
y = sin(x);
plot(x; y)
7
¶o
x = (¡5 : :1 : 5);
y = x:=(1 + x:^2);
plot(x; y)
Para ver las diferentes opciones que tenemos para gr¶a¯car, nos podemos ir a la ayuda,
donde ah¶³ nos señalan c¶omo poner diferentes colores, marcadores y tipos de l¶³neas. Veamos
algunos ejemplo:
plot(x; y;0g ¡ 0)
plot(x; y;0p0;0 MarkerSize0; 10)
Podemos añadirle a las gr¶a¯cas t¶³tulo y nombre a los ejes, por ejemplo
plot(x; y); :::
title(0Gr¶af ica 10); :::
xlabel(0eje x0)
El comando hold on lo usamos para poner en una misma gr¶a¯ca, otra gr¶a¯ca, por
ejemplo usando el ejemplo anterior, posteriormente escribimos:
hold on
v =
8
w =
plot(v; w)
Subplot hace que aparezcan varias gr¶a¯cas en una misma ventana.
Realizemos ahora algunos ejercicios de gr¶a¯cas4
x = ¡10 : 0:5 : 10;
y = x:^2;
plot(x; y)
t = 0 : 0:1 : 2 ¤ pi;
x = cos(t);
y = sin(t);
plot(x; y)
t = 0 : pi=5 : 2 ¤ pi;
u = cos(t);
v = sin(t);
f igure
plot(u; v)
plot(x; y;0r ¡ 0; u; v;0b¤ : 0)
figure
subplot(1; 2; 1)
plot(x; y)
title(0F ino0)
subplot(1; 2; 2)
plot(u; v)
title(0T osco0)
Ver ejercicios1.2.pdf
4idem
9
2 Integraci¶on y diferenciaci¶on num¶erica
En este cap¶³tulo usaremos m¶etodos num¶ericos para resolver problemas de c¶alculo y ecuaciones
diferenciales. Veremos algunas t¶ecnicas num¶ericas para encontrar derivadas e integrales
de¯nidas.
Por ejemplo, c¶omo calculamos el ¶area de un triangulo usando Matlab. Lo que podemos
empezar a hacer es un archivo .m, en el cual de¯namos nuestro objetivo:
function A=Atri(b,h)
A=b*h/2;
Entonces en la ventana de Matlab s¶olo escribimos por ejemplo Atri(2,5) para saber
el ¶area de un tri¶angulo de base 2 y altura 5.
2.1 Integraci¶on num¶erica
El problema general en la integraci¶on num¶erica, tambi¶en llamado cuadratura, es el de com-
Todas las f¶ormulas de integraci¶on num¶erica usan un n¶umero ¯nito de evaluaciones del inte-
putarRD f (x)dx en donde f : Rn ! R es una funci¶on integrable sobre el dominio D ½ Rn.
grando, f , y usan una suma ponderada de estos valores para aproximarRD f (x)dx . Existen
varios m¶etodos, aunque a ve
Comentarios de: Métodos Numéricos con Matlab (0)
No hay comentarios