You are on page 1of 58

Anlisis Numrico y Programacin

INTSITITUTO TECNOLGICO SUPERIOR DE


TACAMBARO

ASIGNATURA: ANLISIS NUMRICO Y PROGRAMACIN

PROFESOR: OSCAR ALVAREZ ARRIAGA

TAREA:
UNIDAD 1. PROGRAMACION CON SOFTWARE MATEMTICO
UNIDA 2. GRFICAS CONSOFTWARE MATERMTICO
UNIDAD 3. LGEBRA LINEAL

CARRERA: INGENIERA EN GEOCIENCIAS

ALUMNA: LIZBEYDI DELGADO RAMREZ

GRUPO: 4B

FECHA: 16 DE FEBRERO DEL 2015

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


UNIDAD 1. PROGRAMACION CON SOFTWARE MATEMATICO
1.1 COMANDOS
Cmo abrir MATLAB: En una estacin de trabajo Unix, MATLAB puede abrirse
tecleando:

> mat lab


Una vez que aparezca la indicacin de MATLAB, que puede ser >>, teclee los
comandos que se explican en esta seccin. Para salir de MATLAB, teclee.

>>quit
En Macintosh o Windows, haga clic en el icono de MATLAB o de STUDENT
MATLAB.
El procedimiento para salir de MATLAB es similar al que se sigue para salir de
cualquier otra aplicacin en Macintosh o Windows.
Ayuda: Si no entiende bien el signicado de un comando, teclee
nombre del comando en cuestin. El comando

help

help

y el

presenta una explicacin

concisa pero precisa de los comandos; tal vez no resulte til para los principiantes,
pero ser uno de los comandos que utilice con mayor frecuencia. Por ejemplo, he
aqu una traduccin de las respuestas a help quit y a help help:

>>help quit
QUIT Terminar MATLAB.
QUIT termina MATLAB.
>>he1p help
HELP Documentacin en lnea.
HELP, sin ms, presenta una lista de todos los temas de ayuda primarios. Cada tema
primario corresponde a un nombre de directorio en MATLABPATH.
HELP tema proporciona ayuda sobre el tema especificado. El tema puede ser el nombre
de un comando o de un directorio; en el primer caso, HELP exhibe informacin acerca de
ese comando; en el segundo caso, HELP muestra la Tabla de Contenido del directorio
especificado.
No es necesario proporcionar el nombre de camino completo del directorio; basta con el
ltimo componente o algunos de los ltimos componentes.
Por ejemplo, tanto help general" y "help matlab/general" exhiben la Tabla de Contenido
del directorio toolbox/matlab/general.
LOOKFOR XYZ busca la cadena XYZ en la primera lnea de comentario del texto de
HELP de todos los archivos M que se encuentren en MATLABPATH. Para todos los
1

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


archivos en los que se encuentra la cadena, LOOKFOR exhibir las lneas en las que se
encontr.
MORE ON hace que HELP haga una pausa despus de cada pantalla si el texto de ayuda
ocupa varias pantallas.
Versin: Lo primero que el usuario debe saber acerca del software de
MATLAB es qu versin est usando. Para obtener esta informacin, teclee
versin.
Qu: El comando

what

produce una lista de los archivos M-, MAT- y MEX-

what nombredirectorio lista


matlabpath. No es necesario

presentes en el directorio de trabajo actual. El comando


los archivos del directorio

nombredirectorio

en el

especicar el nombre completo de la ruta del directorio; basta con el o los ltimos
componentes. Por ejemplo, tanto what general como what matlab/ general listan los
archivos M- del directorio tool-box/matlab/ general.
Quin: El comando

who

produce una lista de las variables del espacio de

whos exhibe informacin adicional acerca de cada


global y whos global listan las variables del espacio de trabajo global.
trabajo actual;

variable;

who

Reloj: El comando clock exhibe nmeros como

Ans=
1.0e+03 *
1.9950 0.0030 0.0050 0.0150 0 .0140 0.0091
El primer nmero, 1.0e+ 03, es un multiplicador; los nmeros de

la segunda lnea

tienen el siguiente signicado:

[ao, mes , da , hora , minuto , segundo]


Se puede exhibir la misma informacin en formato entero con
respuesta es

fix (clock).

La

ans =
1995

15

19

56

Lo que indica que la fecha fue el ao 1995, tercer mes, quinto da, 15 horas, 19
minutos y 56 segundos, aproximadamente seis minutos despus de que se
imprimi el primer ejemplo de clock. Podemos medir con clock el tiempo que tarda
una ejecucin. Por ejemplo, asigne

t_1=clock
2

t_0=clock

antes de que se inicie un clculo y

cuando se haya completado; entonces,

t_1-t_0

Ciencia, pasin y aventura

nos dar el tiempo

Anlisis Numrico y Programacin


transcurrido durante el clculo. Tambin podemos usar

tic

toc

para medir el

tiempo transcurrido.
El comando date proporciona informacin similar, pero en un formato ms breve:

ans =
5 -Mar 95
path imprime la ruta de bsqueda vigente de MATLAB. El
comando p = path devuelve una cadena p que contiene la ruta. El comando path
(p0) cambia la ruta a p0, que es una cadena que contiene la nueva nata. El
comando path (p1, p2) cambia la ruta a la concatenacin de las dos cadenas de
ruta p1 y p2. Por tanto, path (path, p3) anexar un directorio nuevo p3 a la ruta
vigente y path (p3, path) antepondr una ruta nueva.
Camino: El comando

Obtener entorno: El comando

getenv (MATLABPATH)

muestra las rutas de

MAT-LAB vigentes.

diary on

Diario: El comando

escribe todo lo que se introduce por el teclado, as

como la mayor parte de lo que se enva a la pantalla, a un archivo llamado

diary y

diary off termina la escritura. Si ya existe el archivo diary, las salidas de la pantalla
se anexarn a ese archivo. Se puede especicar un nombre de archivo distinto de
diary escribindolo despus de la palabra diary. Si no se incluyen las palabras on u

off,

el comando

diary

sola alternar entre

diary on

diary off.

El archivo puede

imprimirse en papel o editarse posteriormente.


Escape: El signo

es el operador que sirve para salir temporalmente de

MATLAB. Con este signo, se tiene acceso al directorio fuera de MATLAB. Por
ejemplo, suponga que abri MATLAB desde un shell de Unix; entonces, podr
emitir un comando de Unix desde dentro de MATLAB escribiendo dicho comando
despus del signo de escape. Por ejemplo, es posible abrir desde MATLAB
software de edicin de textos como el editor

vi

tecleando

!vi nombrearchivo.

Podemos utilizar el escape de fonna anloga en una PC para los comandos de


DOS, o incluso en una Mac para un nmero limitado de comandos. Por ejemplo,
podemos dar formato a un disquete desde MATLAB en una PC con !format a:. Sin
embargo, la ejecucin de programas mediante este mecanismo, sobre todo si se
trata de software grco o de comunicaciones, puede echar a perder el entorno de
computacin.

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


Demostracin: El comando

demo

gua al usuario para que pueda ejecutar

diversas demostraciones que se eligen de un men. El contenido de algunas


demostraciones no es fcil de entender a la primera, pero puede estudiarse en
varias ocasiones si se tiene inters.
1.2 CALCULOS
Clculos con una sola variable: Cuando se abre una ventana de comandos,
aparece la indicacin >> en la esquina superior izquierda de la ventana. Podemos
escribir cualquier comando adelante de la indicacin. En nuestras explicaciones de
los comandos, omitiremos la indicacin por sencillez.
Como ejemplo sencillo, evaluemos:

Volumen =
Los comandos que debemos teclear son:

Listado 1.1a
r = 2;
vol = (4/3)*pi*r 3;
Donde pi = : en MATLAB. Cada linea se teclea adelante de la indicacin >> y se
oprime la tecla return (o intro) al nal de la lnea. Observe que en el guin anterior
cada lnea es un comando y termina con un signo de punto y coma. El circunejo
despus de r es el operador de exponente.
Cuando trabajamos en la ventana de comandos, la computadora calcula la
respuesta de cada comando inmediatamente despus de pulsarse la tecla return.
Por tanto, el valor de vol ya est en la computadora; cmo podemos hacer que
aparezca en la pantalla?
La forma ms fcil de exhibir el resultado es teclear
computadora exhibir

vol

y pulsar return. La

vol =
33.510
Otra forma de imprimir el valor de vol es omitir el signo de punto y coma al nal del
segundo comando:

Listado 1.1b
r=2;
vol = (4/3) *pi*r 3
Si falta el punto y coma, el resultado se imprimir inmediatamente despus de
calcularse. Sin embargo, como casi nunca resulta cmodo ir imprimiendo todos los
resultados, por lo general se coloca un punto y coma despus de cada comando.

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


Podemos escribir varios comandos en una misma lnea separndolas con signos
de punto y coma. Si necesita imprimir los resultados de cada comando que se
ejecute, separe los comandos con comas y termine la lnea con o sin una coma.
Por ejemplo, si escribe

r = 2, vol = (4/3)*pi*r 3
Se imprimirn los valores de r y de vol, pero si escribe

r = 2; vol = (4/3)*pi*r 3;
no se imprimirn resultados.
Es posible dividir un comando largo en varias lneas. En Fortran, esto se hace con
una marca de continuacin en la columna 6. En MATLAB, la marca de
continuacin es y se coloca al nal de la lnea que se desea continuar; por
ejemplo,

Listado 1.2
r=2;
vol = (4/3) *3 . 14159...
*r 3 ;
La indicacin > no aparecer en la lnea que siga a la marca de continuacin.
Operadores aritmticos: Los operadores aritmticos como +, -, * y / son los
mismos que los de lenguajes de programacin tradicionales como Fortran y,
respectivamente, ms, menos, multiplicar y dividir. MATLAB emplea un operador
no tradicional, \, que puede llamarse divisin inversa. Este operador produce el
recproco de la divisin; o sea, a \ b produce b / a. Por ejemplo,

c = 3\1
c=
0.3333
No es conveniente que los lectores utilicen este operador en clculos ordinarios,
pero adquirir importancia en la unidad 3 cuando tratemos el lgebra lineal.
Enunciado if: El enunciado

if siempre debe terminar con un enunciado end;

por ejemplo,

Listado 1.3
r=2;
if r>0, vol = (4/3) * 3.14159 * r
5

3;

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


end
Obsrvese tambin que al escribir el guin anterior la indicacin > no aparece sino
hasta despus de teclearse end. Si el enunciado matemtico requiere un igual
despus de if, utilice ==, como en el lenguaje C; por ejemplo,

Listado 1.4
r=2;
if r==2, vol = (4/3) * pi * r
end
El operador diferente de se escribe

3;
=; por ejemplo,

