Anda di halaman 1dari 29

pg.

Asignatura: Seales y sistemas discretos.


Tema: Tutorial de Matlab.

El siguiente es un tutorial de los comandos de MATLAB.

1.1.1 Antes de iniciar los clculos


En Windows, pulse sobre el men Inicio y dentro de Programas busque la carpeta Matlab y
ejecute el programa MATLAB. El procedimiento para salir de MATLAB es similar al que se sigue
para salir de cualquier otra aplicacin en Windows.

Nota: Matlab distingue entre maysculas y minsculas, tanto para los nombres de variables como
para los comandos.

Ayuda: si no entiende bien el significado de un comando, teclee help y el nombre del


comando en cuestin. El comando help 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.

help 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.

HELP FUN presenta la ayuda para la funcin FUN.

T = HELP('tpico') retorna el texto de ayuda en una cadena de caracteres separada por '\n'.

LOOKFOR XYZ busca la cadena XYZ en la primera lnea de comentario


pg. 2
del texto de HELP de todos los archivos M que se encuentren en
MATLABPATH. Para todos los archivos en los que se encuentre
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.

Vase tambin LOOKFOR, WHAT, WHICH, DIR, MORE.

Versin: Lo primero que el usuario debe saber acerca del software de MATLAB es qu
versin est usando. Para obtener esta informacin, teclee version.

Qu: El comando what produce una lista de los archivos M-, MAT- y MEX- presentes en el
directorio de trabajo actual1. El comando what nombredirectorio lista los archivos del
directorio nombredirectorio en el matlabpath. No es necesario especificar 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
toolbox/matlab/general.

Quin: El comando who produce una lista de las variables del espacio de trabajo actual; whos
exhibe Informacin adicional acerca de cada variable; who global y whos global listan
las variables del espacio de trabajo global.

Reloj: El comando clock exhibe nmeros como

ans =
l.0e+03 *
1.9970 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 significado:

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

Se puede exhibir la misma informacin en formato entero con fix(clock) . La respuesta es

ans =
1997 3 5 15 19 56

lo que indica que la fecha fue el ao 1997, 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_0=clock
antes de que se inicie un clculo y t_1=clock cuando se haya completado; entonces, t_1 -
t_0 nos dar el tiempo transcurrido durante el clculo. Tambin podemos usar tic y toc para
medir el tiempo transcurrido.
El comando date proporciona informacin similar, pero en un formato ms breve:

1
Archivo M: un archivo de guin o funcin (su formato es nombrearchivo.m)
Archivo MAT: un archivo que contiene datos binarios (su formato es nombrearchivo.mat)
Archivo MEX: un archivo MATLAB ejecutable compilado a partir de Fortran o C (su formato es
nombrearchivo.mex)
pg. 3

ans =
5-Mar-97

