El siguiente es un tutorial de los comandos de MATLAB. 1.1.1 Antes

Anuncio
1
Asignatura: Sistemas y señales discretos.
Tema: Tutorial de Matlab.
El siguiente es un tutorial de los comandos de MATLAB.
1.1.1 Antes de iniciar los cálculos
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 aplicación en Windows.
Ayuda: si no entiende bien el significado de un comando, teclee help y el nombre del
comando en cuestión. El comando help presenta una explicación 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 traducción de las respuestas a help quit y a
help help:
» help quit
QUIT
Terminar MATLAB.
QUIT termina MATLAB.
» help help
HELP
Documentación en linea.
HELP, sin más, 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 información 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 función FUN.
T = HELP('tópico') retorna el texto de ayuda en una cadena de caracteres separada por '\n'.
LOOKFOR XYZ busca la cadena XYZ en la primera línea de comentario
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 líneas en las que se encontró.
2
MORE ON hace que HELP haga una pausa después de cada pantalla
si el texto de ayuda ocupa varias pantallas.
Véase también LOOKFOR, WHAT, WHICH, DIR, MORE.
Versión: Lo primero que el usuario debe saber acerca del software de MATLAB es qué
versión está usando. Para obtener esta información, 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.
Quién: El comando who produce una lista de las variables del espacio de trabajo actual; whos
exhibe Información adicional acerca de cada variable; who global y whos global listan
las variables del espacio de trabajo global.
Reloj: El comando clock exhibe números como
ans =
l.0e+03 *
1.9970 0.0030 0.0050 0.0150
0.0140
0.0091
El primer número, 1.0e+03, es un multiplicador; los números de la segunda línea tienen el
siguiente significado:
[año, mes, día, hora, minuto, segundo]
Se puede exhibir la misma información en formato entero con fix(clock) . La respuesta es
ans =
1997
3
5
15
19
56
lo que indica que la fecha fue el año 1997, tercer mes, quinto día, 15 horas, 19 minutos y 56
segundos, aproximadamente seis minutos después de que se imprimió el primer ejemplo de clock.
Podemos medir con clock el tiempo que tarda una ejecución. Por ejemplo asigne t_0=clock
antes de que se inicie un cálculo y t_1=clock cuando se haya completado; entonces, t_1 t_0 nos dará el tiempo transcurrido durante el cálculo. También podemos usar tic y toc para
medir el tiempo transcurrido.
El comando date proporciona información similar, pero en un formato más breve:
1
Archivo M: un archivo de guión o función (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(nombrearchivo.mex)
3
ans =
5-Mar-97
Camino: El comando path imprime la ruta de búsqueda 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 concatenación 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.
Diario: El comando diary on escribe todo lo que se introduce por el teclado, así
como la mayor parte de lo que se envía 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 anexarán a
ese archivo. Se puede especificar un nombre de archivo distinto de diary escribiéndolo
después 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 después del signo de escape. Por ejemplo, es posible abrir
desde MATLAB software de edición de textos como el editor vi tecleando ! vi
nombrearchivo. Podemos utilizar el escape de forma análoga en una PC para los comandos de
DOS, o incluso en una Mac para un número limitado de comandos. Por ejemplo, podemos dar
formato a un disquete desde MATLAB en una PC con ! format a:. Sin embargo, la ejecución
de programas mediante este mecanismo, sobre todo si se trata de software gráfico o de
comunicaciones, puede echar a perder el entorno de computación.
Demostración: El comando demo guía al usuario para que pueda ejecutar diversas
demostraciones que se eligen de un menú. El contenido de algunas demostraciones no es fácil de
entender a la primera, pero puede estudiarse en varias ocasiones si se tiene interés.
1.1.2 Cómo iniciar los cálculos
Cálculos con una sola variable: Cuando se abre una ventana de comandos, aparece la indicación
EDU>> (en la versión estudiantil y >> en la versión profesional) en la esquina superior izquierda de
la ventana. Podemos escribir cualquier comando adelante de la indicación. En nuestras
explicaciones de los comandos, omitiremos la indicación por sencillez.
Como ejemplo sencillo, evaluemos:
Volumen =
Los comandos que debemos teclear son:
4 3
r , con r = 2
3
4
Listado 1.1a
r = 2;
vol = (4/3)*pi*r^3;
donde pi =  en MATLAB. Cada línea se teclea adelante de la indicación EDU>> y se oprime la
tecla return (o intro) al final de la línea. Observe que en el guión anterior cada línea es un comando
y termina con un signo de punto y coma. El circunflejo ^ después de r es el operador de exponente.
Cuando trabajamos en la ventana de comandos, la computadora calcula la respuesta de cada
comando inmediatamente después de pulsarse la tecla return. Por tanto, el valor de vol ya está en
la computadora; ¿cómo podemos hacer que aparezca en la pantalla?
La forma más fácil 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 después de calcularse. Sin
embargo, como casi nunca resulta cómodo ir imprimiendo todos los resultados, por lo general se
coloca un punto y coma después de cada comando.
Podemos escribir varios comandos en una misma línea separándolas 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 línea con o sin una coma. por ejemplo, si escribe
r = 2, vol = (4/3)*pi*r^3
se imprimirán los valores de r y de vol, pero si escribe
r = 2; vol = (4/3)*pi*r^3;
no se imprimirán resultados.
Es posible dividir un comando largo en varias líneas. En Fortran, esto se hace con una marca de
continuación en la columna 6. En MATLAB, la marca de continuación es ... y se coloca al final de
la línea que se desea continuar; por ejemplo,
Listado 1.2
r = 2;
vol = (4/3)*3.14159 ...
*r^3;
la indicación EDU> no aparecerá en la línea que siga a la marca de continuación.
Operadores aritméticos: Los operadores aritméticos como +, -, * y / son los mismos que
los de lenguajes de programación tradicionales como Fortran y, respectivamente, más, menos,
multiplicar y dividir. MATLAB emplea un operador no tradicional, \, que puede llamarse división
inversa. Este operador produce el recíproco de la división; o sea, a\b produce b/a. Por ejemplo,
5
c = 3\1
c =
0.3333
No es conveniente utilizar este operador en cálculos ordinarios, pero adquirirá importancia 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^3;
end
Obsérvese también que al escribir el guión anterior la indicación EDU> no aparece sino
hasta después de teclearse end. Si el enunciado matemático requiere un igual después de if, utilice
==, 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 lógicos and y or se denotan con & y |, respectivamente. Por ejemplo, la
ecuación condicional
Si g > 3 o g < 0, entonces a = 6
se escribe
if g>3 | g<0, a = 6; end
6
Asimismo, la ecuación 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
elseif r==3
else
end
b=1;
b=2;
b=0;
Desde luego, elseif puede repetirse tantas veces como se desee; sin embargo, hay ocasiones en
que el uso de e1se y e1seif tiene sus bemoles, sobre todo cuando las variables que siguen al
enunciado elseif incluyen variables de arreglo de diferentes tamaños. Si los enunciados elseif
no funcionan, olvídese de ellos y repita enunciados if sencillos cuantas veces sea necesario.
Exhibición: La orden disp exhibe un número, 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 también 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 tamaño 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 método para determinar la compatibilidad del nombre de variable es probarlo en la pantalla de
comandos. Un enunciado válido como x=9 tendrá una respuesta como ésta:
x =
9
lo que significa que se aceptó la variable. En cambio, si se prueba con end=4 (como ejemplo de
uso indebido), será ignorado;
7
Un ejemplo del segundo conflicto es el siguiente: si se utilizan sin y cos (como ejemplos
de nombres de variable indebidos) sin relación con las funciones trigonométricas; por ejemplo,
sin = 3;
cos = sin^2;
los cálculos procederán, pero sin y cos ya no podrán utilizarse como funciones trigonométricas
en tanto no sean borradas las variables con el comando clear o se abandone MATLAB. Si
aparece un mensaje de error relacionado con un conflicto, es importante que el lector investigue qué
lo causó.
Es tradicional utilizar los símbolos 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 cálculo 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 Números y nombres de variables especiales
Significado
Valor
Nombre de
variable
Eps
Pi
i yj
Inf
NaN
date
flops
nargin
nargout
Épsilon de la máquina

Unidad imaginaria
2,2204e-16
3.14159...
1
Infinito

No es número
Fecha
Contador de operaciones de punto flotante
Número de argumentos de entrada de la
función
Número de argumentos de salida de la
función
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
8
Los cálculos del ciclo no comenzarán 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 línea cada vez que se
calcule vol. No es necesario un signo de punto y coma después de for r=1:5 ni de end.
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 parámetro r después
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 omisión, los números se exhiben con cinco dígitos:
pi
ans =
3.1416
Sin embargo, los mismos dígitos pueden exhibirse con 16 dígitos si se emite la orden format
long; por ejemplo,
format long
pi
ans =
3.141592653589793
Si desea volver al formato corto, utilice format short. Además, format short e y
format long e se pueden imprimir números cortos y largos, respectivamente, en formato de
punto flotante.
Corte: El comando break termina la ejecución de un ciclo for o while. Si se utiliza
break en ciclos anidados, sólo se termina el ciclo inmediato donde se encuentra el comando. En el
9
siguiente ejemplo, break termina el ciclo interior tan pronto como se satisface j > 2*i, pero el
ciclo de i se continúa hasta i=6:
Listado 1.10
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á. Además, si r <
10 el ciclo while terminará. En secciones posteriores se explicarán con mayor detalle input y
fprintf.
En un lenguaje de programación sin orden de corte, se utilizaría 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 condición. En el siguiente ejemplo se muestra un ciclo infinito que se
rompe sólo si se satisface la condición x > xlimit:
while 1
.
.
if x > xlimit, break; end
.
.
end
Cómo 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 sólo se desea borrar algunas
variables, sus nombres se indican después de la palabra clear; por ejemplo,
clear x y z
Cómo borrar la ventana de comandos: si desea borrar la ventana, utilice el comando
10
clc
1.1.3 Lectura y escritura
Hay varias formas de pasar datos a y de MATLAB. Los métodos pueden agruparse en tres clases:
(a) Operación interactiva mediante teclado o el ratón
(b) Lectura de o escritura en un archivo de datos
(c) Empleo de save o load
En el resto de esta subsección sólo presentaremos información mínima en lo tocante a lectura y
escritura. Se proporcionará mayor información en la sección 1.8.
Lectura de entradas de un teclado: MATLAB puede aceptar datos de entrada a través del
teclado mediante el comando input. Si se desea leer un número, un enunciado básico sería:
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. También es
posible introducir cadenas desde el teclado. Un enunciado básico sería:
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 sólo contenga un
carácter. Se puede introducir una cadena con input sin „s‟ si la cadena se teclea encerrada entre
apóstrofos. En este caso, el mensaje de solicitud podría ser:
z = input(„Indique su nombre (encerrado en apóstrofos):‟)
Formato de salida: Es posible imprimir mensajes y números con formato si se utiliza
fprintf; por ejemplo,
fprintf('El volumen de la esfera es %12.5f.\n', vol)
Aquí se incluyó entre los apóstrofos la cadena que se va a exhibir, el formato de un número y el
operador de nueva línea. 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 línea que avanza en una línea la posición en la
pantalla. El operador de nueva línea 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 línea.
El enunciado
fprintf('formato_e: %12.5e\n', 12345.2)
exhibirá
formato e: 1.23452e+04
11
Si se escriben consecutivamente dos enunciados de impresión sin \n en el primer
enunciado, por ejemplo,
fprintf('formato_e: %12.5e', 12345.2)
fprintf('formato_f: %12.3f\n', 7.23462)
toda la salida se imprimirá en una sola línea, así:
formato_e: 1.23452e+04 formato f: 7.235
Se puede teclear un valor entero empleando el mismo formato, sólo que se pone un 0
después del punto decimal; por ejemplo,
fprintf('formato_f: %12.0f\n', 93)
produce
formato_f: 93
Si se desea imprimir varios números en una misma línea, puede utilizarse varias veces
fprintf sin \n, excepto en el último enunciado.
Escritura en un archivo específico: 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 guía 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 están í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 subíndice. Por ejemplo, si teclea x(3)
como un comando se exhibirá:
ans =
0.2
Una forma equivalente de definir la misma x es
12
for i=1:6
x(i) = (i-1)*0.1;
end
El tamaño de un vector no tiene que declararse previamente, pues se ajusta automáticamente. El
número 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 definición 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 apóstrofo a un arreglo de fila:
z = [0, 0.1, 0.2, 0.3, 0.4, 0.5]‟;
El operador apóstrofo equivale al operador de transposición 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
13
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 aritméticos de arreglos:
z
z
z
z
=
=
=
=
x
x
x
x
+ y
- y
.* y
./ y
que equivalen respectivamente a
Listado 1.12
for i=1:6;
for i=1:6;
for i=l:6;
for i=1:6;
z(i)
z(i)
z(i)
z(i)
=
=
=
=
x(i)
x(i)
x(i)
x(i)
+ y(i); end
- y(i); end
*y(i); end
/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 multiplicación y la división de arreglos,
respectivamente, y son distintos de la multiplicación y división de matrices y vectores. Si se omite
el punto de .* o ./, el significado cambia totalmente.
El operador de potenciación 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 tamaño de un arreglo puede incrementarse anexándole 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 número, un vector o varios vectores a un vector de columna. Suponga
que y es un vector de columna,
y =
14
2
3
entonces
y = [y; 7]
produce
y =
2
3
7
Aquí, 7 se añade al final del vector de columna. Observe que se utiliza un signo de punto y coma
para anexar a un vector de columna. También 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 tamaño de un vector, pregúntelo 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 además de la longitud se desea
saber si el vector es de columna o de fila, se debe usar size. por ejemplo, size(y) devolverá
15
ans =
3
1
donde la primera cifra es el número de filas y la segunda es el número 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á
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 número de elementos; si no es así, la definición no será aceptada. El
enunciado anterior equivale a escribir
Listado 1.13
m(1,1) =0.1;
16
m(1,2)
m(1,3)
m(2,1)
m(2,2)
m(2,3)
m(3,1)
m(3,2)
m(3,3)
=0.2;
=0.3;
=0.4;
=0.5;
=0.6;
=0.7;
=0.8;
=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 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
aritméticos 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 tamaño. 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
17
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 más compactas y claras que las del listado
1.14b.
El enunciado con el operador de potenciación 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
aritméticos de arreglos tiene dos ventajas. En primer lugar, los programas son más 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 tamaño:
(a) if a==b sólo se satisface si a(i,j)==b(i,j) para todos los elementos.
(b) if a>=b sólo 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
aritmético, 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
b
c
d
=
=
=
=
'equidna'
'tapir'
'albatross'
'petrel'
debemos escribir
18
a
b
c
d
=
=
=
=
'equidna '
'tapir
'
'albatross'
'petrel
'
Con esto ya podremos comparar a,b y c en enunciados if.
Sin embargo, una forma más fácil de realizar la tarea es con str2mat. Por ejemplo,
supongamos que las variables de cadena están dadas por
tl
t2
t3
t4
t5
=
=
=
=
=
'digitalis'
'nicotiana'
'basilicum'
'lychnis'
'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
idénticas porque se añaden espacios en blanco a las cadenas más cortas.
1.3 ASPECTO SINGULAR DE LOS NÚMEROS EN MATLAB
En los lenguajes de programación ordinarios, los números se clasifican en varias categorías como
sencillos, dobles, reales, enteros y complejos. En MATLAB, todas las variables se tratan igualmente
con doble precisión. No hay distinción 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 distinción entre variables
reales y complejas es exclusiva de MATLAB, pero ofrece muchas ventajas. En Fortran, por
ejemplo, las variables reales y complejas no pueden compartir las mismas subrutinas.
Como ejemplo sencillo, consideremos las raíces de un polinomio cuadrático
ax 2  bx  c  0
la solución puede escribirse como
 b  b 2  4ac
x
2a
En Fortran o C, hay que separar las soluciones en dos casos:
(i) b  4ac ,
2
 b  b 2  4ac
x
2a
19
x
(ii) b 2  4ac ,
 b  i 4ac  b 2
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 raíz
cuadrada, las raíces se calcularán con
x1 = (-b + sqrt(b^2 - 4*a*c))/(2*a)
x2 = (-b - sqrt(b^2 - 4*a*c))/(2*a)
Si las raíces son complejas, MATLAB tratará las variables automáticamente como complejas. La
exactitud de los cálculos depende de la forma en que se registran y procesan los números. Los
parámetros clave que indican la exactitud de los números en un lenguaje de programación son
Número positivo más pequeño: realmin
Número positivo más grande: realmax
Presición relativa: eps
TABLA 1.2 Comparación del intervalo numérico y el épsilon de la máquina
Precisión
de software
realmim
realmax
eps
MATLAB
(estación de trabajo)
4.5e-324
9.9e+307
2.2e-16
Fortran (estación de
trabajo) sencilla (doble)
2.9e-39 (misma)
1.7e+38 (misma)
1.2e-7 (2.8e-17)
Fortran (Cray)
4.6e-2476
5.4e+2465
1.3e-29
En la tabla 1.2 se comparan estos tres números 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 precisión de
Fortran en estaciones de trabajo típicas. MATLAB trata todos los números como si fueran de doble
precisión. 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
después de los de la Cray. El amplio intervalo numérico 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 número 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 máquina
x=1; while x>0, x=x/2; ex = x*0.98 + 1;
if ex > 0, ex, end
ex=ex - 1;
20
end
Si un valor se vuelve mayor que x_max, el número 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 =
0
Sin embargo, hay casos en los que la respuesta es NaN, lo que significa no es un número. Por
ejemplo, si trata de calcular i*inf, la respuesta en MATLAB es
ans =
NaN
1.4 FUNCIONES MATEMÁTICAS EN MATLAB
Al igual que otros lenguajes de programación, MATLAB tiene numerosas funciones matemáticas,
desde las elementales hasta las de alto nivel. Las funciones elementales pueden agruparse en tres
categorías:
(a) Funciones trigonométricas
(b) Otras funciones elementales
(c) Funciones que realizan tareas
En la tabla 1.3 se muestran las funciones de las primeras dos categorías; las funciones de la tercera
se explican en la sección 1.5. Las funciones matemáticas en MATLAB presentan dos notables
diferencias respecto de las de otros lenguajes de programación como Fortran o C: (1) las funciones
matemáticas funcionan con variables complejas sin discriminación alguna y (2) las funciones
matemáticas 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 número imaginario unitario, equivalente a la raíz cuadrada de -1. La respuesta es
ans =
-4.1896 - 9.1092i
En otro ejemplo, consideremos la función arco coseno, que es el inverso de la función coseno
definido por
y = acos(x) = cos-1(x)
El comando
acos(0.5)
21
produce
ans =
1.0472
TABLA 1.3 Funciones matemáticas elementales
Funciones
Comentarios
trigonométricas
sin(x)
cos (x)
tan(x)
asin(x)
acos(x)
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
matemáticas
elementales
abs(x)
Valor absoluto de x
angle(x)
Angulo de fase de un valor
complejo:
Si x = real, ángulo = 0
sqrt(x)
real(x)
imag(x)
conj(x)
round(x)
fix(x)
floor(x)
ceil(x)
sign(x)
rem(x,y)
exp(x)
log(x)
log10(x)
Sí x =  1 , ángulo = /2
Raíz cuadrada de x
Parte real del valor complejo x
Parte imaginaria del valor complejo
x
Conjugado complejo x
Redondear al entero más cercano
Redondear un valor real hacia cero
Redondear hacia -
Redondear x hacia +
+1 si x > 0; -l si x < 0
Residuo al dividir: x - y*fix(x/y)
Base exponencial e
Logaritmo base e
Logaritmo base 10
El argumento x de acos(x) normalmente está limitado al intervalo -1  x  1 (así es como trabaja la
función acos en Fortran). En MATLAB, en cambio, acos acepta cualquier valor en - < x < 
porque los valores de acos(x) no están limitados a valores reales. De hecho, si probamos
acos(3)
22
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á
ans =
0.8415
0.4121
0.9093
0.98940
0.1411
0.6570
que es una matriz del mismo tamaño que x. El cálculo 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,
según sea el caso.
1.5 FUNCIONES QUE REALIZAN TAREAS
Además de las funciones que calculan funciones matemáticas directas y que aparecen en la tabla
1.3, hay varias funciones que realizan tareas.
Ordenar: La función 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 continuación presentamos algunos
ejemplos:
sort([2 1 5])
ans =
1
sort ([2 1 5]‟)
ans =
1
2
23
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 continuación 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
Máximo y mínimo: max(x) encuentra el máximo en el vector x y min(x) encuentra el
mínimo. 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 máximo o mínimo de cada columna de x. (La regla
es la misma que para sort y sum.)
Números aleatorios: Podemos generar números aleatorios con rand. La forma básica de
la función es rand(n), donde n especifica el tamaño de la matriz de números aleatorios que debe
devolverse. Si n = 1, se devuelve un solo número aleatorio; si n > 1, se devuelve una matriz n por n
de números aleatorios. Si no se especifica otra cosa, los números aleatorios así generados están en 0
 x  1. Si se invoca rand varias veces seguidas, se genera una secuencia de números aleatorios. El
generador de números aleatorios puede inicializarse proporcionando un número que sirva como
semilla. La forma básica de la inicialización es
rand ('state',J)
donde J es el J-ésimo estado. Si se utiliza el mismo estado, la secuencia de números aleatorios es la
misma. Por otro lado, si se desea que la secuencia difiera aleatoriamente cada vez que se inicie el
generador de números aleatorios, se deberá proporcionar un estado elegido al azar, que podría ser la
hora en segundos o el número que ganó el premio mayor en la lotería de la semana, aunque no es
fácil obtener números verdaderamente aleatorios a partir de fenómenos naturales o la vida diaria
(véase el ejemplo 1.1). El estado debe ser mayor que la unidad.
1.6 CREACIÓN DE UN PROGRAMA EN FORMA DE ARCHIVO M
La ejecución de comandos en una ventana sólo 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
24
más de unas cuantas líneas es más conveniente que el usuario escriba un archivo M de guión o un
archivo M de función, 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 guárdelo 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.
Eco: Cuando se ejecuta un guión, 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
exhibirán. De este modo, el usuario puede ver cuál 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 línea son comentarios y deben ignorarse durante los cálculos. Los
comentarios que se añaden así a los archivos M pueden ayudar a explicar el significado de las
variables y los enunciados.
Ejemplo 1.1
Los números aleatorios pueden servir para crear juegos. El enunciado x=rand(1) genera un
número aleatorio entre 0 y 1 y asigna ese número 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 acción de escoger una carta de espadas con un número aleatorio. El juego
debe continuarse devolviendo la tarjeta a la pila y barajándola otra vez después de cada juego.
Solución
Puesto que la probabilidad de que un número aleatorio esté en un intervalo de tamaño dx es igual a
dx, supondremos que si el número 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 mas
cercano.
Desde luego, antes de utilizar rand es preciso inicializar la función con una semilla. Si
utilizamos la misma semilla, se generará una secuencia idéntica de números 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 números 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 año.
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.
2
Los archivos M se agrupan en dos categorías: archivos M de guión y archivos M de función. Un guión
equivale a un programa principal en los lenguajes de programación tradicionales, en tanto que una función
corresponde a un subprograma, subrutina o función en los lenguajes tradicionales.
25
Listado 1.19
c=clock;
rand('state',sum(100*c))
for k=1:20
n=ceil(13*rand(1));
fprintf('Número 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
Una característica 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 guión puede dividirse en un archivo M padre y varios archivos M hijos.
Estos últimos son similares a los archivos M de función que se explican en la siguiente sección, 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 función sólo pueden ver las variables que se proporcionan mediante
argumentos.
1.7 CÓMO 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 función que devuelve una sola variable: Consideremos un archivo M de función
para la siguiente ecuación:
f (x) 
2x 3  7x 2  3x  1
x 2  3x  5e  x
(1.7.1)
Suponiendo que el archivo M se guarda como demof_.m, su guión 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 idéntico al nombre de la función, que aparece a la derecha
del signo de igual. En el archivo M se utilizan los operadores aritméticos 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,
26
demof_([3, 1; 0, -1])
El resultado también es una matriz:
ans =
502.1384 -68.4920
-0.2000
0.0568
Función que devuelve múltiples variables Una función puede devolver más de una
variable. Supongamos una función que evalúa la media y la desviación estándar de una serie de
datos. Para devolver las dos variables utilizamos un vector en el miembro izquierdo del enunciado
de la función; por ejemplo,
Listado1.21
function [media, dvstd] = media_ds(x)
n=length(x);
media = sum(x)/n;
dvstd = sqrt(sum(x.^2)/n - media.^2);
Para utilizar esta función, el miembro derecho del enunciado de llamada también debe ser un vector.
El guión 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
Función que utiliza otra función: El argumento de una función puede ser el nombre de
otra función. Por ejemplo, supongamos una función que evalúa la media ponderada de una función
en tres puntos como
f av 
f ( a )  2 f (b)  f ( c)
4
(1.7.2)
donde f(x) es la función que se nombrará en el argumento. El siguiente guión ilustra una función
f_av.m que calcula la ecuación 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 guión anterior, nombre_f (una variable de cadena) es el nombre de la función f(x). Si f(x)
es la función seno, nombre_f será 'sin'.feval(nombre_f,x) es un comando de
MATLAB que evalúa la función llamada nombre_f para el argumento x. Por ejemplo, y =
feval('sin',x) equivale a y=sin(x).
27
Ejemplo 1.2
Evalúe la ecuación 1.7.2 para la función definida por la ecuación 1.7.1 con a = 1, b = 2 y c = 3. La
ecuación 1.7.1 se programó como demof_.m y se muestra en el listado 1.19.
Solución
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 número de argumentos de entrada y de salida de feval debe coincidir con el formato de la
función nombre_f. Por ejemplo, si la función nombre_f requiere cuatro variables de entrada y
devuelve tres variables de salida, el enunciado para llamar a feval sería
[p, q, s] = feval(nombre_f, u, v. w, z)
Depuración de archivos M de función: La depuración de archivos M de función es más
difícil que la de archivos M de guión. 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 depuración. El
método más básico pero eficaz para crear un archivo M de función consiste en convertir en
comentario el enunciado de la función en la primera línea colocando % antes de la palabra
function y probar el archivo M como guión. Cuando haya depurado exhaustivamente el archivo
M, reincorpore el enunciado de la función. El empleo de comandos de depuración sólo se
recomienda a usuarios avanzados de MATLAB.
1.8 CÓMO GUARDAR Y CARGAR DATOS
Guardar y cargar: Si utiliza save sólo, así:
save
todas las variables se guardarán en el archivo por omisión 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 colocándolo después 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 sólo desea guardar
nombre_archivo; por ejemplo,
ciertas
save nombre_archivo a b c
variables,
escriba
sus
nombres
después
de
28
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 precisión. Cuando quiera cargar los datos contenidos en
nombre_archivo.mat, teclee
load nombre_archivo
sin nombres de variables; a continuación se recuperarán 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 opción ASCII son importantes porque
permiten exportar datos de MATLAB e importarlos en MATLAB.
Si desea utilizar el formato ASCII, agregue -ascii o /ascii después de los nombres de
las variables; por ejemplo,
save datos.tmp x -ascii
guarda la variable x en ASCII de 8 dígitos en el archivo llamado datos.tmp. El comando save
puede guardar más 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 razón es que si bien
save en ASCII puede escribir múltiples variables, load lee todo el archivo de datos y lo coloca en
una variable. Además, 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 extensión.
Por tanto, el archivo de datos y_da.t debe estar sólo en uno de los siguientes formatos de
datos:
(1) un solo número
(2) un vector de fila
(3) un vector de columna
(4) una matriz
29
Si tiene necesidad de cargar múltiples 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 métodos más avanzados para exportar e importar archivos de datos, consulte la guía
de usuario de MATLAB.
1.9 OBTENCIÓN DE UNA COPIA IMPRESA
Algo que muchos usuarios desean saber es cómo 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 sección 1.1. Si utiliza diary sin un nombre
de archivo específico, el archivo tendrá el nombre diary en el directorio. El archivo puede
imprimirse como archivo de texto. No pueden capturarse figuras gráficas en diary.
Bibliografía


MATLAB Fundamentos y aplicaciones al cálculo diferencial e integral. Departamento de
Ciencias Básicas de la Universidad Don Bosco. Soyapango.
Nakamura, S. Análisis numérico y visualización gráfica con MATLAB, Prentice-Hall
Hispanoamérica. México DF.
Descargar