Listado 1.5
r = 2;
if r = 3, vol = (4/3) * pi * r 3;
end
Los operadores mayor que, menor que, igual o mayor que e igual o menor que
son, respectivamente,

>
<
>=
<=
Los enunciados lgicos and y or se denotan con
ejemplo, la ecuacin condicional

&

y l, respectivamente. Por

Si g>3 o g<0, entonces a=6


Se escribe

if g>3 l g<0, a=6; end


Asimismo, la ecuacin condicional

Si a>3 y c<0, b=19


Se expresa como

if a>3 & c<0, b=l9; end


Los operadores & y l se pueden utilizar agrupados; por ejemplo,
if ((a==2 l b==3) & c<5) g=1; end
El enunciado if se puede utilizar con else o elseif; por ejemplo,
6

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


Listado 1.6
r=2;
if r > 3
b=1;
elseif r==3 b=2;
else
b=0 ;
end
Desde luego, el seif puede repetirse tantas veces como se desee; sin embargo,
hay ocasiones en que el uso de else y elseif tiene sus bemoles, sobre todo cuando
las variables que siguen al enunciado elseif incluyen variables de arreglo de
diferentes tamaos. Si los enunciados el seif no funcionan, olvdese de ellos y
repita enunciados if sencillos cuantas veces sea necesario.
Exhibicin: La orden

disp

exhibe un nmero, vector, matriz o cadena en la

ventana de comandos sin tener que especicar un nombre de variable; as, puede
servir para exhibir mensajes o datos en la pantalla. Por ejemplo, tanto disp (pi)

disp pi imprimen 3 . 14159 en la ventana de comandos. Pruebe tambin disp


Esta es una prueba de disp. .
como

Variables y nombres de variables: No es necesario declarar los nombres de


las variables ni sus tipos. Esto se debe a que los nombres de las variables en
MATLAB no son diferentes para las variables enteras, reales y complejas.
Cualquier variable puede adoptar valores reales, complejos y enteros. Ni siquiera
es necesario declarar previamente el tamao de un arreglo.
En principio, cualquier nombre puede utilizarse siempre que sea compatible con
MAT-LAB. Sin embargo, debemos tener presentes dos situaciones incompatibles.
La primera es que MATLAB no acepta el nombre; la segunda es que se acepta el
nombre pero ste anula el signicado original de un nombre reservado. Estos
conictos pueden ocurrir con los siguientes tipos de nombres:
(a) nombres de ciertos valores
(b) nombres de funciones (subrutinas)
(c) nombres de comandos
Un mtodo para determinar la compatibilidad del nombre de variable es probarlo
en la pantalla de comandos. Un enunciado vlido como x=9 tendr una respuesta
como sta:

X=
9
7

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


Lo que signica que se acept la variable. En cambio, si se prueba con

end=4

(como ejemplo de uso indebido), ser ignorado.


Un ejemplo del segundo conicto es el siguiente: si se utilizan

como

sin

cos

ejemplos de nombres de variable indebidos) sin relacin con las funciones


trigonomtricas; por ejemplo,

sin= 3;
cos = sin 2;
Los clculos procedern, pero

sin

cos

ya no podrn utilizarse como funciones

trigonomtricas en tanto no sean borradas las variables con el comando

clear o se

abandone MATLAB.
Si aparece un mensaje de error relacionado con un conicto, es importante que el
lector investigue qu lo caus.
Es tradicional utilizar los smbolos i, j, k, I, m y n como variables enteras o
ndices. Al mismo tiempo, i y j se emplean para denotar el valor imaginario unitario
. En MATLAB, i y j se reservan para el valor imaginario unitario; por tanto, si
un clculo incluye varias variables complejas es aconsejable evitar el uso de i y j
como variables definitivas por el usuario, si es posible.
En la tabla 1.1 se presentan ejemplos de nombres de variable reservados que
tienen signicado especial. Se puede vericar la existencia de una variable o un
archivo con el comando exist.

for /end y while/ end. A n de ilustrar un ciclo


las esferas para r=1 hasta 5. Los comandos

Ciclos: MATLAB cuenta con ciclos

for / end,

calculemos el volumen de

para esta tarea pueden escribirse as:

Listado 1.7
for r=1:5
vol=(4/3) * pi * r^3
disp ( [r, vol ] )
end
8

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


Los clculos del ciclo no comenzarn hasta que se teclee end y se pulse la tecla
return (intro). El enunciado disp( [r , vol] ) imprimir los valores de r y vol en una
lnea cada vez que se calcule vol. No es necesario un signo de punto y coma
despus de for r=1 : 5 ni de end.
Otra forma de escribir un ciclo consiste en utilizar while /end; por ejemplo,

Listado 1.8
r=0;
while r < 5
r = r+1;
Vol = (4/3) *pi*1 ^ 3;
disp ( [r, vol])
end
El ndice del ciclo puede decrementarse as:

for r =5 : - 1 : 1
vol = (4/3) * pi * 1 ^3;
disp ( [r, vol])
end
En este ejemplo, el -1 entre los operadores de dos puntos es el decremento del
parmetro r despus de cada ciclo.
Podemos escribir ciclos dobles y triples; por ejemplo,