Camino: El comando 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 ruta. El comando path (pl,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.

Obtener entorno: El comando getenv(PATH) muestra las rutas de MATLAB


vigentes (se usan comillas simples).

Diario: El comando diary on 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 especificar 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 solo
alternar entre diary on y 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 forma 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 grfico o de
comunicaciones, puede echar a perder el entorno de computacin.

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.1.2 Cmo iniciar los clculos

Clculos con una sola variable: Cuando se abre una ventana de comandos, aparece la indicacin
EDU>> (en la versin estudiantil y >> en la versin profesional) 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:

4
Volumen =
3
r 3 , con r =2

Los comandos que debemos teclear son:


pg. 4

Listado 1.1a
r = 2;
vol = (4/3)*pi*r^3;

donde pi = en MATLAB. Cada lnea se teclea adelante de la indicacin EDU>> y se oprime la


tecla return (o intro o Enter) al final de la lnea. Observe que en el guin anterior cada lnea es un
comando y termina con un signo de punto y coma. El circunflejo ^ 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 vol y pulsar return. La computadora
exhibir

vol =
33.510

Otra forma de imprimir el valor de vol es omitir el signo de punto y coma al final 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.
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 MATLAB, la marca de continuacin es ...
y se coloca al final de la lnea que se desea continuar; por ejemplo,

Listado 1.2
r = 2;
vol = (4/3)*3.14159 ...
*r^3;
la indicacin EDU> 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 C, y son respectivamente, ms,
menos, multiplicar y dividir. MATLAB emplea un operador no tradicional, \, que puede llamarse
pg. 5

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 utilizar este operador en clculos ordinarios, pero adquiere importancia cuando
se trata de 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^3;
end

Obsrvese tambin que al escribir los comandos anteriores la indicacin EDU> no aparece
sino hasta despus de teclearse end. Si el enunciado matemtico requiere un igual despus de if,
utilice == para indicar igualdad de 2 trminos, como en el lenguaje C; por ejemplo,

Listado 1.4
r = 2;
if r==2, vol = (4/3)*pi*r^3
end

El operador diferente de se escribe ~=; 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 & y |, respectivamente. Por ejemplo, la
ecuacin condicional

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


se escribe

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


pg. 6

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 | se pueden utilizar agrupados; por ejemplo,

if ((a==2 | b==3) & c<5) g=1; end

El enunciado if se puede utilizar con else o elseif; por ejemplo,

Listado 1.6
r=2;
if r > 3 b=1;
elseif r==3 b=2;
else b=0;
end

Desde luego, elseif puede repetirse tantas veces como se desee; sin embargo, hay ocasiones en
que el uso de e1se y e1seif tiene sus desventajas, sobre todo cuando las variables que siguen al
enunciado elseif incluyen variables de arreglo de diferentes tamaos. Si los enunciados elseif
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 especificar un nombre de variable; as, puede servir para exhibir mensajes o
datos en la pantalla. Por ejemplo, tanto disp(pi) como disp pi imprimen 3.14159 en la
ventana de comandos. Pruebe tambin disp Esta es una prueba de disp..

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 MATLAB.
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 significado original
de un nombre reservado. Estos conflictos 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
pg. 7

lo que significa que se acept la variable. En cambio, si se prueba con end=4 (como ejemplo de
uso indebido), ser ignorado;
Un ejemplo del segundo conflicto es el siguiente: si se utilizan sin y cos (como ejemplos
de nombres de variable indebidos) sin relacin con las funciones trigonomtricas; por ejemplo,

sin = 3;
cos = sin^2;

los clculos procedern, pero sin y cos ya no podrn utilizarse como funciones trigonomtricas
en tanto no sean borradas las variables con el comando clear o se reinicie MATLAB. Si aparece
un mensaje de error relacionado con un conflicto, es importante que el estudiante investigue qu lo
caus.
Es tradicional utilizar los smbolos i, j, k, 1, m y n como variables enteras o ndice. Al
mismo tiempo, i y j se emplean para denotar el valor imaginario unitario, 1 . En MATLAB, i y
j se reservan para el valor imaginario unitario; por tanto, si un clculo incluye variables complejas
es aconsejable evitar el uso de i y j como variables definidas por el usuario, si es posible.
En la tabla 1.1 se presentan ejemplos de nombres de variable reservados que tienen
significado especial. Se puede verificar la existencia de una variable o un archivo con el comando
exist.

TABLA 1.1 Nmeros y nombres de variables especiales


Significado Valor
Nombre de
variable
eps psilon de la mquina 2,2204e-16
pi 3.14159...
i yj Unidad imaginaria 1
Inf inf Infinito
NaN nan No es nmero
Date Fecha
Flops Contador de operaciones de punto flotante
Nargin Nmero de argumentos de entrada de la
funcin
Nargout Nmero de argumentos de salida de la
funcin

Ciclos: MATLAB cuenta con ciclos for/end y while/end. A fin de ilustrar un ciclo
for/end, calculemos el volumen de las esferas para r=1 hasta 5. Los comandos para esta tarea
pueden escribirse as:

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

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.
pg. 8

Otra forma de escribir un ciclo consiste en utilizar while/end; por ejemplo,

Listado1.8
r = 0;
while r<5
r = r+1;
vol = (4/3)*pi*r^3;
disp([r, vol])
end

El ndice del ciclo puede decrementarse as:

for r=5:-1:1
vol = (4/3)*pi*r^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

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 short. Adems, format short e y
format long e se pueden imprimir nmeros cortos y largos, respectivamente, en formato de
punto flotante.
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
pg. 9

for i=1:6
for j=1:20
if j>2*i, break, end
end
end

Otro ejemplo es

Listado 1.11
r=0
while r<10
r = input('Teclee el radio (o -1 para terminar): ');
if r< 0, break, end
vol = (4/3)*pi*r^3;
fprintf('Volumen = %7.3f\n', vol)
end

En el ciclo anterior, el radio r se introduce mediante el teclado. El enunciado fprintf sirve para
imprimir vol con un formato, %7.3f (7 espacios para el entero y 3 para la mantisa de punto
flotante). Si 0 r < 10, se calcular e imprimir vol, pero si r < 0 el ciclo terminar. Adems, si r >
10 el ciclo while terminar. En secciones posteriores se explicarn con mayor detalle input y
fprintf.
En un lenguaje de programacin sin orden de corte, se utilizara goto para romper un ciclo.
MATLAB no cuenta con la orden goto.

Ciclo infinito: Hay ocasiones en que conviene utilizar un ciclo infinito que pueda romperse
cuando se satisfaga cierta condicin. En el siguiente ejemplo se muestra un ciclo infinito que se
rompe slo si se satisface la condicin x > xlimit:

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

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.1.3 Lectura y escritura

Hay varias formas de pasar datos a y de MATLAB. Los mtodos pueden agruparse en tres clases:
pg. 10

(a) Operacin interactiva mediante teclado o el ratn


(b) Lectura de o escritura en un archivo de datos
(c) Empleo de save o load

En el resto de esta subseccin slo presentaremos informacin mnima en lo tocante a lectura y


escritura. Se proporcionar mayor informacin en la seccin 1.8.

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, s , indica que la entrada del teclado es una cadena. La variable z se
convertir en una variable de arreglo (vector de fila) a menos que la cadena slo contenga un
carcter. Se puede introducir una cadena con input sin s si la cadena se teclea encerrada entre
apstrofes. En este caso, el mensaje de solicitud podra ser:

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

Formato de salida: Es posible imprimir mensajes y nmeros con formato si se utiliza


fprintf; por ejemplo,

fprintf('El volumen de la esfera es %12.5f.\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.5f. Si se omite \n, lo que se imprima en
seguida aparecer en la misma lnea.
El enunciado

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

exhibir

formato e: 1.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: %12.3f\n', 7.23462)
pg. 11

toda la salida se imprimir en una sola lnea, as:

formato_e: 1.23452e+04 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

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 especfico: 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.5f\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 final de su contenido. Si ya existe archivo_x, es posible
eliminarlo con !erase archivo_x en Windows.
Se puede tener un mejor control de los archivos con fopen y fclose. Si desea mayores detalles
consulte la gua de usuario de MATLAB.

1.2 VARIABLES DE ARREGLO

Variables de arreglo unidimensional: Las variables de arreglo unidimensional tienen forma de fila
o columna y estn ntimamente relacionadas con los vectores y las matrices. En MATLAB, arreglo
de fila es lo mismo que vector de fila y arreglo de columna es lo mismo que vector de columna. La
variable x puede definirse como vector de fila especificando 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 definir la misma x es

for i=1:6
x(i) = (i-1)*0.1;
end
pg. 12

El tamao de un vector no tiene que declararse previamente, pues se ajusta automticamente. El


nmero de elementos de x puede incrementarse definiendo elementos adicionales, por ejemplo,

x(7) = 0.6;

Otra forma de escribir una variable de arreglo de fila con un incremento o decremento fijo
es:

x = 2:-0.4:-2

que produce
x = 2.0000 1.6000 1.2000 0.8000 0.4000 -0.0000

La definicin de un arreglo de columna es similar a la de un arreglo de fila 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 definir esto mismo es agregar un apstrofo a un arreglo de fila:

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 fila y viceversa. Si se teclea z como orden se
obtiene:

z =
0
0.1
0.2
0.3
0.4
0.5
Si se define 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 (fila o columna), los vectores y y x se
pueden sumar, restar, multiplicar y dividir empleando los operadores aritmticos de arreglos:

z = x + y
z = x - y
z = x .* y
pg. 13

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=l:6; z(i) = x(i) *y(i); end
for i=1:6; z(i) = x(i) /y(i); end

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 significado 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 ^ 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
pg. 14

y =
2
3
7
Aqu, 7 se aade al final 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 defini 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 y anterior,

w = y(3:4)

define 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. Definamos 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 fila, se debe usar size. por ejemplo, size(y) devolver

ans =
3 1
donde la primera cifra es el nmero de filas 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 3. Para z=
[9, 2, 3, 5], size (z) devolver
pg. 15

ans =
1 4

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 definida por

v = 'glaciar'

equivale a

v = ['g', 'l', '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 definir especificando sus elementos. Por ejemplo, un arreglo de 3 por
3 se puede definir mediante

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

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

Listado 1.13
m(1,1) =0.1;
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;
m(3,3) =0.9;
pg. 16

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 fila completa de un arreglo bidimensional empleando un
signo de dos puntos. Por ejemplo, m(1,:) y m(:,3) son la primera fila de m y la tercera columna
de m, respectivamente, y se tratan como vectores. Por ejemplo,

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

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
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
pg. 17
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=l:3
for j=l:3
g(i,j) = a(i,j)^3;
end
end

Los vectores de columna y los de fila 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 eficiencia 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.
Si se comparan dos variables de cadena de diferente longitud en un enunciado if, ocurrir 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 espacios en blando. Por ejemplo, en lugar de

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

debemos escribir

a = 'equidna '
b = 'tapir '
c = '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
pg. 18

t1 = 'digitalis'
t2 = 'nicotiana'
t3 = 'basilicum'
t4 = 'lychnis'
t5 = 'chrysantemum'

Entonces, podemos organizar las variables en una sola matriz de cadenas con

s = str2mat(tl, t2, t3, t4, t5)

La primera fila 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.3 ASPECTO SINGULAR DE LOS NMEROS EN MATLAB

En los lenguajes de programacin ordinarios, los nmeros se clasifican en varias categoras como
sencillos, dobles, reales, enteros y complejos. En MATLAB, todas las variables se tratan igualmente
con doble precisin. No hay distincin entre variables enteras y reales, ni entre variables reales y
complejas. La forma como se asigna un valor a una variable depende exclusivamente del usuario. Si
una variable se va a utilizar como entero, simplemente se le asigna un valor entero. Los enteros se
reconocen a partir de la mantisa y el exponente en la memoria. La falta de distincin entre variables
reales y complejas es exclusiva de MATLAB, pero ofrece muchas ventajas.

Como ejemplo sencillo, consideremos las races de un polinomio cuadrtico

ax2bxc0

la solucin puede escribirse como


b b2
4
ac
x
2
a

En Fortran o C, hay que separar las soluciones en dos casos:

b b 2 4ac
(i) b2 4ac , x=
2a


bi 4
ac2
b
(ii) b2 4ac , x
2a

donde i es igual a 1 y las soluciones en el segundo caso son valores complejos. En MATLAB,
en cambio, no hay necesidad de separaciones; sea cual sea el signo del valor dentro de la raz
cuadrada, las races se calcularn con

x1 = (-b + sqrt(b^2 - 4*a*c))/(2*a)


x2 = (-b - sqrt(b^2 - 4*a*c))/(2*a)
pg. 19

Si las races son complejas, MATLAB tratar las variables automticamente como complejas. La
exactitud de los clculos depende de la forma en que se registran y procesan los nmeros. Los
parmetros clave que indican la exactitud de los nmeros en un lenguaje de programacin son

Nmero positivo ms pequeo: realmin


Nmero positivo ms grande: realmax
Presicin relativa: eps

TABLA 1.2 Comparacin del intervalo numrico y el psilon de la mquina

Precisin MATLAB Fortran (estacin de Fortran (Cray)


de software (estacin de trabajo) trabajo) sencilla (doble)
realmim 4.5e-324 2.9e-39 (misma) 4.6e-2476
realmax 9.9e+307 1.7e+38 (misma) 5.4e+2465
eps 2.2e-16 1.2e-7 (2.8e-17) 1.3e-29

En la tabla 1.2 se comparan estos tres nmeros en MATLAB con sus contrapartes en
Fortran en unas cuantas computadoras representativas.
La tabla 1.2 muestra que el psilon en MATLAB es equivalente al de doble precisin de
Fortran en estaciones de trabajo tpicas. MATLAB trata todos los nmeros como si fueran de doble
precisin. El realmin de MATLAB es significativamente menor que el de Fortran en VAX y
realmax es significativamente mayor. De hecho, realmin y x_realmax ocupan el segundo lugar
despus de los de la Cray. El amplio intervalo numrico en MATLAB ciertamente constituye una
ventaja significativa cuando se calculan funciones exponenciales o funciones con singularidades.
Si el lector desea determinar realmin, realmax y eps en su propia computadora, puede
ejecutar los siguientes guiones (el ltimo nmero que aparece en la pantalla es la respuesta):

Listado 1.15
% Para obtener realmin
x=1; while x>0, x=x/2, end

Listado1.16
% Para obtener realmax
x=1; while x<inf, x=x*2, end

Listado1.17
% Para obtener el psilon de la mquina
x=1; while x>0, x=x/2; ex = x*0.98 + 1; ex=ex - 1;
if ex > 0, ex, end
end

Si un valor se vuelve mayor que x_max, el nmero se trata (en MATLAB) como denotado por
inf. Si teclea inf en la ventana de comandos, la respuesta ser

ans =
inf

Si teclea x = 1/inf obtendr

ans =
pg. 20

Sin embargo, hay casos en los que la respuesta es NaN, lo que significa no es un nmero. Por
ejemplo, si trata de calcular i*inf, la respuesta en MATLAB es

ans =
NaN

1.4 FUNCIONES MATEMTICAS EN MATLAB

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

En la tabla 1.3 se muestran las funciones de las primeras dos categoras; las funciones de la tercera
se explican en la seccin 1.5. 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 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 nmero imaginario unitario, equivalente a la raz cuadrada de -1. La respuesta es


ans =
-4.1896 - 9.1092i

En otro ejemplo, consideremos la funcin arco coseno, que es el inverso de la funcin coseno
definido por
y = acos(x) = cos-1(x)
El comando

acos(0.5)
produce
ans =
1.0472

TABLA 1.3 Funciones matemticas elementales


Funciones Comentarios
trigonomtricas
sin(x)
cos (x)
tan(x)
asin(x)
acos(x)
pg. 21

atan(x) -/2 atan(x) /2


atan2(y,x) Igual que atan(y/x) (vea el
manual)
- atan(y, x)
sinh(x)
cosh(x)
tanh(x)
asinh(x)
acosh(x)
atanh(x)
Otras funciones Comentarios
matemticas
elementales
abs(x) Valor absoluto de x
angle(x) Angulo de fase de un valor complejo:
Si x = real, ngulo = 0
S x = 1 , ngulo = /2
sqrt(x) Raz cuadrada de x
real(x) Parte real del valor complejo x
imag(x) Parte imaginaria del valor complejo x
conj(x) Conjugado complejo x
round(x) Redondear al entero ms cercano
fix(x) Redondear un valor real hacia cero
floor(x) Redondear hacia -
ceil(x) Redondear x hacia +
sign(x) +1 si x > 0; -l si x < 0
rem(x,y) Residuo al dividir: x - y*fix(x/y)
exp(x) Base exponencial e
log(x) Logaritmo base e
log10(x) Logaritmo base 10

El argumento x de acos(x) normalmente est limitado al intervalo -1 x 1 (as es como trabaja la


funcin acos en Fortran). En MATLAB, en cambio, acos acepta cualquier valor en - < x <
porque los valores de acos(x) no estn limitados a valores reales. De hecho, si probamos

acos(3)

entonces

ans =
0 + 1.7627i

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


pg. 22

ans =
0.8415 0.9093 0.1411
0.4121 0.98940 0.6570

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 x es un arreglo de columna o de fila, sin(x) se convierte en un arreglo de columna o de fila,


segn sea el caso.

1.5 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 fila, un vector de columna o una matriz. Si x 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 =
1
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 fila como de columna, sum calcula el total de los elementos. Si x es una matriz, se
calcula la sumatoria de cada columna y se devuelve un vector de fila formado por las sumatorias de
todas las columnas. A continuacin damos unos cuantos ejemplos:

sum([2 1 5])
pg. 23

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 x y min(x) encuentra el


mnimo. El argumento x puede ser un vector de fila o de columna o una matriz. Si x es una matriz,
la respuesta es un vector de fila que contiene el mximo o mnimo de cada columna de x. (La regla
es la misma que para sort y sum.)

Nmeros aleatorios: Podemos generar nmeros aleatorios con rand. La forma bsica de
la funcin es rand(n), donde n especifica el tamao de la matriz de nmeros aleatorios que debe
devolverse. Si n = 1, se devuelve un solo nmero aleatorio; si n > 1, se devuelve una matriz n por n
de nmeros aleatorios. Si no se especifica 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 aleatorios. El
generador de nmeros aleatorios puede inicializarse proporcionando un nmero que sirva como
semilla. La forma bsica de la inicializacin es

rand ('state',J)

donde J es el J-simo estado. Si se utiliza el mismo estado, la secuencia de nmeros aleatorios es la


misma. Por otro lado, si se desea que la secuencia difiera aleatoriamente cada vez que se inicie el
generador de nmeros aleatorios, se deber proporcionar un estado elegido 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). El estado debe ser mayor que la unidad.

1.6 CREACIN DE UN PROGRAMA EN FORMA DE ARCHIVO M

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.2 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.
si desea elaborar un archivo M nuevo en 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 l.lb, 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

2
Los archivos M se agrupan en dos categoras: archivos M de guin y archivos M de funcin. Un
guin equivale a un programa principal en los lenguajes de programacin tradicionales, en tanto que una
funcin corresponde a un subprograma, subrutina o funcin en los lenguajes tradicionales.
pg. 24

ventana de comandos tecleando esfera como un comando; incluso puede ejecutarse desde otro
archivo M incluyendo esfera en ese archivo.

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 off.

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 significado de las
variables y los enunciados.

Ejemplo 1.1

Los nmeros aleatorios pueden servir para crear juegos. El enunciado x=rand(1) genera un
nmero aleatorio entre 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.

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 n-
sima carta; n puede encontrarse multiplicando x por 13 y 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 ejemplo, c=clock asigna a c un
vector de fila 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 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 Listl_19.m, as que puede ejecutarse desde la ventana de comandos
tecleando Listl_19.

Listado 1.19
c=clock;
rand('state',sum(100*c))
for k=1:20
n=ceil(13*rand(1));
fprintf('Nmero de carta sacada: %3.0f\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
end
pg. 25

Una caracterstica interesante y til de los archivos M es que pueden llamar a otros archivos M. El
archivo M que llama es un archivo M padre, en tanto que los archivos M llamados son archivos M
hijos. Esto implica que un guin puede dividirse en un archivo M padre y varios archivos M hijos.
Estos ltimos son similares a los archivos M de funcin que se explican en la siguiente seccin, con
la diferencia de que los archivos M padre e hijos pueden ver todas las variables de todos ellos, en
tanto que los archivos M de funcin slo pueden ver las variables que se proporcionan mediante
argumentos.

1.7 CMO 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:

2
x3
7
x2

3
x1
fx
() 2 (1.7.1)
x3
x5 ex

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 =
502.1384 -68.4920
-0.2000 0.0568
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,

Listado1.21
function [media, dvstd] = media_ds(x)
pg. 26

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

fa
() 2
fb
() fc
()
f
av (1.7.2)
4

donde f(x) 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;

En el guin anterior, nombre_f (una variable de cadena) es el nombre de la funcin f(x). Si f(x)
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).

Ejemplo 1.2

Evale la ecuacin 1.7.2 para la funcin definida por la ecuacin 1.7.1 con a = 1, b = 2 y c = 3. La
ecuacin 1.7.1 se program como demof_.m y se muestra en el listado 1.20.
Solucin

Suponemos que f_av.m (listado 1.22) se guard como archivo M. Entonces, el comando

A = f_av('demof_', 1, 2, 3)

produce
pg. 27

89.8976

El nmero de argumentos de entrada y de salida de feval debe coincidir con el formato de la


funcin nombre_f. 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


difcil 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 eficaz 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.8 CMO GUARDAR Y CARGAR DATOS

Guardar y cargar: Si utiliza save slo, as:

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

save nombre_archivo

guarda todas las variables en el archivo llamado nombre_archivo.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 guardan en formato
binario de doble precisin. Cuando quiera cargar los datos contenidos en
nombre_archivo.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.
pg. 28

Si desea utilizar el formato ASCII, agregue -ascii o /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:

l.0000000e+00 2.0000000e+00 3.0000000e+00 4.0000000e+00


-l.0000000e+00
-2.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 y_dat sea cual sea la extensin.


Por tanto, el archivo de datos y_da.t debe estar slo en uno de los siguientes formatos de
datos:

(1) un solo nmero


(2) un vector de fila
(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.
Los archivos de datos preparados con Fortran o C en formato ASC1I (o de texto) se pueden
cargar con load siempre que la estructura de datos tenga una de las cuatro formas indicadas. Si
desea conocer mtodos ms avanzados para exportar e importar archivos de datos, consulte la gua
de usuario de MATLAB.

1.9 OBTENCIN DE UNA COPIA IMPRESA

Algo que muchos usuarios desean saber es cmo preparar copias en papel de lo que MATLAB
exhibe en la pantalla. Si desea producir un archivo que registre las entradas del teclado y las salidas
de MATLAB, utilice diary, que presentamos en la seccin 1.1. Si utiliza diary sin un nombre
de archivo especfico, el archivo tendr el nombre diary en el directorio. El archivo puede
imprimirse como archivo de texto. No pueden capturarse figuras grficas en diary.
pg. 29

Bibliografa
MATLAB Fundamentos y aplicaciones al clculo diferencial e integral. Departamento de
Ciencias Bsicas de la Universidad Don Bosco. Soyapango.
Nakamura, S. Anlisis numrico y visualizacin grfica con MATLAB, Prentice-Hall
Hispanoamrica. Mxico DF.

Anda mungkin juga menyukai