Listado 1.9
for r= 1 : 5
for s= 1 : r
vol = (4/3) * pi * (r^3 - s^3);
disp( [r, vol)
end
end
Formato: Por omisin, los nmeros se exhiben con cinco dgitos:

pi
ans =
3 . 1416
9

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


Sin embargo, los mismos dgitos pueden exhibirse con 16 dgitos si se emite la
orden format long; Por ejemplo,

format long
pi
ans=
3.141592653589793
Si desea volver al formato corto, utilice

format shor t. Adems, format short e y format

long e se pueden imprimir nmeros cortos y largos, respectivamente, en formato de


punto otante.
Corte: El comando break termina la ejecucin de un ciclo

for o while. Si se utiliza

break en ciclos anidados, slo se termina el ciclo inmediato donde se encuentra el


comando.
En el siguiente ejemplo,

break termina el ciclo interior tan pronto como se satisface


j>2*i, pero el ciclo de i se contina hasta i=6:
Listado 1.10
for i=1:6
for j=1:2O
if j>2 * i, break, end
end
end
Ciclo innito: Hay ocasiones en que conviene utilizar un ciclo innito que
pueda romperse cuando se satisfaga cierta condicin. En el siguiente ejemplo se
muestra un ciclo innito que se rompe slo si se satisface la condicin x > xlimit:

while 1
.
.
if x > xlimit, break; end
.
.
end
10

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


Cmo borrar variables: Al ejecutarse los comandos, MATLAB memoriza las
variables utilizadas. Sus valores permanecen en la memoria hasta que se sale de
MATLAB o hasta que se borran las variables, lo cual se hace con el comando clear.
Si slo se desea borrar algunas variables, sus nombres se indican despus de la
palabra clear; por ejemplo,

clear x y z
Cmo borrar la ventana de comandos: Si desea borrar la ventana, utilice el
comando

clc
1.3 LECTURA Y ESCRITURA
Hay varias formas de pasar datos a y de MATLAB. Los mtodos pueden
agruparse en tres clases:
(a) Operacin interactiva mediante teclado o el ratn
(b) Lectura de o escritura en un archivo de datos
(c) Empleo de save o load
Lectura de entradas de un teclado: MATLAB puede aceptar datos de entrada
a travs del teclado mediante el comando input. Si se desea leer un nmero, un
enunciado bsico sera:

z = input(Teclee el radio:)
La parte Teclee el radio: es un mensaje de solicitud que se exhibe en la pantalla.
Cuando se teclee el valor del radio y se pulse la tecla return (intro), el dato se
guardar en z. Tambin es posible introducir cadenas desde el teclado. Un
enunciado bsico sera:

z = input ( Indique su nombre: ' , ' s ')


El segundo argumento,

, indica que la entrada del teclado es una cadena. La

z se convertir en una variable de arreglo (vector de la) a menos que la


cadena slo contenga un carcter. Se puede introducir una cadena con input sin s
variable

si la cadena se teclea encerrada entre apstrofos. En este caso, el mensaje de


solicitud podra ser:

z = input ( ' Indique su nombre (encerrado en apstrofos) : ')


11

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


Formato de salida: Es posible imprimir mensajes y nmeros con formato si se
utiliza fprintf; por ejemplo, j

fprintf ( 'El volumen de la esfera es %12.5 f. \ n ' , vol)


Aqu se incluy entre los apstrofos la cadena que se va a exhibir, el formato de
un nmero y el operador de nueva lnea. El estilo del formato debe ser familiar
para quienes conocen el lenguaje C: El volumen de la esfera es la cadena que se
exhibir,

%12. 5f

es el formato y es similar a

F12. 5 en Fortran, y \n es el operador

de nueva lnea que avanza en una lnea la posicin en la pantalla. El operador de


nueva lnea se puede colocar en cualquier lugar de la cadena. Por ltimo, vol es la
variable que se imprimir en el formato %12.
en seguida aparecer en la misma lnea.
El enunciado

5f. Si se omite \n, lo que se imprima

Fprintf ( 'formato_e: %12.5e \n, 12345.2)


Exhibir

formato_e: l.23452e+04
Si se escriben consecutivamente dos enunciados de impresin sin

\n

en el

primer enunciado, por ejemplo,

Fprintf ('formato_e: %12.5e', 12345.2)


Fprintf (formato_f: %l2.3f\n', 7.23462)
toda la salida se imprimir en una sola linea, as:

formato_e: l.23452e+O4 formato_f: 7.235


Se puede teclear un valor entero empleando el mismo formato, slo que se
pone un 0 despus del punto decimal; por ejemplo,

Fprintf ('formato_f: %12.0f\n', 93)


Produce

formato_f: 93
12

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


Si se desea imprimir varios nmeros en una misma lnea, puede utilizarse varias
veces fprintf sin \n, excepto en el ltimo enunciado.
Escritura en un archivo especco: Es posible utilizar el enunciado

fprintf

para escribir salidas con formato en un archivo. Para ello, se incluye el nombre del
archivo en el argumento; por ejemplo,

Fprintf (archivo_x', Volumen = %12.5 f\n , vol)


Escribir la salida en el archivo de nombre

archivo_x.

Si no existe el archivo, se

crear uno nuevo; si existe, la salida se anexar al nal de su contenido. Si ya


existe archivo_x, es posible eliminarlo con : !rm archivo_x en Unix o !erase archivo_x
en Windows.
Se puede tener un mejor control de los archivos con

fopen

fclose.

Si desea

mayores detalles, consulte la gua de usuario de MATLAB.


1.4 VARIABLES DE ARREGLO
Variables de arreglo unidimensional: Las variables de arreglo unidimensional
tienen forma de la o columna y estn ntimamente relacionadas con los vectores
y las matrices. En MATLAB, arreglo de la es lo mismo que vector de la y arreglo
de columna es lo mismo que vector de columna. La variable x puede denirse
como vector de la especicando sus elementos; por ejemplo:

X= [0, 0.1, 0.2, 0.3, 0.4, 0.5];


Si desea imprimir un elemento en particular, teclee x con su subndice. Por
ejemplo, si teclea x (3) como un comando se exhibir:

ans =
0. 2
Una forma equivalente de denir la misma x es

for i=1:6
x(i) = (i-1)*0.1;
end
El tamao de un vector no tiene que declararse previamente, pues se ajusta
automticamente. El nmero de elementos de x puede incrementarse deniendo
elementos adicionales, por ejemplo,

x (7 ) = 0.6 ;
Otra forma de escribir una variable de arreglo de la con un incremento o
decremento jo es:

x = 2 = -0 . 4 = -2
que produce

13

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


x = 2.0000 1.6000 1.2000 0.8000 0.4000 -0.0000
La denicin de un arreglo de columna es similar a la de un arreglo de la excepto
que los elementos se separan mediante signos de punto y coma; por ejemplo,

z= [0; 0.1; 0.2; 0.3; 0.4; 0.5];


Una alternativa para denir esto mismo es agregar un apstrofo a un arreglo de
la:

z= (0, 0.1, 0.2, 0.3, 0.4, 0.5+;


El operador apstrofo equivale al operador de transposicin en el lgebra de
matrices y vectores, as que convierte vectores de columna en vectores de la y
viceversa. Si se teclea z como orden se obtiene:

z=
0
0. 1
0. 2
0. 3
0. 4
0. 5
Si se dene un solo elemento de un arreglo c, por ejemplo,

c ( 8) = 11 ;
se supondr c (i) = 0 para i=1 hasta 7. Por tanto, si teclea c como comando obtendr
C=
0 0 0 0 0 0 0 11
Cuando y y x tienen la misma longitud y la misma forma (la o columna), los
vectores y y x se pueden sumar, restar, multiplicar y dividir empleando los
operadores aritmticos de arreglos:

z=x+y
z=xey
z=x.*y
z=x./y
que equivalen respectivamente a

Listado 1.12
for i=1:6; z(i) = x(i) + y(i); end
for i=1:6; z(i) =x(i) -y(i); end
for i=1:6; z(i) = x(i) *y(i); end
for i=1:6; z(i) = x8i) /y(i); end
14

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


Las reglas para la suma y la resta son las mismas que para los vectores en el
lgebra lineal.
En cambio, .* y ./ son operadores nombrados para la multiplicacin y la divisin
de arreglos, respectivamente, y son distintos de la multiplicacin y divisin de
matrices y vectores. Si se omite el punto de .* o ./, el signicado cambia
totalmente.
El operador de potenciacin de arreglos se puede ilustrar con

g=z.^1.2;
donde z es un vector de longitud 6, se coloca un punto antes del operador ^ y g se
convierte en un vector de la misma longitud. El enunciado anterior equivale a

for i=1:6; g(i) = z(i) ^1.2; end


donde el operador A no lleva antepuesto un punto.
El tamao de un arreglo puede incrementarse anexndole un elemento o un vector
(o vectores). Por ejemplo, suponga

x=
2 3
El comando que sigue anexa 5 a x y hace que su longitud sea 3:

x = [x , 5]
Lo que devuelve

x=
2 3 5
Podemos anexar un nmero, un vector o varios vectores a un vector de columna.
Suponga que y es un vector de columna,

y=
2
3
entonces

y = [y ; 7]
produce

y=
2
3
7
15

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


Aqu, 7 se aade al nal del vector de columna. Observe que se utiliza un signo de
punto y coma para anexar a un vector de columna. Tambin se puede anteponer
un elemento a un vector; por ejemplo, x = [9 , x] produce

x=
9 2 3 5
donde x del lado derecho se deni previamente. De forma similar,

[-1 ; y] produce

y=
-1
2
3
7
Un procedimiento inverso consiste en extraer una parte de un vector. Con la

anterior,

w = y (3 : 4)
dene a w que equivale al tercer y cuarto elementos de y, a saber:

w=
3
7
Si no recuerda el tamao de un vector, pregntelo a la computadora. Para un
vector

x = [9 , 2 , 3 , 5]
la consulta

length (x)
recibe la respuesta

ans =
4
La respuesta es la misma para un arreglo de columna. Denamos

y = *9, 2 ,3+;

entonces, length (y) devolver ans = 3. Por otro lado, si adems de la longitud
se desea saber si el vector es de columna o de la, se debe usar

size. Por ejemplo,

size (y) devolver


ans =
3 1
donde la primera cifra es el nmero de las y la segunda es el nmero de
columnas. Esta respuesta nos dice que y es una arreglo de 3 por 1, es decir, un
vector de columna de longitud
g 3.Para z=[9, 2, 3, 5], size (z) devolver

16

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


ans =
1

es decir, z es un vector de longitud 4.


Variables de cadena: Las variables de cadena son arreglos. Por ejemplo, una
variable de cadena v denida por

v = ' glaciar '


equivale a

v = * g , 1 , a, c , i , a , r]
La variable v puede convertirse en una cadena de columna con
v = v
que es

g
l
a
c
i
a
r
Variables de arreglo bidimensional: Un arreglo bidimensional, que es lo mismo
que una matriz en MATLAB, se puede denir especicando sus elementos. Por
ejemplo, un arreglo de 3 por 3 se puede denir mediante

m = [0.1, 0.2, 0.3; 0.4, 0.5, 0.6; 0.7, 0.5, 0.9];


Observe que los elementos de una la terminan con un signo de punto y coma.
Desde luego, todas las las deben tener el mismo nmero de elementos; si no es
as, la denicin no ser aceptada. El enunciado anterior equivale a escribir

Listado 1.13
m(1 , 1)=0.l;
m(1 , 2)=0.2;
m(1 , 3)=0.3;
m(2 , 1)=0.4;
m (2 , 2 ) =0.5;
m ( 2 , 3 ) =0.6;
m (3 , 1 ) =0.7;
m(3 , 2)=0.8;
17

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


m(3 , 3)=0.9;
Si tecleamos m como un comando obtenemos

m=
0.1000 0.2000 0.3000
0.4000 0.5000 0.6000
0.7000 0.8000 0.9000
Podemos expresar una columna o una la completa de un arreglo bidimensional
empleando un signo de dos puntos. Por ejemplo, m (1 , : ) y m ( : , 3) son la primera

m y la tercera columna de m, respectivamente, y se tratan como vectores.

la de

Por ejemplo,

c (1 , :) = m( 3 , :);
c (2 , :) = m(2 , :);
c (3 , :) = m(1 , :);
producen

c=
0.7000 0.8000 0.9000
0.4000 0.5000 0.6000
0.1000 0.2000 0.3000
Los arreglos bidimensionales se pueden sumar, restar, multiplicar y dividir con los
operadores aritmticos de arreglos:

Listado 1.14a
c=a+b.
c=a-b
c = a .* b
c = a ./ b
Aqu, a y b son arreglos bidimensionales del mismo tamao. Los enunciados
anteriores equivalen a, respectivamente,

Listado 1.14b
for i=1 : 3
for j=1 : 3
c(i , j) = a(i , j) + b(i , j );
end
end
for i=1 : 3
18

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


for j=1 : 3
c(i , j) = a(i , j) - b(i , j );
end
end
for i=1 : 3
for j=1 : 3
c(i , j) = a(i , j) * b(i , j );
end
end
for i=1 : 3
for j=1 : 3
c(i , j) = a(i , j) / b(i , j );
end
end
Observe que las expresiones del listado 1.14a son mucho ms compactas y claras
que las del listado 1.14b.
El enunciado con el operador de potenciacin de arreglos,

g=a.^3
equivale a

for i=1 : 3
for j=1 : 3
g(i , j) = a (i , j) ^ 3;
end
end
Los vectores de columna y los de la son casos especiales de matrices; por tanto,
los operadores de arreglos funcionan igual con los vectores que con las matrices.
El empleo de los operadores aritmticos de arreglos tiene dos ventajas. En primer
lugar, los programas son ms cortos. En segundo lugar, la eciencia
computacional de MATLAB es mayor con la forma corta que cuando se escribe lo
mismo empleando ciclos.
Enunciados

if

que comparan arreglos: Las variables de arreglos pueden

compararse en un enunciado if. Si suponemos que

a y b son matrices del mismo

tamao:

(a) if a==b slo se satisface si a (i , j ) ==b (i , j ) para todos los elementos.


(b) if a>=b slo se satisface si a (i , j ) >=b (i , j ) para todos los elementos.
(c) if a~=b se satisface si a (i , j ) ~=b (i , j ) para al menos un elemento.
19

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


Si se comparan dos variables de cadena de diferente longitud en un enunciado if,
ocurrir y un error aritmtico, porque los dos arreglos deben tener la misma
longitud. Para poder comparar variables de cadena en enunciados if, ser preciso
ajustar todas las variables a una longitud predeterminada anexando espacio; en
blando. Por ejemplo, en lugar de

a = ' equidna '


b = ' tapir '
c = ' albatross '
d = petrel
debemos escribir

a = ' equidna
b = tapir
b = 'albatross
d = ' petrel

'
'
'
'

Con esto ya podremos comparar a, b y c en enunciados if.


Sin embargo, una forma ms fcil de realizar la tarea es con

str2mat. Por ejemplo,

supongamos que las variables de cadena estn dadas por

t1 = 'digitalis'
t2 = 'nicotiana'
t3 = 'basilicum'
t4 = ' lychnis'
t5 = ' chrysantemum'
Entonces, podemos organizar las variables en una sola matriz de cadenas con

s = str2mat ( t1 , t2 , t3 , t4 , t5)
La primera la de s se convierte en t1, la segunda en t2, y as sucesivamente, con
longitudes idnticas porque se aaden espacios en blanco a las cadenas ms
cortas.
1.5 FUNCIONES MATEMATICAS EN SOFTWARE
Al igual que otros lenguajes de programacin, MATLAB tiene numerosas
funciones matemticas, desde las elementales hasta las de alto nivel. Las
funciones elementales pueden agruparse en tres categoras:

(a) Funciones trigonomtricas


(b) Otras funciones elementales
(c) Funciones que realizan tareas
Las funciones matemticas en MATLAB presentan dos notables diferencias
respecto de las de otros lenguajes de programacin como Fortran o C: (1) las
funciones matemticas funcionan con variables complejas sin discriminacin

20

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


alguna y (2) las funciones matemticas funcionan con argumentos vectoriales y
matriciales.
Argumentos complejos: Para ilustrar la forma en que las funciones de
MATLAB trabajan con variables imaginarias o complejas, probemos

cos ( 2 + 3 * i )
donde i es el numero imaginario unitario, equivalente a la raz cuadrada de -1. La
respuesta es

ans =
-4.1896 - 9.l092i
En otro ejemplo, consideremos la funcin arco
coseno, que es el inverso de la funcin coseno
denido por

y = acos(x) = cos1(x)
El comando

acos (0 . 5)
produce

ans=
1.0472
argumento x

acos(x) normalmente esta


limitado al intervalo -1 x -1 (asi es como trabaja
la funcion acos en Frontan). En MATLAB, en
cambio, acos acepta cualquier valor en - < x <
El

de

porque los valores de


no estan limitados a valores reales de hecho si probamos

acos(x)

Acos(3)
entonces

ans=
0 + 1 . 7627 i
Argumentos de arreglo: La mayor parte de las funciones de MATLAB puede
aceptar vectores y matrices como argumentos. Por ejemplo, si

x=
1 2 3
9 8 7
entonces sin (x) producir
ans =
0.8415 0.9093 0.1411
0.4121 0.9894 0.6570
21

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


que es una matriz del mismo tamao que x. El clculo realizado equivale a

Listado 1.18
for i=1 : 2
for j =1 : 3
x(i , j) = sin( x ( i , j))
end
end
Si

es un arreglo de columna o de la,

sin (x)

se convierte en un arreglo de

columna o de la, segn sea el caso.


1.6 FUNCIONES QUE REALIZAN TAREAS
Adems de las funciones que calculan funciones matemticas directas y que
aparecen en la tabla 1.3, hay varias funciones que realizan tareas.
Ordenar: La funcin sort reordena los elementos de un vector en orden
ascendente. Esto resulta til en los casos en que datos en un orden aleatorio
tienen que reacomodarse en orden ascendente. El argumento x puede ser un
vector de la, un vector de columna o una matriz. Si

es una matriz, el

reordenamiento se realizar en cada columna. A continuacin presentamos


algunos ejemplos:

sort( [ 2 1 5 ] )
ans =
1 2 5
sort ( [2 1 , 5)
ans =
l
2
5
Sort ( [ 9 1 5 ; 2 8 4 ] )
ans =
2 1 4
9 8 5
Sumatoria: sum (x) calcula la sumatoria de los elementos de un vector o matriz x.
Para los vectores tanto de la como de columna, sum calcula el total de los
elementos. Si x es una matriz, se calcula la sumatoria de cada columna y se
22

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


devuelve un vector de la formado por las sumatorias de todas las columnas. A
continuacin damos unos cuantos ejemplos

sum ( [ 2 1 5] )
ans=
8
sum( [ 2 1 5} ' )
ans =
8
sum([ 2 1 5 ; 9 8 5 ])
ans =
11 9 10
Mximo y mnimo:

max (x)

encuentra el mximo en el vector

encuentra el mnimo, El argumento


una matriz. Si

min (x)

x puede ser un vector de la o de columna o

es una matriz, la respuesta es un vector de la que contiene el

mximo o mnimo de cada columna de x. (La regla es la misma que para

sort

sum.)
Nmeros aleatorios: Podemos generar nmeros aleatorios con
bsica de la funcin es

rand (n),

donde

rand. La forma

especica el tamao de la matriz de

nmeros aleatorios que debe devolverse. Si

n = 1,

se devuelve un solo nmero

n > 1, se devuelve una matriz n por n de nmeros aleatorios. Si no se


especica otra cosa, los nmeros aleatorios as generados estn en 0 x 1. Si se
invoca rand varias veces seguidas, se genera una secuencia de nmeros
aleatorio; si

aleatorios. El generador de nmeros aleatorios puede inicializarse proporcionando


un nmero que sirva como semilla. La forma bsica de la inicializacin es

rand ( seed ' , k )


donde

es la semilla. Si se utiliza la misma semilla, la secuencia de nmeros

aleatorios es la misma. Por otro lado, si se desea que la secuencia diera


aleatoriamente cada vez que se inicie el generador de nmeros aleatorios, se
deber proporcionar una semilla elegida al azar, que podra ser la hora en
segundos o el nmero que gan el premio mayor en la lotera de la semana,
aunque no es fcil obtener nmeros verdaderamente aleatorios a partir de
fenmenos naturales o la vida diaria (vase el ejemplo 1.1). La semilla debe ser
mayor que r la unidad.

23

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


1.7 CREACION DE UN PROGRAMA EN FORMA DE ARCHIVO
La ejecucin de comandos en una ventana slo es apropiada si no hay que teclear
mucho o si se desea explorar ideas de forma interactiva. Sin embargo, en los
casos en que los comandos ocupan ms de unas cuantas lneas es ms
conveniente que el usuario escriba un archivo M de guin o un archivo M de
funcin, porque los archivos M se pueden guardar en disco y pueden corregirse
tantas veces como sea necesario. El archivo M puede incluir cualquier cosa que el
usuario pueda escribir directamente en la ventana de comandos. Se recomienda a
los principiantes tratar de crear primero archivos M cortos y luego ejecutarlos.
MAC y Windows: Si desea elaborar un archivo M nuevo en Macintosh o
Windows, haga clic en NEW del men File (Archivo) de la parte superior de la
ventana de comandos; aparecer una ventana nueva. Como ejercicio, teclee el
contenido del listado 1.1b, por ejemplo, y gurdelo como archivo M haciendo clic
en SAVE AS del men File. El nombre del archivo puede ser esfera . m. El archivo
puede ejecutarse desde la ventana de comandos tecleando

esfera

como un

comando; incluso puede ejecutarse desde otro archivo M incluyendo esfera en ese
archivo. Otra forma de ejecutar el archivo en Macintosh es hacer clic en SAVE and

GO del men File.


Estacin de trabajo Unix: Abra MATLAB desde el directorio de trabajo donde
se van a guardar los archivos M. Abra adems un editor desde el mismo directorio.
Se puede utilizar cualquier software de edicin, como vi, emacs y jot. Se puede
editar un archivo en la ventana del editor y guardarse sin cerrar la ventana. El
nombre de archivo debe tener la extensin .m en Unix. Cuando est listo para
ejecutar el archivo M que guard, pase a la ventana de MATLAB y ejectelo
tecleando el nombre del archivo sin la extensin. Si es necesario invocar
comandos de Unix desde el entorno de MATLAB, teclee ! seguido del comando de
Unix. Esta es una forma de abrir un editor como vi o emacx.
Eco: Cuando se ejecuta un guin, lo normal es que los enunciados del archivo
M no se exhiban en la pantalla. Sin embargo, si se activa el eco con la orden echo

on, los enunciados se exhibirn. De este modo, el usuario puede ver cul parte del
archivo M se est ejecutando. Para desactivar el eco, teclee echo of f.
Enunciados de comentario: El signo

en un archivo M indica que los

enunciados que siguen al signo en la misma lnea son comentarios y deben


ignorarse durante los clculos. Los comentarios que se aaden as a los archivos
M pueden ayudar a explicar el signicado de las variables y los enunciados.

24

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


Ejemplo 1.1
Los nmeros aleatorios pueden servir para crear juegos. El enunciado
genera un nmero aleatorio entre

x=rand (1)

0 y 1 y asigna ese nmero a x. Consideremos 13

cartas de espadas que se barajaron bien. La probabilidad de escoger una carta en


particular de la pila es de 1/13. Escriba un programa que simule la accin de
escoger una carta de espadas con un nmero aleatorio. El juego debe continuarse
devolviendo la tarjeta a la pila y barajndola otra vez despus de cada juego. i!
Solucin
Puesto que la probabilidad de que un nmero aleatorio est en un intervalo de
tamao dx es igual a dx, supondremos que si el nmero aleatorio est en
(n-1)/13<x<n/13 entonces se sacar la ensima carta; n puede encontrarse
multiplicando x por 13 y 5 redondeando al entero superior ms cercano.
Desde luego, antes de utilizar rand es preciso inicializar la funcin con una semilla.
Si utilizamos la misma semilla, se generar una secuencia idntica de nmeros
aleatorios. Una forma de escoger una semilla es aprovechar el comando clock. Por

c un vector de la de longitud 6. El producto de todos los


nmeros desde el segundo hasta el ltimo, es decir, c (2) *c (3) *c (4) *c (5) *c (6) ,
tiene aproximadamente 3e+7 combinaciones y cambia cada segundo durante todo
ejemplo,

c=clock

asigna a

el ao.
El siguiente archivo M determina una carta cada vez que se ejecuta. El juego se
repite respondiendo a la solicitud con r y termina si se teclea cualquier letra distinta
de r. Este archivo M se guarda con el nombre List1_19 . m, as que puede
ejecutarse desde la ventana de comandos tecleando

List1_19.

Listado 1.19
c=clock;
k=c(2)*c(3)*c(4)*c(5)*c(6);
rand ( ' seed ' , k )
for k=1 : 2 0
n = ceil (13 * rand (1) ) ;
fprintf ( Nmero de carta sacada: % 3.0 f \ n , n)
disp ( )
disp ( ' Teclee r y pulse Return para repetir ')
r = input ( ' o cualquier otra letra para terminar ' , ' s ' );
if r ~= 'r, break, end
25

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


end
1 .8 CM ESCRIBIR FUNCIONES DE USUARIO PROPIAS
Las funciones en MATLAB, que se guardan como archivos M independientes,
equivalen a las subrutinas y funciones de otros lenguajes.
Una funcin que devuelve una sola variable: Consideremos un archivo M de
funcin para la siguiente ecuacin:
( )
Suponiendo que el archivo M se guarda como demof_.m, su guin seria el
siguiente

Listado 1.20
function y = demof_ (x)
y = ( 2 * x. ^ 3 + 7 * x . ^ 2 + 3 * x-1) ./ ( x. ^2 3 * x + 5 * exp (-x) );
Observe que el nombre del archivo M es idntico al nombre de la funcin, que
aparece a la derecha del signo de igual. En el archivo M se utilizan los operadores
aritmticos de arreglos, as que el argumento x puede ser un escalar, un vector o
una matriz. Una vez que se guarda demof_ . m como archivo M, se puede utilizar
desde la ventana de comandos o en otro archivo M. El comando

y = demof_ ( 3)
produce

y=
502 .1384
Si el argumento es una matriz, por ejemplo,

demof_ ( [ 3 , 1 ; 0 , -1 ] )
El resultado tambin es una matriz:

ans =
5 0 2 . 1 3 8 4 -6 8 . 4 9 2 0
-0. 2 0 0 0
0. 0 5 6 8
Funcin que devuelve mltiples variables: Una funcin puede devolver ms
de una variable. Supongamos una funcin que evala la media y la desviacin
estndar de una serie de datos. Para devolver las dos variables utilizamos un
vector en el miembro izquierdo del enunciado de la funcin; por ejemplo,

Listado 1.21
function [media , dvstd] = media_ds (x)
26

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


n=length (x) ;
media = sum(x)/n;
dvstd = sqrt(sum(x.^2)/n media.^2);
Para utilizar esta funcin, el miembro derecho del enunciado de llamada tambin
debe ser un vector. El guin anterior debe guardarse como media__ds. m.
Entonces,

x=[ 1 5 3 4 6 5 8 9 2 4 ];
[ m , d ] = media_ds(x)
produce

m=
4.7000
s=
2 . 3685
Funcin que utiliza otra funcin: El argumento de una funcin puede ser el
nombre de otra funcin. Por ejemplo, supongamos una funcin que evala la
media ponderada de una funcin en tres puntos como
( )
( )
( )
donde ( ) es la funcin que se nombrar en el argumento. El siguiente guin
ilustra una funcin f_av . m que calcula la ecuacin 1.7.2:

Listado 1.22
function mp = f _ av ( nombre _ f , a , b , c )
mp = ( feval ( nombre _ f , a ) + 2 * feval ( nombre _ f , b) ...
+ feval(nombre_f)c))/4;
nombre_f (una variable de cadena) es el nombre de la funcin
( ). Si es la funcin seno, nombre_f ser ' sin . feval (nombre_f, x) es un comando
de MATLAB que evala la funcin llamada nombre_f para el argumento x. Por
ejemplo, y = feval('sin' ,x) equivale a y=sin(x).
En el guin anterior,

Ejemplo 1.2
Evale la ecuacin 1.7.2 para la funcin denida por la ecuacin 1.7.1 con a = 1, b =

2 y c = 3. La ecuacin 1.7.1 se program como demof_.m


1.19.
Solucin

27

Ciencia, pasin y aventura

y se muestra en el listado

Anlisis Numrico y Programacin


Suponemos que

f_av.m

(listado 1.22) se guard como archivo M. Entonces, el

comando

A = f _ av ( ' demof _ ' , 1 , 2 , 3 )


produce

89 . 8976
El nmero de argumentos de entrada y de salida de
formato de la funcin

nombre__f.

feval

debe coincidir con el

Por ejemplo, si la funcin

nombre_f

requiere

cuatro variables de entrada y devuelve tres variables de salida, el enunciado para


llamar a feval sera

[ p , q , s] = feval (nombre_ f , u , v , w , z )
Depuracin de archivos M de funcin: La depuracin de archivos M de funcin es
ms dicil que la de archivos M de guin. Una de las causas es que no es posible
ver los valores de las variables tecleando los nombres de las variables a menos
que se utilicen rdenes de depuracin. El mtodo ms bsico pero ecaz para
crear un archivo M de funcin consiste en convertir en comentario el enunciado de
la funcin en la primera lnea colocando % antes de la palabra function y probar el
archivo M como guin. Cuando haya depurado exhaustivamente el archivo M,
reincorpore el enunciado de la funcin.
El empleo de comandos de depuracin slo se recomienda a usuarios avanzados
de MATLAB.
1.9 CMO GUARDAR Y CARGAR DATOS
Guardar y cargar: Si utiliza save slo, as:

save
matlab . mat. La orden
load es el inverso de save y recupera todas las variables guardadas por save.
Se puede especicar el nombre de archivo colocndolo despus de save; por
todas las variables se guardarn en el archivo por omisin

ejemplo,

save nombre_archivo
guarda todas las variables en el archivo llamado

nombre_archive . mat.

Cuando

quiera recuperar las variables, escriba

load nombre_archivo
Si slo desea guardar ciertas variables, escriba sus nombres despus de
nombre_archivo; por ejemplo,

save nombre_archivo a b c
En este ejemplo, a, b y c se guardan en el archivo llamado nombre_archivo. No
separe nombre_archivo y las variables con una coma. Todas las variables se
28

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


guardan en formato binario de doble precisin. Cuando quiera cargar los datos
contenidos en nombre_arichivo.mat teclee

load nombre_archivo
sin nombres de variables; a continuacin se recuperarn a, b y c.
Guardar y cargar en formato ASCII: Se puede utilizar save para escribir datos
en formato ASCII. Los comandos load y save con la opcin ASCII son importantes
porque permiten exportar datos de MATLAB e importarlos en MATLAB.
Si desea utilizar el formato ASCII, agregue -asciio /ascii despus de los nombres de
las variables; por ejemplo,

save datos. tmp x -ascii


guarda la variable x en ASCII de 8 dgitos en el archivo llamado

datos. tmp.

El

comando save puede guardar ms de una variable; por ejemplo,

x= [ 1 , 2 , 3 , 4]
y = [ -1 , -2 , -3 ]
save dat1.tmp x y -ascii
Si abre el archivo M dat1 . tmp, se ver as:
1 . 0000000e+00 2. 0000000e+00 3 . 0000000e+00 4 . 0000000e+00
-l .0000000e+00
42.0000000e+00
-3 .0000000e+00
El comando load lee un archivo de datos y lo guarda en una variable, pero la carga
de un archivo en formato ASCII no es exactamente el inverso de save en formato
ASCII. La razn es que si bien save en ASCII puede escribir mltiples variables, load
lee todo el archivo de datos y lo coloca en una variable. Adems, el nombre del
archivo se convierte en el nombre de la variable. Por ejemplo, cargamos un
archivo llamado y_dat. e con

load y_dat . e
el contenido se carga en la variable llamada
tanto, el archivo de datos

y_dat

y_dat

sea cual sea la extensin. Por

debe estar slo en uno de los siguientes formatos

de datos:
(1) un solo nmero
(2) un vector de la
(3) un vector de columna
(4) una matriz
Si tiene necesidad de cargar mltiples variables, cada una deber prepararse en
un archivo de datos ASCII individual.

29

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


Los archivos de datos preparados con Fortran o C en formato ASCII (o de texto)
se pueden cargar con load siempre que la estructura de datos tenga una de las
cuatro formas indicadas.

UNIDAD 2: GRAFICAS CON SOFWARE MATEMATICO


Como la mayor parte de las ecuaciones matemticas expresa relaciones
complicadas en una, dos, tres 0 ms dimensiones, tratar de entenderlas sin
grcas es casi lo mismo que tener los ojos vendados. El empleo de grcas es
importante desde la educacin primaria hasta la superior, as como para
ingenieros y cientcos profesionales por la misma razn. En las presentaciones
profesionales, casi lodos los anlisis matemticos, cientcos y de ingeniera se
presentan con grcas.
Durante las ltimas tres dcadas, en las que Fortran domin entre los lenguajes
de computacin, las grcas estuvieron desafortunadamente muy desligadas de
los clculos. Por ello, muchos usuarios de Fortran se vieron obligados a leer los
resultados calculados en forma de listados de nmeros.
Las grcas son ahora una parte natural del entorno de computacin con
MATLAB, y la gracacin de los resultados de los clculos puede efectuarse con
algunos comandos.
Se recomienda a los lectores gracar las funciones matemticas con las que se
tope, as como los resultados de anlisis. Tratar de entender las ecuaciones
matemticas con grcas es una forma agradable y muy eciente de aprender
matemticas. Este captulo se escribi con la intencin de ayudar al lector a hacer
precisamente esto.
Antes de desarrollar el captulo, el lector debe tomar nota de lo siguiente. Algunos
comandos de grcas siguen en vigor incluso despus de haber terminado de
gracar y pueden interferir trabajos posteriores. Es posible que cl comportamiento
de MATLAB se haga impredecible despus de utilizarse algunos comandos como
hold on o subplot, o que se interrumpa abruptamente la ejecucin de un guin.
Se recomienda a los lectores borrar las variables y las ventanas de grcas antes
de iniciar cualquier trabajo de gracacin. Si aun as MATLAB se comporta de
forma extraa, salga por completo de MATLAB y bralo otra vez.

30

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


2.1 GRAFICACION SIMPLE
Gracar: Suponga que desea gracar un conjunto de puntos de datos,
(
)
Es necesario preparar y en forma de arreglo idntica, es
decir, convertirlos en arreglos de la o de columna de la misma longitud. Los datos
se gracan con plot. Por ejemplo,
( )
(
)
, se graca
con el listado 2.1

Listado 2.1

x= 0: 0.05:10;
y = sin(x).*exp (-0. 4*x)
plot (x, y)
31

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


xlabel ('x') ; y1abel(y' )
Tambin se pueden utilizar vectores de columna en los argumentos de

plot, como

se muestra en el siguiente guin:


Listado 2.1

x= (0:0.05:10);
y = sin(x).*exp (-0. 4*x);
plot (x, y)
xlabel ('x') ; y1abel(y' )
Los dos guiones anteriores producen la misma grca, que se muestra en la
gura 2.1. Los rtulos de los ejes se imprimen mediante los comandos xlabel y

ylabel, que se explicarn mayor detalle posteriormente. La gura 2.2 se graca con
el listado 2.3 que conecta una de puntos en un plano complejo.
Listado 2.3

p=0: 0.05: 8*pi;


z=(cos (p) + i*sin (2*p) ) .*exp (-O . O5*p) + 0. Ol*p;
plot (real (z) , imag(z))
xlabel('Re(z)');ylabe1('Im(z)')
Gracacin nicamente con marcas: Los datos pueden gracarse slo con
marcas sin conectados por lneas. Se dispone de cinco tipos de marcas o letras:

Si desea gracar con un solo tipo de marca, coloque el smbolo de la marca como
una cadena despus de las coordenadas en los argumentos de plot. La grca
producida por el listado 2.4 se muestra en la gura 2.3.

32

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


Listado 2.4
x = (0:0.4:l0)';
y=sin(x) .*exp (0 . 4*x);
plot (x,y, ' +')
xlabe1('x'); y1abe1('y')
Si desea gracar una funcin tanto con lneas
como con una marca, grafique dos veces: la
primera con lneas y la segunda slo con marcas. Para gracar de este modo, el
ltimo enunciado del listado 2.4 se cambia a plot (x, y , x, y , + ) . El comando text
sirve para gracar con cualquier marca o letra; sin embargo, la posicin de la
marca puede estar desplazada un poco de la posicin real de punto de datos.
Tipos y colores de lneas: Se dispone de cuatro tipos de lneas:

El tipo de lnea por omisin es el continuo. Si desea gracar con un tipo de lnea
en particular, especique la marca de lnea despus de las coordenadas; por
ejemplo,

plot ( x , y , - -)
Se dispone de los siguientes colores:

33

Ciencia, pasin y aventura

Anlisis Numrico y Programacin

Utilice el smbolo del color igual que los tipos de lnea en el argumento de plot; por
Ejemplo,

plot (x, y, 'g )


Tambin es posible combinar marcas y colores:

plot ( x , y , '+g)
graca los datos con marcas + de color verde.
Graficacin de funciones con fplot: Otra forma de gracar funciones
individuales es con fplot (' nombre_f [xmin, xmax] ), donde nombre es el nombre de
la funcin o del archivo M de funcin que se desea gracar y

xmn y xmax son los

lmites de la grca. El mximo y el mnimo del eje y est determinado por el


mximo y el mnimo reales de la funcin; sin embargo, es posible ajustar los
lmites de la grca con axis, que se explicar en breve.
Borrado de grcas:

clf

borra todo lo que haya en la ventana de grcos,

mientras que cla borra las curvas gracadas y redibuja los ejes.
Funciones implcitas: Si una funcin est en forma implcita, como por
ejemplo
( )
( )
No se puede expresar como en funcin de ni como en funcin de . No
obstante, la curva se puede gracar utilizando contour. En la seccin 2.3
detallaremos este procedimiento.

Eje: El mnimo y el mximo de las coordenadas, las


marcas de escala y los valores de las coordenadas en
las marcas de escala se determinan automticamente.
Sin embargo, es posible modicar la forma del marco y el
mnimo y el mximo de las coordenadas con la orden
axis. Se puede redibujar una gura en forma cuadrada
con

axis ( ' square)


34

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


(vase la gura 2.4). Los ejes de coordenadas y las marcas de escala pueden
omitirse con

axis ( ' of f )
Este efecto se cancela con axis ( ' on ' ) .
El mximo y el mnimo de las coordenadas en la grca se pueden especicar con

axis ( [x_min , x_max , y_mn , y_max] )


Las lneas que se salgan de los lmites se recortarn. Este comando se utiliza
despus de plot para poder modicar el rea de visualizacin tantas veces como
se desee. Se sugiere al lector anexar axis ( [-2 , 6 , -0 .7 , 0 .71 ) al listado 2.4 para ver
cmo axis lmita las fronteras de la gura.
Retcula: Se puede agregar una retcula a la grca con

grid on. Por otro lado,

grid off elimina la retcula. El empleo de grid por s solo activa y desactiva la retcula
alternadamente. El siguiente guin es un ejemplo del empleo de grid on:
Listado 2.5
X = (0:0.2:10)';
y=sin(x) .*exp(O.4*x);
plot (x, y)
grid on
xlabel ('x' ) , ylabel ( y )
(Vase la gura 2.5 producida por el listado 2.5.)
Grcas polares: Podemos gracar una funcin en coordenadas polares con
polar. La gura 2.6 se graca con el listado 2.6.

Listado 2.6
t = 0: .05:pi+.01;
y = sin (3*t) .*exp (0 . 3*t:);
polar (t , y)
title(Grfica polar) y
35

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


gr id
Grcas logartmicas y semi logartmicas: Las funciones pueden gracarse
en una escala log-log con loglog. (Vase el listado 2.7 y la gura 2.7.)

Listado 2.7
t= .1 : .1 :3 ;
x= exp(t);
y= exp(t.*sinh(t)) ;
loglog (x,y)
grid
xlabel (x); ylabel (y)
El listado 2.8 produce una grfica semilogaritmica con

en la escala logartmica

Listado 2.8
t = . 1: . 1 : 3;
semilogy (t, exp(t.*t))
grid
xlabel(' t ); ylabel ( 'exp(t. *t) ' );
De forma similar, el listado 2.9 produce una grca semilogartmica con
escala logartmica.

en la

Listado 2.9
t=.1:.lz3;
semilogx (t, exp (t . *t:))
gr i d
xlabel(t') ; ylabel('exp(t.*t)');
Mltiples curvas: Si quiere gracar dos o ms curvas con una sola orden plot,
escriba todos los conjuntos de coordenadas repetidamente en la orden plot:

Listado 2.10
x = 0 : O . O5 : 5 ;
36

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


Y = sin (X) i
z = cos (x) ;
p1ot(x,y, x, z)
Se escogern automticamente tipos o colores de lnea distintos para cada curva.
No obstante puede especicarse el color o el tipo de lnea, o la marca, despus de
cada par de coordenadas; Por ejemplo,

plot:(x,y, '- -' , x,z, '*')


plot(x,y ' : ' , x,z, '*g')
plot(x.y. r , x,z. 'y)
Los dos listados siguientes ilustran otra forma de gracar mltiples curvas con un
solo comando plot:

Listado 2.11
x = 0 : 0 . 05 : 5;
y(1, : ) = sin(x);
y(2, :) = cos(x);
plot (x, y)
Listado 2.12
x = (0:0.05:5) ';
y( : , l) = sin(x);
y( : , 2) = cos(x);
plot (x , y)
Retencin: Hasta aqu hemos gracado todas las curvas en una sola
operacin con un solo comando plot. Sin
embargo, a menudo resulta deseable agregar
una curva a una grca que ya se traz. Esta
gracacin adicional puede realizarse con el
comando hold on (vase la gura 2.8).

37

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


Listado 2.13
X = 0 : 0 . 05 : 5;
y = sin (x) ;
plot (x , y) ;
hold on
z = cos (x) ;
plot(x , z , '- - )
xlabel (x ); ylabel ('y(-) , z (- -) ');

Figura 2.8 dos curvas graficadas con hold on


(listado 2.13)

hold on, la grca permanece en la pantalla incluso si


se ejecuta otro guin; por tanto, lo prudente es colocar un comando hold of f tanto
Una vez emitido el comando

al principio como al nal del guin; por ejemplo,

Listado 2.14
Clear ; clf ; hold off
x = 0 : 0 . 05 : 5;
y = sin (x) ;
plot (x. y)
hold on
z = cos (X)
plot: (x, z)
hold off
Cuando se gracan varias curvas con

hold on,

es recomendable especicar

mnimos y mximos de las coordenadas en el dominio grfico con el comando axis;


de lo contrario, los lmites se determinarn por omisin con base en la primera
curva, cosa que podra causar recortes de las dems curvas.
El comando

hold on

tambin resulta muy importante cuando se est preparando

una grca que tarda mucho en dibujarse, por la siguiente razn: los comandos
para cambiar parmetros de las guras, como los ejes, el mapa de color, los

38

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


ngulos de perspectiva, el eje de color y otros, se pueden modicar despus de
haber gracado una gura.
2.2 CONTORNO DE FUNCIONES BIDIMENSIONALES
Malla: Se puede denir una funcin bidimensional z = z(x,y) con puntos
discretos mediante
(
)
donde
,y
, son puntos en los ejes y en orden
ascendente. Las intersecciones constituyen una retcula cartesiana. Como
ilustracin, consideremos la retcula denida por
(
(

)
)

y valores funcionales denidos por


(

La funcin anterior se grac en la gura 2.13 con el listado 2.18.

Listado 2.18
clear, cl f
xa = -2 : . 2 : 2 ;
ya = -2 : . 2 : 2 ;
[x,y] = meshgrid (xa,ya);
z = x .* exp(-x. ^ 2 - y. ^ 2);
mesh (x , y , z)
title ( sta es una gIfica 3D de z =
x * exp (x2 - y"2) ')
xlabel ('x' ); ylabel ( y ); zlabel ( ' z);
meshgrid para crear arreglos bidimensionales, y ,
donde x es un arreglo de las coordenadas de la retcula y y es un arreglo de las
coordenadas . Estos arreglos x y y sirven para calcular el arreglo bidimensional z.
En el listado 2. 1 8 utilizamos

39

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


Es muy importante darse cuenta de la correspondencia que existe entre los
arreglos bidimensionales, x, y y z, y
, respectivamente. El hecho es que

x (j , i) , y (j , i) y z (j , i)

corresponden

, respectivamente. Dicho de otro

modo, el primer ndice de x, y y z cambia en la direccin y, en tanto que el segundo


ndice cambia en la direccin .
Es preciso respetar esta regla si se calculan los elementos de

z (j , i) con ciclos for

/end.
El comando
de

mesh del guin anterior puede sustituirse por mesh (z) . El primer ndice

cambia en la direccin , mientras que el segundo lo hace en la direccin .

Contorno: Podemos utilizar contorno para gracar el contorno de una funcin


en un arreglo bidimensional. La sintaxis bsica es

contour (x, y, z , nivel)


Aqu,

z es el arreglo bidimensional de la funcin; x y y son, respectivamente, las

coordenadas y en arreglos bidimensionales, y nivel es un vector que contiene


los niveles de contorno. Las coordenadas x y y tambin pueden ser arreglos
unidimensionales, pero aqu tambin se aplica la regla antes mencionada respecto
de los ndices de z; es decir, el primer ndice de z cambia en la direccin de y,
mientras que el segundo ndice lo hace en la direccin de x. Si la retcula est
equiespaciada, una forma ms sencilla es

contour ( z) , En este caso, el primero y

el segundo ndices cambian en las direcciones y , respectivamente. Adems,


puede sustituirse nivel por un entero, m, que se interpretar como el nmero de
niveles de contorno. Estos niveles se determinan dividiendo los valores mnimo y
mximo de z en m-1 intervalos.
La gura 2.14 muestra una grca de contorno
producida por el listado 2.19, en la que la funcin
gracada est denida por la ecuacin 2.3.1 y es
la misma de la gura 2.13. Los valores de los
contemos de la gura se rotularon con clabel (h ,

manual )

, que permite al usuario indicar la

posicin de los nmeros con el ratn. Los niveles

40

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


de contorno pueden rotularse automticamente con

clabel ( h) .

Listado 2.19
clear , clc, clf, axis ( ' squane)
xm=-2: .2:2; ym=2: .2:2;
[x, y] = meshgrid (xm, ym);
z = x .* exp(-x.2 - y."2);
zmax=max(max(z) ); Zmin=min(min (z) ) ;
dz = (Zmax-zmin) /10;
nivel = zmin + O . 5*dz: dz: zmax;
h=contour (x, y, z , nivel); clabel (h, manual )
title(Grfica de contorno hecha con contou1(x,y, z,nivel) )
xlabel ('x' ); ylabel (y)

El comando contour puede servir para gracar una funcin implcita como
( )
( )
Para gracar la curva, reescribimos la_ ecuacin as:
(
)
( )
( )
y gracamos el contorno de un solo nivel que corresponde a f = 0 (vase la gura
2.15). El siguiente guin ilustra el procedimiento de gracacin:

Listado 2.20
clear , clf
41

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


xm = 3:0.2:3; ym = 2:0.2:1;
lx, y] = meshgi: id (xm, yrn);
f = y. 3 + exp(y) e tanh(x);
contour (x,y, f, [t], 0])
xlabel ('x' ); ylabel ('y')
Observe que en el guin anterior el vector

[0 , 0] en los argumentos de contour sirve

para especicar el nivel del contorno. El nico


contorno que nos interesa es el del nivel 0, pero los
niveles de contorno deben estar en forma de
vector, por lo que repetimos el cero.
Grca vectorial: En ocasiones, las
cantidades correspondientes a los puntos
de una retcula se dan en forma
vectorial. Por ejemplo, la
distribucin
de
velocidades e n un
ujo
de
uido
bidimensional se pueden expresar mediante vectores de velocidad en los puntos
de la retcula. Los vectores en esos puntos pueden gracarse con quiver y
requieren dos componentes, uno para la direccin x y otro para la direccin y.
Suponga que estos componentes estn dados por u y v, que son matrices del
mismo tamao que x y y. Entonces, los vectores se gracarn con

quiver (x,y,u,v, s)
s

donde

es un factor de escala que es un parmetro del usuario para ajustar la

longitud de los vectores. La gura 2.16 ilustra el trazado de los vectores de


velocidad en un problema de ujo tpico (llamado ujo de cavidad con impulso). La
figura muestra tambin curvas de las lneas de flujo hechas con contour. El
siguiente guin ilustra las partes esenciales del guion para gracar la gura 2.16.

% (Se omiti la parte anterior del guin en la que se


% calculan x, y, s, u y v.)
42

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


clf
L= [-0 . 00577 z-D . 00577 z-O . O54 I 0, O . 0001, O. 00005) ;
c=contour (x, y, s, L); % s=funcin de flujo
clabel (c)
title ( ' funcin de flujo Re=4OO (retcula 51x51) ')
xlabel ( direccin x)
ylabel ( ' direccin y)
axis ( square)
hold on
% u y v constituyen un vector.
quiver (x(1:2:ni,1:2,ni) , y(1:2:ni,1:2,ni) , ..
u(1:2:ni,1:2,ni) , v(l:2:ni,1:2,ni) , 4)
En el listado anterior, suponemos que x, y, u y v se calcularon en una parte anterior
del guin que no se muestra aqu.
2.4 RETCULA TRIANGULAR Y CONTORNOS
Una retcula triangular consta de elementos triangulares y su uso ms comn es
en el anlisis de elementos nitos o de volmenes nitos.
Gracacin de una retcula triangular: Necesitamos los dos archivos de
datos llamados cell_da y point_da para trazar una retcula triangular. El primer
archivo incluye los datos de los elementos triangulares, y el segundo, las
coordenadas de los puntos nodales. (En FM 2-1 de la pgina 76 se explican con
mayor detalle los archivos.) Cuando se ejecuta el listado 2.21, aparecen dos
preguntas. La primera se reere a si se desea numerar o no los elementos; teclee l
si desea hacerlo o 0 si no. La segunda pregunta se reere a si se desea numerar o
no los puntos; acepte con 1 o niguese con 0. La primera parte de la gura 2.17
muestra la retcula trazada.

Listado 2.21
% trazado de retcula triangular
cleaR: , clf
load cell_da
43

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


load point_da
tri_grid(cell_da, point_da, 1.8)
Grfica de contorno en una retcula triangular: Si tenemos una funcin
discreta denida en los puntos nodales de una retcula triangular, podemos trazar
su contomo con tri_cont de FM 2-2 (pgina 79). Para ejecutar este guin
necesitamos dos archivos de datos, cell_da y point_da (los mismos que usamos
en m i_cont), y un archivo de funcin adicional, f_da. La segunda parte de la gura
2.17 ilustra la grca de contorno producida por el listado 2.22 empleando tri_cont.

Listado 2.22
% Grfica de contorno en una retcula t]: iangular
clear , clf
load cell_da
load point_da
load f__da
tri_cont (cell_da , point_da , f_da , l . 8)
RETCULA CURVILNEA Y CONTORNOS
Suponga que los valores funcionales de
(
) estn dados en los puntos de una
retcula,
(
) Por
(

donde
son
ndices de puntos. El sistema de retcula es
una retcula cartesiana si sus lneas son
paralelas a los ejes de las coordenadas
cartesianas. Por otro lado, si la geometra
en cuestin es compleja podemos utilizar
puntos de retcula ajustados a fronteras
curvas, como se ilustra en la gura 2.18.

44

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


Una retcula as se denomina

La retcula curvilnea y el contorno de

se pueden trazar con

(pgina 81). Su sintaxis es:

g_cont (x, y, f , nivel)


donde

x, y: las coordenadas de los puntos de la retcula.


f: arreglo bidimensional de los valores funcionales.
nivel: niveles del contorno en forma vectorial.
Como demostracin, el lector podra ejecutar el siguiente guin:

Listado 2.23
clear , clf
[x, y, f] = tcLdata;
f_max = max (max (f) )
f_1nin = min (min ( f) )
kmax = 2 0;
fOI k=l : kmax
ELV (k) = (k-l) /kmax* (f_maxef_min) *0 9999 + f_min;
end
g_cont (x, y, f, ELV)
O %Para responde: automticamente a la pregunta que hace
45

Ciencia, pasin y aventura

g_cont de F M 2.3

Anlisis Numrico y Programacin


g_cont
1 % dem
axis ( [-10, 15, -15, 10])
axis ( ' square)
axi s ( of f ' )
En el guin anterior,

td_data

es un archivo M de

funcin que est en FM 2.3 y que genera la reticula


y la funcin de ejemplo para nes de demostracin.
La grca de contorno trazada por listado 2.23 se
muestra en la gura 2.19. Los datos f generados
por cd_data se pueden graficar con mesh como se

surf, que se explica


en la seccin 2.6 pero no es posible utilizar contour
muestra en la gura 2.20 o con

Figura 2.19 ejemplo de una


grfica de contorno

porque la retcula no es rectangular.


2.4 GRAFICACIN DE MALLA Y DE SUPERFICIES

En esta seccin, estudiaremos los grcos tridimensionales, que se han mejorado


notablemente en la nueva edicin para estudiantes y en las ltimas versiones
profesionales de MATLAB. que ya presentamos a mesh, aqu lo veremos con
mayor detalle.
Grfica de malla de una matriz: La aplicacin ms sencilla de los grcos
tridimensionales es la graficacin de una matriz. Consideremos una matriz de
por . El elemento z(j, i) se considera el valor funcional en
y
en el
plano bidimensional. Denimos una matriz de muestra con

Listado 2.24
clear: , c l f
for i=1 : 4 % corresponde a la direccin
for j=1 :7 % corresponde a la direccin y
z(j,i) = sqrt(i"2 + j2);
end
46

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


end
mesh (z)
xlabel ( ' i ' )
ylabel ( ' j ' )
zlabel ( ' z ' )
Entonces,

mesh (z)
produce la grca de malla que se muestra en la gura 2.21.
Color por omisin: En una pantalla a color, las lneas que conectan los
puntos se colorean con el mapa de color por omisin hsv (iniciales en ingls de
matriz, saturacin, valor). Se asigna rojo a los valores tanto mximo como mnimo
de
z (i, j ) . Entre el mnimo el mximo, el mximo el color se determina
linealmente en el orden rojo, amarillo, verde, turquesa, azul, magenta, rojo.
2.5 GRFICOS INTERACTIVOS
El elemento fundamental de los grcos interactivos es la capacidad de un
programa para leer las coordenadas del apuntador del ratn en cualquier posicin.
Esto puede hacerse con ginput en uno de los siguientes formatos:

[x.y1 = ginput
[x,y,botn] = gnput
[x,y,botn] = ginput (n)
suponga que se hace clic con el ratn en cierto lugar dentro de una pantalla de
grcos. Entonces, [x , y] = ginput acumular un nmero ilimitado de puntos hasta
que se pulse la tecla return (intro), as que x y y se convertirn en vectores de
longitud igual al nmero de puntos acumulados. [x , y , botn] = ginput es lo mismo
excepto que tambin se registran los nmeros de botn del ratn. Los nmeros de
botn son l, 2 y 3, contando a partir del lado izquierdo del ratn. [x , y , botn] =

ginput (n) acumula n puntos, pero puede suspenderse pulsando la tecla retum.
El listado 2.31 ilustra el empleo de

ginput.

Cuando se ejecuta este listado, el

programa espera hasta que se hace clic con el ratn. Si se hace clic con el botn
izquierdo, se imprimir una marca + roja en la posicin del apuntador. De forma

47

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


similar, si se acciona el botn del medio o el derecho, se imprimir una marca o
amarilla o una marca * verde, respectivamente. La ejecucin termina si se hace
clic con el ratn cuando el cursor est dentro del cuadro en la esquina inferior
izquierda de la pantalla. La gura 2.35 ilustra las marcas gracadas con el listado
2.31.

Listado 2.31
clear: , clf , hold off
axis( [0, 10, 0, 10] )
hold on
plot([l.2.Z.l.1] , [2.2.3,3,2])
text (1, 1 .6 , Haga clic dentro del cuadro para terminar )
while 1
[x , y , boton] = ginput (l)
if boton=1, plot: (x,y, ' +x ' ) , end
if boton=2 , plot (x,y, ' oy ) , end
if boton=3 , plot: (x, y , *g) , end
if x>1 S x<2 & y>2 & y<3, bzealqend
end
hold off
UNIDAD 3: ALGEBRA LINEAL
En MATLAB, las matrices, los vectores de columna y los vectores de la se
introducen siguien las mismas reglas que los arreglos, mismas que se explicaron
en el captulo 1. Por ejemplo, lama

B= [

se introduce en MATLAB con

b= (1, 6; 5, 2);

48

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


Un vector de columna o de la se puede denir como una matriz de una columna o
una la, respectivamente; por ejemplo,

c = *1 , 2+ ; (vector de la)
d = [1 ; 7] ; (vector de columna)
Podemos transponer una matriz en MATLAB colocando un apstrofo despus de
la matriz; por ejemplo, con

e=b'
la matriz e se convierte en la transpuesta de la matriz b. Una matriz identidad de m
por m se genera con

s = eye (m)
De forma similar, una matriz nula de m por m es

s = zeros (m)
Una matriz nula de m por n se genera con

s = zeros (m, n)

. Escribimos una matriz

de m por n que consiste slo en la unidad as:

w = ones (m , n)
Si a es una matriz que ya existe,

zeros (size (a) )

ones (size (a) )

producen,

respectivamente, la matriz nula y la matriz unidad del mismo tamao que a.


Generamos una matriz aleatoria m por n con rand (m, n) (la seccin 1.5 contiene
mayores detalles sobre los nmeros aleatorios). Una matriz especial, llamada
matriz de Hlbert, se genera con hilb (m) (vase el emplo 3.6). La multiplicacin de
matrices en MATLAB se expresa con el operador de multiplicacin;
por ejemplo,

b= [12; 43; O2];


d = [5 ; 1] ;
9 = b*d .
produce

g=
7
23
2
que corresponde al inciso (a) del ejemplo 3.2. La suma y la resta de matrices es
igual que en el de arreglos bidimensionales.

49

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


MATRIZ INVERSA
Ahora que aprendimos a multiplicar matrices tanto mediante clculos manuales
como con MATLAB, podemos estudiar el concepto de matrices inversas. Cuando
dos matrices cuadradas A y B satisfacen

AB=IoBA=1
donde I es la matriz identidad, A y B estn en la relacin inversa; es decir, A es el
inverso de B y B es el inverso de A. Por ejemplo,
A=[

B=[

estn en la relacin inversa entre si, es decir


]

AB=[

= [

La inversa de una matriz M se escribe M ; por tanto, la relacin anterior entre A y


B puede escribirse como A =
y B =
. As, la ecuacin 3.3.1 se puede
escribir como
=1y
=1
Slo las matrices cuadradas tienen inversos.
El inverso de un producto de matrices es igual al producto del inverso de las
matrices en el orden inverso. Por ejemplo, si W = ABC..G, donde A, B, G son
matrices cuadradas, entonces

En MATLAB, el inverso de M se calcula con inv (M) . Por ejemplo, sea

A = [1 6 ; 5 2] ,
entonces,

B = inv (A)
produce

50

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


]

B =[

Para asegurarse de que B es el inverso de A, calculamos tanto AB como BA como


sigue:

A*B
ans =
[

B *A
ans =
[
El comando

inv calcula el inverso de cualquier matriz cuadrada excepto cuando es

singular. Si MATLAB se niega a calcular el inverso, sabremos que la matriz es


singular. No obstante, merece la pena aprender a crear un ejemplo de matriz
singular. En una matriz singular, al menos una la (o columna) puede expresarse
restando o sumando otras las (o columnas); por tanto, para crear una matriz
singular de 3 por 3, escribimos la primera y la segunda las eligiendo nmeros
arbitrarios, pero escribimos la tercera la como la primera la multiplicada por una
constante ms la segunda la multiplicada por otra constante. El resultado - es
una matriz singular. Si ninguna la (o columna) puede expresarse sumando o
restando otras las (o columnas), todas las las (o columnas) son linealmente
independientes y la matriz no es singular.

3.2 ECUACIONES LINEALES


Consideremos un conjunto de m ecuaciones con n incgnitas dado por

A1.1x1 +a1,2x2+a1,3x3++a1nxn=y1
A2,1x1 +a2,2x2+a2,3x3+a2,nxn=y2
Am,1x1+am,2x2+am,3x3+am,nxn=ym
51

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


donde
son coecientes conocidos, son incgnitas
y; son trminos
conocidos que se denominan trminos no homogneos (o trminos fuente). " Las
ecuaciones lineales anteriores se pueden expresar de forma compacta como
Donde ,

estn denidos, respectivamente, por

A =[

X=[

y=[

La ecuacin 3.4.2 tambin puede expresarse en la forma


= donde A es una
matriz de n por m y x y y son vectores de la. Las ecuaciones lineales
expresadas por la ecuacin 3.4.2 se pueden agrupar en los siguientes tres casos:
Caso l: m = n .
Caso 2: m<n (ecuacin subdeterminada)
Caso 3: m>n (ecuacin sobredeterminada)
El caso l es el ms comn, con el nmero de ecuaciones igual al nmero de
incgnitas. En el caso 2, el nmero de ecuaciones es menor que el de incgnitas y
tenemos lo que se conoce como problema sub determinado. En el caso 3, el
nmero de ecuaciones es mayor que el nmero de incgnitas y tenemos un
problema sobre determinado. Esto ocurre en el ajuste de curvas y lo veremos en
el captulo 8. En el caso l, la matriz es cuadrada. Para obtener la solucin en
MATLAB, escribimos

x = A\y
Un mecanismo equivalente es

x = inv (A) *y
Sin embargo, el primer mtodo es ms eciente desde el punto de vista
computacional (el tiempo de cmputo del segundo mtodo en MATLAB es
aproximadamente 50% ms largo que para el primero).
Si la ecuacin se escribe en la forma de la ecuacin 3.4.3, la solucin se obtiene
en MATLAB con

52

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


z = y /A'
donde y es un vector de la y z tambin se convierte en un vector de la. Las
siguientes expresiones producen el mismo resultado:

inv (A) *y
A ^ ( -1 ) *y
y ' * inv (A ' )
Los resultados de las primeras dos estn en forma de vector de columna, mientras
que el de la ltima est en forma de vector de la.
Ejemplo 3.4
Utilice MATLAB para obtener la solucin de

Donde
]

A=[

, Y=[

Solucin
Sea

A = [ 3 2 ; 1 -1 ] ;
Y = [-1 , 1] ';
Entonces,

x = A\y
produce

x=
0 . 2 000
-0 . 8 000
Tambin, si escribimos

z=y'/A'
Obtendremos la misma respuesta en forma de vector de la como

z=
53

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


0 . 2000

-0 . 8000

3.3 DETERMINANTES
El determinante es una cantidad importante asociada a una matriz cuadrada. De
hecho, no podemos obtener una solucin nica de un conjunto no homogneo de
ecuaciones lineales si el determinante de la matriz de coecientes es cero. Esto se
debe a que, si por lo menos una ecuacin de un conjunto de ecuaciones lineales
no es linealmente independiente, el determinante es cero. Si el valor del
determinante es extremadamente pequeo o grande, es seal de que hay errores
graves en la solucin de las ecuaciones. El determinante de una matriz tambin
desempea un papel importante cuando se calculan los valores propios de una
matriz.
El determinante de la matriz A se denota por det(A) o

lAl. En el caso de una matriz

de 2 x 2, el determinante de A se calcula como:


( )

(3.61)

Para una matriz de 3 x 3, el determinante es


( )

(3.62)

Es fcil memorizar la regla para una matriz de 3 por 3 como la regla del espagueti.
En la gura 3.3, cada una de las tres lneas continuas conecta tres nmeros. Los
productos a lo largo de las lneas continuas tienen signo positivo en la ecuacin
3.6.2. Los productos de los tres nmeros a lo largo de las lneas punteadas tienen
signo negativo en la ecuacin 3.6.2. Sin embargo, la regla del espagueti no puede
extenderse a una matriz dc 4 por 4 o mayor.
Una denicin formal del determinante
de una matriz A de orden n est dada
por
( ) (
)( )

(3.63)

donde la sumatoria abarca todas las permutaciones del primer subndice de a, y


( ) es + si y la permutacin es par y si es impar
Si la matriz es una matriz triangular inferior 0 superior, 0 una matriz diagonal, el
clculo de la ecuacin 3.6.3 se simplica mucho. La matriz triangular inferior es

54

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


una matriz en la que todos los elementos que estn arriba de la lnea diagonal son
cero. La matriz triangular superior es aquella en la que todos los elementos que
estn abajo de los pivotes son cero.
La matriz diagonal es un caso especial de la matriz triangular superior o inferior.
Para estas matrices, la ecuacin 3.6.3 se reduce a
( )
es decir, el determinante es igual al producto de todos los pivotes. Por ejemplo,

Si una matriz se expresa como un producto de matrices, digamos M = ABC...K, el


detenninante de M es igual al producto de los determinantes de las matrices, o
sea:
( )
( )
( )
( )
( )
Por tanto, cuando es necesario evaluar el determinante de una matriz es comn
transformar la matriz en un producto de las matrices para las cuales la evaluacin
del detemrinante es fcil.
Por ejemplo, si una matriz
se descompone en el producto de
, donde L es
una matriz triangular inferior y es una matriz triangular superior,
( ) es igual
a
( ) ( ).
Otra alternativa para calcular el determinante de una matriz consiste en utilizar la
eliminacin hacia adelante del mtodo de Gauss.
Si queremos calcular un determinante en MATLAB utilizamos
( ) , donde A es
una matriz cuadrada. La siguiente ilustracin muestra el clculo del determinante
de una matriz de 3 por 3:

A =[3 , 4 , 1; 0 , 2 , 7; 5 , 1 , 2];
d = det (A)
d=
163
3.4 ELIMINACION DE GAUSS-JORDAN
La eliminacin de GaussJordan es una variacin de la eliminacin de Gauss
mediante la cual se eliminan los nmeros que estn arriba y abajo de un pivote sin
distinguir la eliminacin hacia adelante de la sustitucin hacia atrs. No obstante,

55

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


el pivoteo sigue siendo necesario por la misma razn que lo es en la eliminacin
de Gauss.
En la presente seccin ilustraremos primero la resolucin de una ecuacin lineal
por eliminacin de Gauss-Jordan y luego aplicaremos este mtodo a la inversin
de una matriz.
Una ventaja de la eliminacin de Gauss-Jordan es que la explicacin del algoritmo
para calcular el inverso de una matriz se simplica.
Ejemplo 3.10
Resuelva el mismo problema del ejemplo 3.8 por eliminacin de Gauss-Jordan.
Solucin
Comenzamos con la misma matriz aumentada que en el ejemplo 3,8. El
procedimiento para el primer pivoteo es el mismo que se sigui en ese ejemplo,
pero ahora despus del primer pivoteo se normaliza la primera la dividindola
entre el pivote:

a=
1.0000 -2.7857 0.5714 1.7857
-0.0400 0.0400 0.1200 3.0000
-0.2400 1.2400 0.2800
0
A continuacin se eliminan todos los elementos que estn debajo del primer pivote
restando (o sumando) un mltiplo de la primera la:

a=
1.0000 -2.7857 0.5714 1.7857
0 0.0714 0.1429 3.0714
0 0.5714 0.1429 0.4286
El segundo pivote se compara con los elementos que estn abajo. Puesto que la
magnitud del segundo pivote es menor que la del elemento que est abajo, es
necesario pivotear. Luego, la segunda la se divide entre su propio pivote:

a=
1.0000 2.7857 0.57l4 1.7857
0 1.0000 0.2500 0.7500
0 -0.07l4 0.1429 3.0714
Todos los elementos que estn arriba y abajo del segundo pivote se eliminan
restando (o sumando) un mltiplo de la segunda la:

a=
l.0000
0
0

0
1.0000
0

40.1250
-0.2500
0.1250

3.8750
0.7500
3.1250

La tercera la se normaliza dividindola entre su propio pivote:

56

Ciencia, pasin y aventura

Anlisis Numrico y Programacin


a=
1.0000
0
0

0
1.0000
0

-0.1250 3.8750
40.2500 0.7500
1.0000 25.0000

Los elementos que estn arriba del tercer pivote se eliminan restando (o sumando)
la tercera la multiplicada por el nmero que se va a eliminar. Ahora, la matriz
aumentada es

a=
1.0000
0
0

0
0
1.0000
0
0 1.0000

7.0000
7.0000
25.0000

Aqu, las primeras tres columnas forman una matriz identidad, mientras que la
ltima columna es la solucin.

57

Ciencia, pasin y aventura

You might also like