Vous êtes sur la page 1sur 127

1

MATLAB es el nombre abreviado de MATrix LABoratory. MATLAB es un


programa para realizar clculos numricos con vectores y matrices. Como caso
particular puede tambin trabajar con nmeros escalares tanto reales como
complejos, con cadenas de caracteres y con otras estructuras de informacin
ms complejas.
Una de las capacidades ms atractivas es la de realizar una amplia variedad de
grficos en dos y tres dimensiones. MATLAB tiene tambin un lenguaje de
programacin propio. Este curso hace referencia a la versin 6.5 de este
programa, aparecida a mediados de 2002.



MATLAB es un gran programa de clculo tcnico y cientfico. Para ciertas
operaciones es muy rpido, cuando puede ejecutar sus funciones en cdigo
nativo con los tamaos ms adecuados para aprovechar sus capacidades de
vectorizacin. En otras aplicaciones resulta bastante ms lento que el cdigo
equivalente desarrollado en C/C++ o Fortran.
En la versin 6.5 MATLAB ha incorporado un acelerador JIT (Just In Time), que
mejora significativamente la velocidad de ejecucin de los ficheros *.m en ciertas
circunstancias, por ejemplo cuando no se hacen llamadas a otros ficheros *.m, no
se utilizan estructuras y clases, etc. Aunque limitado por el momento, cuando se
aplica mejora sensiblemente la velocidad, haciendo innecesarias ciertas tcnicas
utilizadas en versiones anteriores como la vectorizacin de los algoritmos.
En cualquier caso, el lenguaje de programacin de MATLAB siempre es una
magnfica herramienta de alto nivel para desarrollar aplicaciones tcnicas, fcil de
utilizar y que, como ya se ha dicho, aumenta significativamente la productividad
de los programadores respecto a otros entornos de desarrollo.
MATLAB dispone de un cdigo bsico y de varias libreras especializadas
(toolboxes). En estos apuntes se har referencia exclusiva al cdigo bsico.
MATLAB se puede arrancar como cualquier otra aplicacin de Windows, clicando
dos veces en el icono correspondiente en el escritorio o por medio del men
Inicio). Al arrancar MATLAB se abre una ventana del tipo de la indicada en la
Figura 1.
sta es la vista que se obtiene eligiendo la opcin Desktop Layout/Default, en el
men View. Como esta configuracin puede ser cambiada fcilmente por el
usuario, es posible que en muchos casos concretos lo que aparezca sea muy
diferente. En cualquier caso, una vista similar se puede conseguir con el citado
comando View/Desktop Layout/Default. Esta ventana inicial requiere unas
primeras explicaciones.
2


















Figura 1. Ventana inicial de MATLAB 6.5.

La parte ms importante de la ventana inicial es la Command Window, que
aparece en la parte derecha. En esta sub-ventana es donde se ejecutan los
comandos de MATLAB, a continuacin del prompt (aviso) caracterstico (>>), que
indica que el programa est preparado para recibir instrucciones. En la pantalla
mostrada en la Figura 1 se ha ejecutado el comando A=magic(4), mostrndose a
continuacin el resultado proporcionado por MATLAB.
En la parte superior izquierda de la pantalla aparecen dos ventanas tambin muy
tiles: en la parte superior aparece la ventana Current Directory, que se puede
alternar con Workspace clicando en la pestaa correspondiente.
La ventana Current Directory muestra los ficheros del directorio activo o actual.
A diferencia de versiones anteriores de MATLAB en que el directorio activo se
deba cambiar desde la Command Window, a partir de la versin 6.0 se puede
cambiar desde la propia ventana (o desde la barra de herramientas, debajo de la
barra de mens) con los mtodos de navegacin de directorios propios de
Windows. Clicando dos veces sobre alguno de los ficheros *.m del directorio
activo se abre el editor de ficheros de MATLAB, herramienta fundamental para
la programacin sobre la que se volver en las prximas pginas.
El Workspace contiene informacin sobre todas las variables que se hayan
3
definido en esta sesin y permite ver y modificar las matrices con las que se est
trabajando.
En la parte inferior derecha aparece la ventana Command History que muestra
los ltimos comandos ejecutados en la Command Window. Estos comandos se
pueden volver a ejecutar haciendo doble clic sobre ellos.
Clicando sobre un comando con el botn derecho del ratn se muestra un men
contextual con las posibilidades disponibles en ese momento. Para editar uno de
estos comandos hay que copiarlo antes a la Command Window.
En la parte inferior izquierda de la pantalla aparece una de las novedades de la
versin 6.5, el botn Start, con una funcin anloga a la del botn Inicio de
Windows. Start da acceso inmediato a ciertas capacidades del programa. La
Figura 2 muestra las posibilidades de Start/MATLAB, mientras que la Figura 3
muestra las opciones de Start/Desktop Tools, que permiten el acceso a las
principales componentes o mdulos de MATLAB. Una de estas componentes,
Launch Pad realiza un papel anlogo al botn Start, dando acceso a todos los
mdulos o componentes de MATLAB que se tengan instalados.









Puede hacerse que al arrancar MATLAB se ejecute automticamente un fichero,
de modo que aparezca por ejemplo un saludo inicial personalizado. Esto se hace
mediante un fichero de comandos que se ejecuta de modo automtico cada vez
que se entra en el programa (el fichero startup.m, que debe estar en un directorio
determinado, por ejemplo C:\Matlab6p5\Work.
Para apreciar desde el principio la potencia de MATLAB, se puede comenzar por
escribir en la Command Window la siguiente lnea, a continuacin del prompt. Al
final hay que pulsar intro.
>> A=rand(6), B=inv(A), B*A




4
A =
0.9501 0.4565 0.9218 0.4103 0.1389 0.0153
0.2311 0.0185 0.7382 0.8936 0.2028 0.7468
0.6068 0.8214 0.1763 0.0579 0.1987 0.4451
0.4860 0.4447 0.4057 0.3529 0.6038 0.9318
0.8913 0.6154 0.9355 0.8132 0.2722 0.4660
0.7621 0.7919 0.9169 0.0099 0.1988 0.4186
B =
5.7430 2.7510 3.6505 0.1513 -6.2170 -2.4143
-4.4170 -2.5266 -1.4681 -0.5742 5.3399 1.5631
-1.3917 -0.6076 -2.1058 -0.0857 1.5345 1.8561
-1.6896 -0.7576 -0.6076 -0.3681 3.1251 -0.6001
-3.6417 -4.6087 -4.7057 2.5299 6.1284 0.9044
2.7183 3.3088 2.9929 -0.1943 -5.1286 -0.6537
ans =
1.0000 0.0000 0 0.0000 0.0000 -0.0000
0.0000 1.0000 0.0000 0.0000 -0.0000 0.0000
0 0 1.0000 -0.0000 -0.0000 0.0000
0.0000 0 -0.0000 1.0000 -0.0000 0.0000
-0.0000 0.0000 -0.0000 -0.0000 1.0000 0.0000
-0.0000 -0.0000 -0.0000 -0.0000 -0.0000 1.0000
En realidad, en la lnea de comandos anterior se han escrito tres instrucciones
diferentes, separadas por comas. Como consecuencia, la respuesta del programa
tiene tres partes tambin, cada una de ellas correspondiente a una de las
instrucciones.
Con la primera instruccin se define una matriz cuadrada (6x6) llamada A, cuyos
elementos son nmeros aleatorios entre cero y uno (aunque aparezcan slo 4
cifras, han sido calculados con 16 cifras de precisin). En la segunda instruccin
se define una matriz B que es igual a la inversa de A. Finalmente se ha
multiplicado B por A, y se comprueba que el resultado es la matriz unidad
1
.
Es con grandes matrices o grandes sistemas de ecuaciones como MATLAB
obtiene toda la potencia del ordenador. Por ejemplo, las siguientes instrucciones
permiten calcular la potencia de clculo del ordenador en Megaflops (millones de
operaciones aritmticas por segundo).
En la primera lnea se crean tres matrices de tamao 10001000, las dos
primeras con valores aleatorios y la tercera con valores cero. La segunda lnea

1
Al invertir la matriz y al hacer el producto posterior se han introducido pequeos
errores numricos de redondeo en el resultado, lo cual hace que no todos los
elementos cero del resultado aparezcan de la misma forma.

5
toma tiempos, realiza el producto de matrices, vuelve a tomar tiempos y calcula
de modo aproximado el nmero de millones de operaciones realizadas. La tercera
lnea calcula los Megaflops por segundo, para lo cual utiliza la funcin etime()
que calcula el tiempo transcurrido entre dos instantes definidos por dos llamadas
a la funcin clock
2
:
>> n=1000; A=rand(n); B=rand(n); C=zeros(n);
>> tini=clock; C=B*A; tend=clock; mflops=(2*n^3)/1000000;
>> mflops/etime(tend,tini)
Otro de los puntos fuertes de MATLAB son los grficos, que se vern con ms
detalle en una seccin posterior. A ttulo de ejemplo, se puede teclear la siguiente
lnea y pulsar intro:
>> x=-4:.01:4; y=sin(x); plot(x,y), grid, title('Funcin seno(x)')
En la Figura 4 se puede observar que se abre una nueva ventana en la que
aparece representada la funcin sin(x). Esta figura tiene un ttulo "Funcin
seno(x)" y una cuadrcula o "grid". En realidad la lnea anterior contiene tambin
varias instrucciones separadas por comas o puntos y comas. En la primera se
crea un vector x con 801 valores reales entre -4 y 4, separados por una
centsima. A continuacin se crea un vector y, cada uno de cuyos elementos es
el seno del correspondiente elemento del vector x. Despus se dibujan los valores
de y en ordenadas frente a los de x en abscisas. Las dos ltimas instrucciones
establecen la cuadrcula y el ttulo.











Un pequeo aviso antes de seguir adelante. Adems de con la Command

2
En un porttil con Pentium IV Mobile a 2 Ghz el nmero de Mflops puede ser del
orden de 1350. Hace 10 aos un ordenador de esta potencia hubiera costado
varios millones de Euros.

6
History, es posible recuperar comandos anteriores de MATLAB y moverse por
dichos comandos con el ratn y con las teclas-flechas y . Al pulsar la primera
de dichas flechas aparecer el comando que se haba introducido inmediatamente
antes. De modo anlogo es posible moverse sobre la lnea de comandos con las
teclas y , ir al principio de la lnea con la tecla Inicio, al final de la lnea con
Fin, y borrar toda la lnea con Esc. Recurdese que slo hay una lnea activa (la
ltima).
Para borrar todas las salidas anteriores de MATLAB y dejar limpia la Command
Window se pueden utilizar las funciones clc y home. La funcin clc (clear
console) elimina todas las salidas anteriores, mientras que home las mantiene,
pero lleva el prompt (>> ) a la primera lnea de la ventana.








Si se desea salir de MATLAB basta teclear los comandos quit o exit, elegir Exit
MATLAB en el men File o utilizar cualquiera de los medios de terminar una
aplicacin en Windows.
MATLAB 6.5 dispone de un excelente Help con el que se puede encontrar la
informacin que se desee. La Figura 5 muestra las distintas opciones que
aparecen en el men Help de la ventana principal de la aplicacin:
1 Full Product Family Help, Se abre la ventana de la Figura 6, en la que se
puede buscar informacin general sobre MATLAB o sobre otros productos
de la familia a los que se tenga acceso. La forma de la ventana de ayuda es
tpica y comn con otros niveles de ayuda. La mayor parte de las pginas
de ayuda estn en formato HTML.
2 Matlab Help. Se abre la ventana de la Figura 7, en la que se puede buscar
ayuda general sobre MATLAB o sobre la funcin o el concepto que se
desee. La portada de esta ayuda tiene tres captulos principales: Learning
Matlab, que contiene distintos apartados de introduccin al programa;
Finding Functions and Properties, que permite acceder a informacin
concreta sobre las distintas funciones o propiedades de los objetos
grficos; y Printing the Documentation, que da acceso a versiones
completas e imprimibles de los manuales del programa en formato PDF
Figura 5: Men de Help Matlab
7
(Portable Document Format), que precisa del programa Adobe Acrobat
Reader 5.0 o superior. En la parte izquierda de la ventana, cuando est
seleccionada la pestaa Contents, aparece un ndice temtico estructurado
en forma de rbol que puede ser desplegado y recorrido con gran facilidad.
Las restantes pestaas de esta ventana dan acceso a un ndice por
palabras (Index), a un formulario de bsqueda (Search) y a una seccin en
la que el usuario puede almacenar enlaces a las pginas que ms vaya a
utilizar (Favorites).
3 Using the Desktop. Se abre una ventana de ayuda con un formato similar
a las de las Figuras anteriores con informacin detallada sobre cmo utilizar
y configurar el entorno de desarrollo. Las distintas herramientas disponibles
se describen sucesivamente. Cada pgina dispone de flechas y enlaces
que permiten ir a la pgina siguiente o volver a la anterior.
4 Using the Command Window. Esta opcin del men Help da acceso a la
informacin necesaria para aprovechar las capacidades de la Command
Window, que es el corazn de MATLAB.
5 Demos. Se abre una ventana que da acceso a un buen nmero de
ejemplos resueltos con MATLAB, cuyos resultados se presentan
grficamente de diversas formas. Es bastante interesante recorrer estos
ejemplos para hacerse idea de las posibilidades del programa. Es asimismo
muy instructivo analizar los ficheros *.m de los ejemplos que renen
caractersticas similares a las de la aplicacin de se desea desarrollar.



Adems, se puede tambin recurrir al Help desde la lnea de comandos de la
Command Window. Se aconseja hacer prcticas al respecto. Por ejemplo,
obsrvese la respuesta a los siguientes usos del comando help:
>> help
Figura 7: Ventana inicial de Help Matlab
Figura 6: Ventana inicial de Help
full Product Family
8
>> help lang
El comando helpwin seguido de un nombre de comando o de funcin muestra la
informacin correspondiente a ese comando en la ventana Help (ver Figura 6). En
la parte superior de la ventana se muestra un enlace View code for , que
permite acceder al cdigo fuente si est disponible; con la opcin Go to online
doc for ... se accede a una informacin ms completa que puede incluir ejemplos
y comandos similares sobre los que tambin se ofrece ayuda. Al final de la pgina
aparece una lista de enlaces See Also a funciones relacionadas).
El comando doc tecleado en la lnea de comandos equivale a Help/Full Product
Family Help; si va seguido de un nombre de comando o funcin se muestra la
informacin detallada correspondiente a ese comando de modo similar a Go to
online doc for ... en el prrafo anterior.
En resumen, MATLAB dispone de una ayuda muy completa y accesible,
estructurada en varios niveles (lnea de comandos en la Command Window,
ventana Help, manuales en formato PDF), con la que es muy importante estar
familiarizado, porque hasta los ms expertos programadores tienen que acudir a
ella con una cierta frecuencia.
El entorno de trabajo de MATLAB ha mejorado mucho a partir de la versin 6.0,
hacindose mucho ms grfico e intuitivo, similar al de otras aplicaciones
profesionales de Windows. En la introduccin a MATLAB realizada en el
apartado 2.2 y en la Figura 1 ya se han citado algunas de las componentes ms
importantes de este entorno de trabajo o de desarrollo. Ahora de explicarn estos
componentes con un poco ms de detalle.
Los componentes ms importantes del entorno de trabajo de MATLAB 6.5 son los
siguientes:
1. El Escritorio de Matlab (Matlab Desktop), que es la ventana o contenedor de
mximo nivel en la que se pueden situar (to dock) las dems componentes.
2. Los componentes individuales, orientados a tareas concretas, entre los que
se puede citar:
a) La ventana de comandos (Command Window),
b) La ventana histrica de comandos (Command History),
c) El espacio de trabajo (Workspace),
d) La plataforma de lanzamiento (Launch Pad),
e) El directorio actual (Current Directory),
f) La ventana de ayuda (Help)
g) El editor de ficheros y depurador de errores (Editor&Debugger),
h) El editor de vectores y matrices (Array Editor).
9
i) La ventana que permite estudiar cmo se emplea el tiempo de ejecucin
(Profiler).
A continuacin se describen brevemente estos componentes. Tngase en cuenta
que utilizar MATLAB y desarrollar programas para MATLAB es mucho ms fcil si
se conoce bien este entorno de trabajo. Es por ello muy importante leer con
atencin las secciones que siguen.



El Matlab Desktop es la ventana ms general de la aplicacin. El resto de las
ventanas o componentes citadas pueden alojarse en la Matlab Desktop o
Figura 8: Configuracin por
defecto del Matlab Desktop
Figura 9: Menu para configurar el
Matlab Desktop
10
ejecutarse como ventanas independientes. A su vez, los componentes alojados
en el Matlab Desktop pueden aparecer como sub-ventanas independientes o
como pestaas dentro de una de las sub-ventanas. MATLAB 6.5 ofrece una gran
flexibilidad al respecto y es cada usuario quien decide en qu forma desea utilizar
la aplicacin.
Cuando se arranca MATLAB por primera vez o cuando se ejecuta el comando
View/Desktop Layout/Default aparece una ventana como la mostrada en la
Figura 8. Aunque dividida en tres zonas, en realidad aparecen cuatro
componentes, pues la sub-ventana superior izquierda contiene dos componentes
superpuestos que se permutan por medio de la pestaa correspondiente.
La Figura 9 muestra un detalle del men View, desde el que se controlan los
componentes visibles y la forma en que se visualizan. Por ejemplo, como en la
Figura 8 la ventana activa es la Command Window, en el men de la Figura 9
aparece la opcin de dejar de alojar dicha ventana en el Matlab Desktop
(Undock Command Window).
Dicho men permite tambin eliminar del Desktop alguno de los componentes
visibles o visualizar el Help (que no est visible). Con los submens de Desktop
Layout se pueden adoptar algunas configuraciones predefinidas, como la
configuracin por defecto (Default) o incluir slo la Command Window. La
configuracin adoptada por el usuario se mantendr la siguiente vez que arranque
el programa.
Adems de con el men mostrado en la Figura 9, que cambia en algunos detalles
segn cual sea la ventana activa, el usuario puede configurar el Matlab Desktop
por medio del ratn mediante algunas operaciones como las siguientes:
1 Colocando el ratn sobre los bordes intermedios de las sub-ventanas y
arrastrando puede modificar su tamao en la forma que desee.
2 Clicando sobre la barra de ttulo y arrastrando una sub-ventana activa
(Figura 10) se puede llevar a otra parte del Desktop, obtenindose el
resultado mostrado en la Figura 11.
3 Si todas las ventanas se van seleccionando sucesivamente y se elige la
correspondiente opcin Undock... en el men View, se podra obtener una
configuracin como la mostrada en la Figura 12, en la que todas las
ventanas son independientes y aparecen separadas en la barra de tareas.
4 Finalmente, si se parte de la configuracin por defecto y cada uno de los
componentes se arrastra sobre la Command Window se puede obtener
una configuracin como la mostrada en la Figura 13, en la que todos los
componentes abiertos aparecen como pestaas alternativas en una
ventana nica.

11

La variedad de configuraciones mostradas en las figuras precedentes da una idea
de las posibilidades de adaptacin a las preferencias del usuario que tiene la
versin 6.5 de MATLAB. Otros componentes como el Help Browser podran
aadirse a esta ventana de forma anloga. En los apartados siguientes se
analizan algunas de las posibilidades de cada componente.
sta es la ventana en la que se ejecutan interactivamente las instrucciones de
MATLAB y en donde se muestran los resultados correspondientes, si es el caso.
En cierta forma es la ventana ms importante y la nica que exista en las
primeras versiones de la aplicacin. En esta nueva versin se han aadido
algunas mejoras significativas, como las siguientes:
1 Se permiten lneas de comandos muy largas que automticamente siguen
en la lnea siguiente al llegar al margen derecho de la ventana. Para ello
hay que activar la opcin Wrap Lines, en el men
File/Preferences/Command Window.
2 Clicando con el botn derecho sobre el nombre de una funcin que
aparezca en esta ventana se tiene acceso a la pgina del Help sobre dicha
funcin. Si el cdigo fuente (fichero *.m) est disponible, tambin se puede
acceder al fichero correspondiente por medio del Editor/Debugger.
3 Comenzando a teclear el nombre de una funcin y pulsando la tecla Tab,
MATLAB completa automticamente el nombre de la funcin, o bien
muestra en la lnea siguiente todas las funciones disponibles que
comienzan con las letras tecleadas por el usuario.
4 Cuando al ejecutar un fichero *.m se produce un error y se obtiene el
correspondiente mensaje en la Command Window, MATLAB muestra
mediante un subrayado un enlace a la lnea del fichero fuente en la que
se ha producido el error. Clicando en ese enlace se va a la lnea
correspondiente del fichero por medio del Editor/Debugger.
12
El Launch Pad es un componente muy general que da acceso a otros
componentes de MATLAB, sin tener que recurrir a los mens o a otros comandos.
Entre ellos se pueden citar al Help Browser, a las Demos, al Current Directory,
al Workspace, al Path y a GUIDE (Graphic Interface Builder).
Algunos de estos componentes ya han sido citados y otros se explicarn ms
adelante. Este componente fue una novedad de la versin 6.0, pero en la versin
6.5 las mismas funciones son realizadas de un modo ms ventajoso por el botn
Start, en la parte inferior izquierda de la pantalla.
El Command History Browser ofrece acceso a las sentencias que se han
ejecutado anteriormente en la Command Window. Estas sentencias estn
tambin accesibles por medio de las teclas y como en las versiones
anteriores, pero esta ventana facilita mucho el tener una visin ms general de lo
hecho anteriormente y seleccionar lo que realmente se desea repetir.
Las sentencias ejecutadas anteriormente se pueden volver a ejecutar mediante un
doble clic o por medio del men contextual que se abre al clicar sobre ellas con el
botn derecho. Tambin se pueden copiar y volcar sobre la lnea de comandos,
pero se ha de copiar toda la lnea, sin que se admita la copia de un fragmento de
la sentencia. Existen opciones para borrar algunas o todas las lneas de esta
ventana. Tambin este componente fue una novedad a partir de la versin 6.0.
El concepto de directorio activo o directorio actual es muy importante en
MATLAB. Los programas de MATLAB se encuentran en ficheros con la extensin
*.m. Estos ficheros se ejecutan tecleando su nombre en la lnea de comandos (sin
la extensin), seguido de los argumentos entre parntesis, si se trata de
funciones. No todos los ficheros *.m que se encuentren en el disco duro o en
otras unidades lgicas montadas en una red local son accesibles sin ms. Para
que un fichero *.m se pueda ejecutar es necesario que se cumpla una de las dos
condiciones siguientes:
1 Que est en el directorio actual. MATLAB mantiene en todo momento un
nico directorio con esta condicin. Este directorio es el primer sitio en el
que MATLAB busca cuando desde la lnea de comandos se le pide que
ejecute un fichero.
2 Que est en uno de los directorios indicados en el Path de MATLAB. El
Path es una lista ordenada de directorios en los que el programa busca los
ficheros o las funciones que ha de ejecutar. Muchos de los directorios del
Path son propios de MATLAB, pero los usuarios tambin pueden aadir
sus propios directorios, normalmente al principio o al final de la lista. En un
prximo apartado se ver cmo se controla el Path.
13
El comando pwd (de print working directory) permite saber cul es el directorio
actual. Para cambiar de directorio actual se puede utilizar el comando cd (de
change directory) en la lnea de comandos, seguido del nombre del directorio,
para el cual se puede utilizar un path absoluto (por ejemplo cd
C:\Matlab\Ejemplos) o relativo (cd Ejemplos). Para subir un nivel en la jerarqua
de directorios se utiliza el comando cd .., y cd ../.. para subir dos niveles.
ste es el mismo sistema que se sigue para cambiar de directorio en las ventanas
de MS-DOS. MATLAB permite utilizar tanto la barra normal (/) como la barra
invertida (\), indistintamente. El comando cd era el nico sistema de cambio de
directorio actual hasta la versin 6.0 de MATLAB.
El Current Directory Browser permite explorar los directorios del ordenador en
forma anloga a la del Explorador u otras aplicaciones de Windows. Cuando se
llega al directorio deseado se muestran los ficheros y ficheros all contenidos. El
Current Directory Browser permite ordenarlos por fecha, tamao, nombre, etc.
El directorio actual cambia automticamente en funcin del directorio
seleccionado con este explorador, y tambin se puede cambiar desde la propia
barra de herramientas del Matlab Desktop. Los ficheros *.m mostrados en la
ventana Current Directory se pueden abrir con el Editor/Debugger mediante un
doble clic.
A partir del men contextual que se abre clicando con el botn derecho en
cualquier parte de la ventana Current Directory se tiene la posibilidad de aadir
ese directorio al Path de MATLAB.
MATLAB puede llamar a una gran variedad de funciones, tanto de sus propias
libreras como programadas por los usuarios. A veces puede incluso haber
funciones distintas que tienen el mismo nombre.
Interesa saber cules son las reglas que determinan qu funcin o qu fichero *.m
es el que se va a ejecutar cuando su nombre aparezca en una lnea de comandos
del programa. Esto queda determinado por el camino de bsqueda (search
path) que el programa utiliza cuando encuentra el nombre de una funcin.
El search path de MATLAB es una lista de directorios que se puede ver y
modificar a partir de la lnea de comandos, o utilizando el cuadro de dilogo Set
Path, del men File. El comando path hace que se escriba el search path de
MATLAB (el resultado depende de en qu directorio est instalado MATLAB; se
muestran slo unas pocas lneas de la respuesta real del programa):
>> path
>> path MATLABPATH
C:\MATLAB6p5\toolbox\matlab\general
C:\MATLAB6p5\toolbox\matlab\ops
14
C:\MATLAB6p5\toolbox\matlab\lang
C:\MATLAB6p5\toolbox\matlab\elmat
...
C:\MATLAB6p5\toolbox\matlab\winfun
C:\MATLAB6p5\toolbox\matlab\winfun\comcli
C:\MATLAB6p5\toolbox\matlab\demos
C:\MATLAB6p5\toolbox\local
C:\MATLAB6p5\work
Para ver cmo se utiliza el search path supngase que se utiliza la palabra
nombre1 en un comando. El proceso que sigue el programa para tratar de
conocer qu es nombre1 es el siguiente:
1 Comprueba si nombre1 es una variable previamente definida por el
usuario.
2 Comprueba si nombre1 es una funcin interna o intrnseca de MATLAB.
3 Comprueba si nombre1 es una sub-funcin o una funcin privada del
usuario (ver apartado 6.3).
4 Comprueba si hay un fichero llamado nombre1.mex, nombre1.dll o
nombre1.m en el directorio actual, cuyo contenido se obtiene con el
comando dir. Ya se ha visto cmo se cambiaba el directorio actual.
5 Comprueba si hay ficheros llamados nombre1.mex, nombre1.dll o
nombre1.m en los directorios incluidos en el search path de MATLAB.
Estos pasos se realizan por el orden indicado. En cuanto se encuentra lo que se
est buscando se detiene la bsqueda y se utiliza el fichero que se ha
encontrado. Conviene saber que, a igualdad de nombre, los ficheros *.mex tienen
precedencia sobre los ficheros *.m que estn en el mismo directorio.










El cuadro de dilogo que se abre con el comando File/Set Path ayuda a definir la
lista de directorios donde MATLAB debe buscar los ficheros de comandos y las
funciones, tanto del sistema como de usuario. Al ejecutar dicho comando aparece
el cuadro de dilogo de la Figura 14, en el cual se muestra la lista de directorios
15
en la que MATLAB buscar.
Para aadir (o quitar) un directorio a esta lista se debe clicar sobre los botones
Add Folder o Add with Subfolders, con lo cual aparece un nuevo cuadro de
dilogo, mostrado en la Figura 15, que ayuda a elegir el directorio deseado.
El nuevo directorio se aade al comienzo de la lista, pero desde esa posicin
puede desplazarse hacia abajo o hasta el final con los botones Move Down o
Move to Botton, respectivamente. Como ya se ha dicho el orden de la lista es
muy importante, porque refleja el orden de la bsqueda: si dos funciones con el
mismo nombre estn en dos directorios diferentes, se utilizar la que primero se
encuentre. El cuadro de dilogo Set Path contiene los botones necesarios para
realizar todas las operaciones que el usuario desee.
Para incluir desde la lnea de comandos de MATLAB un directorio nuevo al
comienzo del Path sin utilizar el cuadro de dilogo Set Path, se puede utilizar
tambin el comando path, que concatena dos listas de directorios (slo se deben
utilizar directorios que realmente existan en el PC), como por ejemplo:
>> path('c:\mat\matlab', path)
3


mientras que para aadir el nuevo directorio al final de la lista, se utilizara el
comando:
>> path(path, 'c:\mat\practicas')
El comando addpath permite aadir uno o ms directorios al Path. Su forma
general puede verse en los siguientes ejemplos:
>> addpath 'c:\Matlab' 'c:\Temp' -end
>> addpath 'c:\Matlab\Pruebas' 'c:\Temp\Pruebas' -begin
donde la opcin por defecto (cuando no se pone ni -begin ni -end) es aadir al
comienzo de la lista. Despus de ejecutar estos comandos conviene comprobar
cmo ha quedado modificado el search path (recurdese que los directorios
deben existir en realidad).
No es difcil borrar las lneas que se han introducido en el Path: por una parte, los
cambios no son permanentes y dejarn de surtir efecto al salir de MATLAB y
volver a entrar (salvo que se guarden como opciones estables). Adems se puede
utilizar el comando rmpath (de remove path), al que se le pasan la lista de
directorios a eliminar del Path. Por ejemplo, el comando:
>> rmpath 'c:\Matlab' 'c:\Temp'
borra del Path los dos directorios indicados.

El espacio de trabajo de MATLAB (Workspace) es el conjunto de variables y de

3
El comando path dentro del parntesis de la funcin devuelve la lista del directorio anterior.
16
funciones de usuario que en un determinado momento estn definidas en la
memoria del programa. Para obtener informacin sobre el Workspace desde la
lnea de comandos se pueden utilizar los comandos who y whos. El segundo
proporciona una informacin ms detallada que el primero. Por ejemplo, una
salida tpica del comando whos es la siguiente:
>>whos
Name Size Bytes Class
A 3x3 72 double array
B 3x3 72 double array
C 3x3 72 double array
D 3x3 72 double array
Grand total is 36 elements using 288 bytes
stas son las variables del espacio de trabajo base (el de la lnea de comandos
de MATLAB). Ms adelante se ver que cada funcin tiene su propio espacio de
trabajo, con variables cuyos nombres no interfieren con las variables de los otros
espacios de trabajo.
La ventana Workspace Browser constituye un entorno grfico para ver las
variables definidas en el espacio de trabajo. Se activa con el comando
View/Workspace. La Figura 16 muestra el aspecto inicial del Workspace
Browser cuando se abre desde un determinado programa.
Haciendo doble clic por ejemplo sobre la matriz BARS aparece una nueva
ventana (o pestaa, si la ventana ya exista) del Array Editor, en la que se
muestran y pueden ser modificados los elementos de dicha matriz (ver Figura 17).

Es importante insistir en que cada una de las funciones de MATLAB tiene su
propio espacio de trabajo, al que en principio slo pertenecen las variables
recibidas como argumentos o definidas dentro de la propia funcin.
En la barra de herramientas del Workspace Browser aparece una lista
desplegable (Stack) con los espacios de trabajo del programa actual. Hay que
17
tener en cuenta que cuando se termina de ejecutar una funcin y se devuelve el
control al programa que la haba llamado, las variables definidas en la funcin
dejan de existir (salvo que se hayan declarado como persistent) y tambin deja
de existir su espacio de trabajo.
Si se desean examinar otras matrices y/o vectores, al hacer doble clic sobre ellas
el Array Editor las muestra en la misma ventana como subventana con una
pestaa diferente.
Clicando con el botn derecho sobre alguna de las variables del Workspace
Browser se abre un men contextual que ofrece algunas posibilidades
interesantes, como por ejemplo la de representar grficamente dicha variable.
El Array Editor no slo permite ver los valores de los elementos de cualquier
matriz o vector definido en el programa: es tambin posible modificar estos
valores clicando sobre la celda correspondiente. La ventana del Array Editor
incluye una lista desplegable en la que se puede elegir el formato en el que se
desea ver los datos.
El Array Editor es muy til tambin para entender bien ciertos algoritmos,
ejecutando paso a paso un programa y viendo cmo cambian los valores de las
distintas variables. Es posible aparcar o situar las ventanas o pestaas del Array
Editor en la misma ventana del Editor/Debugger, que se va a ver a continuacin.
En MATLAB tienen particular importancia los ya citados ficheros-M (o M-files).
Son ficheros de texto ASCII, con la extensin *.m, que contienen conjuntos de
comandos o definicin de funciones (estos ltimos son un poco ms
complicados
y se vern ms adelante). La importancia de estos ficheros-M es que al teclear
su nombre en la lnea de comandos y pulsar Intro, se ejecutan uno tras otro todos
los comandos contenidos en dicho fichero. El poder guardar instrucciones y
grandes matrices en un fichero permite ahorrar mucho trabajo de tecleado.

Aunque los ficheros *.m se pueden crear con cualquier editor de ficheros ASCII tal
como Notepad, MATLAB dispone de un editor que permite tanto crear y
18
modificar estos ficheros, como ejecutarlos paso a paso para ver si contienen
errores (proceso de Debug o depuracin).
La Figura 18 muestra la ventana principal del Editor/Debugger, en la que se ha
tecleado un fichero-M llamado Prueba1.m, que contiene un comentario y seis
sentencias
4
. El Editor muestra con diferentes colores los diferentes tipos o
elementos constitutivos de los comandos (en verde los comentarios, en rojo las
cadenas de caracteres, etc.).
El Editor se preocupa tambin de que las comillas o parntesis que se abren, no
se queden sin el correspondiente elemento de cierre. Colocando el cursor antes o
despus de una apertura o cierre de corchete o parntesis y pulsando las teclas
() o (), el Editor muestra con qu cierre o apertura de corchete o parntesis
se empareja el elemento considerado; si no se empareja con ninguno, aparece
con una rayita de tachado.
Seleccionando varias lneas y clicando con el botn derecho aparece un men
contextual cuya sentencia Comment permite entre otras cosas comentar con el
carcter % todas las lneas seleccionadas. .
Estos comentarios pueden volver a su condicin de cdigo ejecutable
seleccionndolos y ejecutando Uncomment en el men contextual. Otra opcin
muy til del mismo men contextual es Smart Indent, que organiza el sangrado
de los bucles y bifurcaciones de las sentencias seleccionadas.
La Figura 19 corresponde a una ejecucin de este fichero de comandos
controlada con el Debugger. Dicha ejecucin se comienza eligiendo el comando
Run en el men Debug, pulsando la tecla F5, clicando en el botn Continue ( )
de la barra de herramientas del Editor o tecleando el nombre del fichero en la
lnea de comandos de la Command Window.
Los puntos rojos que aparecen en el margen izquierdo son breakpoints (puntos
en los que se detiene la ejecucin de programa); la flecha verde en el borde
izquierdo indica la sentencia en que est detenida la ejecucin (antes de ejecutar
dicha sentencia); cuando el cursor se coloca sobre una variable (en este caso
sobre la matriz A) aparece una pequea ventana con los valores numricos de
esa variable, tal como se ve en la Figura 19.
En la Figura 19 puede apreciarse tambin que estn activados los botones que
corresponden al Debugger. El significado de estos botones, que aparece al
colocar el cursor sobre cada uno de ellos, es el siguiente:
Set/Clear Breakpoint. Coloca o borra un breakpoint en la lnea en que
est el cursor.
Clear All Breakpoints. Elimina todos los breakpoints que haya en el
fichero.
Step. Avanzar un paso sin entrar en las funciones de usuario que se

4
Las seis sentencias de prueba1.m son las siguientes (reagrupadas en dos lneas).
Clear all; A = rand (3,3); B=A;
C=inv(A); D=C*A; disp (Ya he terminado);
19
llamen en esa lnea.
Step In. Avanzar un paso, y si en ese paso hay una llamada a una funcin cuyo
fichero *.m est accesible, entra en dicha funcin.
Step Out. Salir de la funcin que se est ejecutando en ese momento.
Continue. Continuar la ejecucin hasta el siguiente breakpoint.
Quit Debugging. Terminar la ejecucin del Debugger.
Stack. En la parte derecha de la barra de herramientas aparece esta lista
desplegable (no visible en la Figura 19) mediante la cual se puede elegir el
contexto, es decir el espacio de trabajo o el mbito de las variables que se
quieren examinar.
Ya se ha comentado que el espacio de trabajo base (el de las variables creadas
desde la lnea de comandos) y el espacio de trabajo de cada una de las funciones
son diferentes.
El Debugger es un programa que hay que conocer muy bien, pues es muy til
para detectar y corregir errores. Es tambin enormemente til para aprender
mtodos numricos y tcnicas de programacin. Para aprender a manejar el
Debugger lo mejor es practicar.
Cuando se est ejecutando un programa con el Debugger, en cualquier momento
se puede ir a la lnea de comandos de MATLAB y teclear una expresin para ver
su resultado.
Tambin se puede seleccionar con el ratn una sub-expresin en cualquier lnea
vista en el Editor/Debugger, clicar con el botn derecho y en el men contextual
que se abre elegir Evaluate Selection. El resultado de evaluar esa sub-expresin
aparece en la lnea de comandos de MATLAB.
Ya en las versiones anteriores MATLAB dispona de un Debugger alfanumrico
que se utilizaba desde la lnea de comandos y en el que est basado el nuevo
Debugger grfico del que se ha hablado anteriormente.
De hecho, al realizar operaciones con el Debugger grfico van apareciendo las
correspondientes instrucciones en la lnea de comandos de MATLAB. Para ms
informacin sobre los comandos del Debugger alfanumrico, buscar en la
seccin Editing and Debugging M-Files en Help/Matlab/Using
Matlab/Development Environment.
Seleccionando el nombre de una funcin o de un fichero de comandos en el
cdigo mostrado en la ventana del Editor/Debugger y abriendo con el botn
derecho el men contextual correspondiente, se ofrecen las tres posibilidades
Evaluate Selection, Open Selection y Help on Selection, que son muy tiles
para comprobar, ver o recibir ayuda sobre la funcin seleccionada.
El profiler es una utilidad que permite saber cmo se ha empleado el tiempo de la
CPU en la ejecucuin de un determinado programa. El profiler es una
herramienta muy til para determinar los cuellos de botella de un programa, es
20
decir las funciones y las lneas de cdigo que ms veces se llaman y que se
llevan la mayor parte del tiepo de ejecucin.
Es obvio que, cuando se trata de mejorar la eficiencia de un programa, es ms
importante tratar de mejorar una funcin que se lleva el 60% del tiempo total que
otra que slo se lleva el 2%. Dentro de la funcin ms llamada, el profiler
proporcina informacin sobre el tiempo que se lleva cada sentencia, y da tambin
algunas orientaciones sobre las posibilidades de mejorarla.
Para explicar el profiler es mejor haber avanzado ms en el conocimiento de
MATLAB. Por eso, su presentacin se demorar hasta la seccin 6.11, a partir de
la pgina 90.
MATLAB 6.5 dispone de un cuadro de dilogo desde el que se establecen casi
todas las opciones que el usuario puede determinar por su cuenta. Este cuadro de
dilogo se abre con el comando Preferences del men File. En la Figura 20 se
aparece el cuadro de dilogo Preferences mostrando todas las posibilidades que
ofrece en el men de la izquierda: en total son 18 cuadros de dilogo diferentes.
La Figura 21 muestra el que permite elegir los tipos de letra y los colores
generales.


El
cuad
ro
de
dilo
go
Co
mm
and
Win
dow/Font&Colors (similar al mostrado en la Figura 21) ofrece la posibilidad de
elegir el tipo de letra as como el tamao y el color, tanto de las letras como del
fondo con la que se escribe en la ventana de comandos de MATLAB.
Es muy importante utilizar tipos de letra de tamao constante (Fixedsys o
Courier New), para que las filas de las matrices se alineen bien en la pantalla.
Respecto a los formatos numricos con que MATLAB muestra los resultados
(recurdese que siempre calcula con doble precisin, es decir con unas 16 cifras
decimales equivalentes), las posibilidades existentes se muestran en la lista
desplegable de la Figura 22 y son las siguientes:
21
short coma fija con 4 decimales (defecto)
long coma fija con 15 decimales
hex cifras hexadecimales
bank nmeros con dos cifras decimales
short e notacin cientfica con 4 decimales
short g notacin cientfica o decimal, dependiendo del valor
long e notacin cientfica con 15 decimales
long g notacin cientfica o decimal, dependiendo del valor
rat expresa los nmeros racionales como cocientes de enteros
Estos formatos se pueden cambiar tambin desde la lnea de comandos
anteponiendo la palabra format. Por ejemplo, para ver las matrices en formato
long habr que ejecutar el comando:
>> format long
Por otra parte, el formato loose introduce algunas lneas en blanco en la salida
(opcin por defecto), mientras que el formato compact elimina las lneas en
blanco citadas (es la opcin recomendada por los autores de este curso). Estas
opciones estn disponibles en el cuadro de dilogo de la Figura 22 y se pueden
tambin establecer desde la lnea de comandos en la forma:
>> format compact
El cuadro de dilogo de la Figura 23 permite elegir un editor de programas distinto
del que trae MATLAB (built-in editor), as como obligar a que los ficheros se abran
de modo automtico al ejecutarlos con el Debugger.


MATLAB aplica un factor de escala general a las matrices cuando los elementos
no enteros ms grandes o ms pequeos son superiores o inferiores a una
determinada cantidad (10
3
y 10
-3
, respectivamente).
Hay que aadir que MATLAB trata de mantener el formato de los nmeros que
han sido definidos como enteros (sin punto decimal). Si se elige la opcin format
22
rat el programa trata de expresar los nmeros racionales como cocientes de
enteros.
Ficheros matlabrc.m, startup.m y finish.m
El search path inicial o por defecto de MATLAB est definido en un fichero
llamado matlabrc.m, en el sub-directorio toolbox\local. Este fichero contiene
tambin otros parmetros de inicializacin y es, por ejemplo, el responsable de los
mensajes que aparecen al arrancar el programa. Este fichero se ejecuta
automticamente al arrancar MATLAB.
En las instalaciones de MATLAB en red, matlabrc.m es un fichero controlado por
el administrador del sistema. Una de las cosas que hace este fichero es ver si en
algn directorio del search path existe otro fichero llamado startup.m, y en caso
de que exista lo ejecuta.
Esto abre la posibilidad de que cada usuario arranque MATLAB de una forma
personalizada. Si en el search path de MATLAB se coloca un fichero creado por
el usuario llamado startup.m las instrucciones contenidas en dicho fichero se
ejecutarn automticamente cada vez que arranque MATLAB.
Un posible contenido de este fichero puede ser el siguiente (se sugiere crearlo
con Notepad):
>> format compact
>> addpath 'c:\Matlab\Practicas' - end
>> disp('Hola!')
Se puede crear fichero en el directorio indicado y probar a arrancar MATLAB. Si el
saludo Hola! se sustituye por un saludo ms personal (por ejemplo, incluyendo el
propio nombre), se comprobar lo explicado previamente. Es muy aconsejable
crear este fichero si MATLAB se utiliza en un ordenador de uso personal.
De forma anloga, al abandonar la ejecucin de MATLAB con el comando quit se
ejecuta automticamente el fichero finish.m, siempre que se encuentre en alguno
de los directorios del search path.
Este fichero se puede utilizar por ejemplo para guardar el espacio de trabajo de
MATLAB (ver apartado 2.7) y poder continuar en otro momento a partir del punto
en el que se abandon el trabajo, por ejemplo al cerrar el programa.
En muchas ocasiones puede resultar interesante interrumpir el trabajo con
MATLAB y poderlo recuperar ms tarde en el mismo punto en el que se dej (con
las mismas variables definidas, con los mismos resultados intermedios, etc.). Hay
que tener en cuenta que al salir del programa todo el contenido de la memoria se
borra automticamente.
Para guardar el estado de una sesin de trabajo existe el comando save. Si se
23
teclea:
>> save
antes de abandonar el programa, se crea en el directorio actual un fichero
binario llamado matlab.mat (o matlab) con el estado de la sesin (excepto los
grficos, que por ocupar mucha memoria hay que guardar aparte). Dicho estado
puede recuperarse la siguiente vez que se arranque el programa con el comando:
>> load
Esta es la forma ms bsica de los comandos save y load. Se pueden guardar
tambin matrices y vectores de forma selectiva y en ficheros con nombre
especificado por el usuario. Por ejemplo, el comando (sin comas entre los
nombres de variables):
>> save filename A x y
guarda las variables A, x e y en un fichero binario llamado filename.mat (o
filename). Para recuperarlas en otra sesin basta teclear:
>> load filename
Si no se indica ningn nombre de variable, se guardan todas las variables creadas
en esa sesin.
El comando save permite guardar el estado de la sesin en formato ASCII
utilizndolo de la siguiente forma (lo que va detrs del carcter (%) es un
comentario que es ignorado por MATLAB):
>> save -ascii % almacena 8 cifras decimales
>> save -ascii -double % almacena 16 cifras decimales
>> save -ascii -double -tab % almacena 16 cifras separadas por tabs
aunque en formato ASCII slo se guardan los valores y no otra informacin tal
como los nombres de las matrices y/o vectores. Cuando se recuperan estos
ficheros con load -ascii toda la informacin se guarda en una nica matriz con el
nombre del fichero. Esto produce un error cuando no todas las filas tienen el
mismo nmero de elementos.
Con la opcin -append en el comando save la informacin se guarda a
continuacin de lo que hubiera en el fichero.
El comando load admite las opciones -ascii y -mat, para obligarle a leer en
formato ASCII o binario, respectivamente.
Los comandos save y load crean ficheros binarios o ASCII con el estado de la
sesin. Existe otra forma ms sencilla de almacenar en un fichero un texto que
describa lo que el programa va haciendo (la entrada y salida de los comandos
utilizados). Esto se hace con el comando diary en la forma siguiente:
24
>> diary filename.txt
>> diary off
>> diary on
El comando diary off suspende la ejecucin de diary y diary on la reanuda. El
simple comando diary pasa de on a off y viceversa. Para poder acceder al
fichero filename.txt con Notepad o Word es necesario que diary est en off. Si
en el comando diary no se incluye el nombre del fichero se utiliza por defecto un
fichero llamado diary (sin extensin).
Ya se ha indicado que para MATLAB el carcter tanto por ciento (%) indica
comienzo de comentario. Cuando aparece en una lnea de comandos, el
programa supone que todo lo que va desde ese carcter hasta el fin de la lnea es
un comentario.
Ms adelante se ver que los comentarios de los ficheros *.m tienen algunas
peculiaridades importantes, pues pueden servir para definir help's personalizados
de las funciones que el usuario vaya creando.
MATLAB dispone de funciones que permiten calcular el tiempo empleado en las
operaciones matemticas realizadas. Algunas de estas funciones son las
siguientes:
cputime: devuelve el tiempo de CPU (con precisin de centsimas de segundo)
desde que el programa arranc. Llamando antes y despus de realizar
una operacin y restando los valores devueltos, se puede saber el tiempo
de CPU empleado en esa operacin. Este tiempo sigue corriendo aunque
MATLAB est inactivo.
etime(t2, t1): tiempo transcurrido entre los vectores t1 y t2 (atencin al orden!),
obtenidos como respuesta al comando clock. tic ops toc imprime el
tiempo en segundos requerido por ops. El comando tic pone el reloj a
cero y toc obtiene el tiempo transcurrido.
En las versiones anteriores a MATLAB 6.0 se dispona de funciones para
determinar el nmero de operaciones aritmticas realizadas:
flops(0) inicializaba a cero el contador de nmero de operaciones aritmticas de
punto flotante (flops) flops devolva el nmero de flops realizados desde la
inicializacin hasta ese momento
A partir de la versin 6.0 la funcin flops ya no est disponible. La razn
aducida en la documentacin de MATLAB es doble: Por una parte, en muchos
casos es muy difcil estimar el nmero de operaciones aritmticas realizadas (por
ejemplo, en clculo con matrices sparse), y por otra, en los computadores
25
modernos el nmero de operaciones aritmticas no es ms importante que la
gestin de la memoria, u otros factores distintos que afectan en gran manera al
tiempo de CPU.
Por otra parte, conviene recordar que la funcin flops "estimaba" y no "contaba"
el nmero de operaciones aritmticas, puesto que contarlas de modo exacto
hubiera tenido un coste prohibitivo.
A modo de ejemplo, el siguiente cdigo mide de varias formas el tiempo necesario
para resolver un sistema de 1000 ecuaciones con 1000 incgnitas. Tngase en
cuenta que los tiempos pequeos (del orden de las dcimas o centsimas de
segundo), no se pueden medir con gran precisin.
>> n=1000; A=rand(n); b=rand(n,1); x=zeros(n,1);
>> tiempo=clock; x=A\b; tiempo=etime(clock, tiempo)
>> time=cputime; x=A\b; time=cputime-time
>> tic; x=A\b; toc
donde se han puesto varias sentencias en la misma lnea para que se ejecuten
todas sin tiempos muertos al pulsar intro. Esto es especialmente importante en la
lnea de comandos en la que se quiere medir los tiempos. Todas las sentencias
de clculos matriciales van seguidas de punto y coma (;) con objeto de evitar la
impresin de resultados. Conviene ejecutar dos o tres veces cada sentencia para
obtener tiempos ptimos, ya que la primera vez que se ejecutan se emplea un
cierto tiempo en cargar las funciones a memoria.
Al resolver problemas de ingeniera, es importante poder visualizar los datos
relacionados con el problema. A veces los datos consisten en un solo nmero,
como el radio de un crculo.
En otras ocasiones, los datos podran ser una coordenada en un plano, que
puede representarse como un par de nmeros, uno de los cuales representa la
coordenada x, y el otro, la coordenada y.
En otro problema, podramos tener un conjunto de cuatro coordenadas xyz,
representando los cuatro vertices de una pirmide con base triangular en un
espacio tridimensional.
Podemos representar todos estos ejemplos usando un tipo especial de estructura
de datos Ilamado matriz, un conjunto de nmeros dispuestos en una retcula
rectangular de filas y columnas.
As, un solo punto puede considerarse como una matriz con una fila y una
columna, una coordenada xy puede considerarse una matriz con una fila y dos
columnas, y un conjunto de cuatro coordenadas xyz puede considerarse como
una matriz con cuatro filas y tres columnas. He aqu ejemplos de esto:


matriz
26




Observe que los datos contenidos en una matriz se escriben dentro de corchetes.
Si una matriz tiene una fila y una columna, podemos llamar escalar al nmero. De
forma similar, si una matriz tiene una fila o una columna, la llamamos vector; para
ser ms especficos, usamos el trmino vector fila o vector columna.
Al usar una matriz, necesitamos una forma de referirnos a los elementos o
nmeros individuales que contiene. Un mtodo sencillo para especificar un
elemento de una matriz usa el nmero de fila y el de columna. Por ejemplo, si nos
referimos al valor de la fila 4 y la columna 3 de Ia matriz C del ejemplo anterior, no
habr ambigedad: nos estamos refiriendo al valor 2.
Usamos los nmeros de fila y de columna como subndices; As, C
43
representa el
valor 2. Para referirnos a toda la matriz usamos el nombre sin subndices, como
en C. Aqu usaremos un tipo de letra especial para las matrices y comandos de
MATLAB.
Los subndices se indican en MATLAB con parntesis, como en c(4, 3).
El tamao de una matriz se especifica con el nmero de filas y de columnas. En
nuestro ejemplo anterior, C es una matriz con cuatro filas y tres columnas, o sea,
una matriz 4 x 3. Si una matriz contiene m filas y n columnas, entonces contiene
un total de m por n valores;
As, C contiene 12 valores. Si una matriz tiene el mismo nmero de cuadrada filas
y de columnas, decimos que es una matriz cuadrada.
TALLER N
Conteste las siguientes preguntas acerca de esta matriz:





1. Qu tamao tiene C?
2. D las referencias de subndices de todas las posiciones que contengan el
valor 0.5.
En los programas MATLAB, asignamos nombres a los escalares, veces que
usamos. Las siguientes reglas aplican a estos nombres de variables,.
Los nombres de variables deben comenzar con una letra.
Los nombres de variables pueden contener letras, dgitos y el
| | | | A 3.5 B 1.5 3.1
1 0 0
1 1 0
C
1 1 0
0 0 2
= =
(
(
(
=
(
(

0.6 1.5 2.3 0.5
8.2 0.5 0.1 2.0
G 5.7 8.2 9.0 1.5
0.5 0.5 2.4 0.5
1.2 2.3 4.5 0.5
(
(

(
( =
(
(
(


Escalar
Vector
Subindi
ces
Matriz
Cuadrada
27
carcter de subrayado (_).
Los nombres de variables pueden tener cualquier longitud, pero
deben ser nicos dentro de los primeros 19 caracteres.
5

MATLAB es sensible a Ia diferencia entre maysculas y minsculas, As que los
nombres Tiempo, TIEMPO y tiempo representan tres variables distintas. .
Presentamos cuatro mtodos para asignar valores iniciales a matrices en
MATLAB. El primer mtodo lista explcitamente los valores, el segundo usa el
operador de dos puntos, el tercero usa funciones MATLAB y el cuarto lee datos
del teclado.
Listas explcitas. La forma ms sencilla de definir una matriz es usar una lista de
nmeros, como se muestra en el siguiente ejemplo, que define las matrices A, B y
C que usamos en nuestro ejemplo anterior:







Estas instrucciones son ejemplos de la instruccin de asignacin, que consiste
de asignacin en un nombre de variable seguido de un signo igual y de los
valores de datos que se asignarn a la variable.
Dichos valores se encierran en corchetes en orden por fila; las filas se separan
con signos de punto y coma, y los valores de cada fila se separan mediante
comas o espacios. Un valor puede contener un signo ms o menos y un punto
decimal, pero no puede contener una coma.
Cuando definimos una matriz, MATLAB imprime el valor de la matriz en la
pantalla a menos que suprimamos la impresin con un signo de punto y coma
despus de la definicin. En nuestros ejemplos, generalmente incluiremos el
signo de punto y coma para suprimir la impresin.
Sin embargo, mientras est aprendiendo a definir matrices, le resultar til ver los
valores de esas matrices. Por tanto, tal vez desee omitir el signo de punto y coma
despus de una definicin de matriz hasta estar seguro de que sabe definir

5
Esto significa que, para MATLAB, dos variables son idnticas si tienen los
primeros 19 caracteres iguales aunque los restantes Sean distintos.

| |
| |
| |
A 3.5 ;
B 1.5, 3.1 ;
C 1, 0, 0; 1, 1, 0; 1, 1, 0; 0, 0, 2 ;
=
=
=
Instruccin
de
Asignacin
28
correctamente las matrices.
Los comandos who y whos Tambin son muy tiles al usar MATLAB. El
comando who lista las matrices que se han definido, y whos lista las matrices y
sus tamaos.
Tambin puede definirse una matriz listando cada fila en una lnea aparte, como
en la siguiente serie de comandos MATLAB:




Si hay demasiados nmeros en una fila de una matriz para que quepan en una
lnea, podemos continuar la instruccin en la siguiente lnea, pero se requiere una
coma y tres puntos (puntos suspensivos) al final de la lnea para indicar que Ia
fila debe Suspensivos continuar.
Por ejemplo, si queremos definir un vector de fila F con 10 valores, podemos usar
cualquiera de las siguientes instrucciones:




MATLAB tambin nos permite definir una matriz usando otra matriz que ya se
defini. Por ejemplo, considere las siguientes instrucciones:



Estos comandos equivalen a lo siguiente:


Tambin podemos modificar los valores de una matriz o agregar valores
adicionales usando una referencia a un lugar especfico. As, el siguiente
comando,
S(2) = -1.0;
cambia el segundo valor de la matriz s de 1.5 a -1.0.
Tambin podemos extender una matriz definiendo nuevos elementos. Si
ejecutamos el siguiente comando,
S(4) = 5.5;
[ 1, 0, 0
1, 1, 0
C
1, 1, 0
0, 0, 2];

| | F 1, 52, 64, 197, 42, 42, 55, 82, 22, 109 ;


F [1, 52, 64, 197, 42, 42, ...
55, 82, 22, 109];
=
=
| |
| |
B 1.5, 3.1 ;
S 3.0, B
=
=
| | B 3.0, 1.5, 3.1 ; =
29
la matriz s tendr cuatro valores en lugar de tres. Si ejecutamos el siguiente
comando,
S(8) = 9.5;
la matriz s tendr ocho valores, y los valores de S (5), S (6) y S (7) se pondrn en
cero automticamente porque no se dieron valores para ellos.
TALLER N
D los tamaos de las siguientes matrices. Compruebe sus respuestas
introduciendo los comandos en MATLAB y usando luego el comando whos. En
estos problemas, una definicin de matriz puede referirse. a una matriz definida
en un problema anterior.










Operador de dos puntos. El operador de dos puntos es un operador muy
potente de para crear matrices nuevas. Por ejemplo, puede usarse dicho operador
para crear vectores a partir de una matriz.
Si se usa un signo de dos puntos en una referencia de matriz en lugar de un
subndice especfico, el signo de dos puntos representa a toda la fila o columna.
Por ejemplo, despus de definir una matriz C, los siguientes comandos
almacenan la primera columna de c en el vector de columna x, la segunda
columna de c en el vector columna y, y la tercera columna de C en el vector
columna z:





El operador de dos puntos tambin puede servir para generar matrices nuevas. Si
se usa un signo de dos puntos para separar dos enteros, el operador de dos
puntos generar todos los enteros entre los dos enteros especificados. Por
| |
| |
| |
| |
| |
1. B 2; 4; 6; 10
2. C 5 3 5; 6 2 3
3. E [3 5 10 0; 0 0 ...
0 3; 3 9 9 8]
4. T 4 24 9
Q T 0 T
5. v C(2,1); B
6. A(2,1) 3
=
=
=
=
=
=
=
| |
( )
( )
( )
C 1, 0, 0; 1, 1, 0;1, 1, 0; 0, 0, 0, 2
x C :,1 ;
y C :,2 ;
z C :,3 ;
=
=
=
=
Operador
de dos
puntos
30
ejemplo, Ia siguiente notacin genera un vector llamado H que contiene los
nmeros del 1 al 8.


Si se usan signos de dos puntos para separar tres nmeros, el operador de dos
puntos generar valores entre el primer nmero y el tercero, usando el segundo
nmero como incremento. Por ejemplo, Ia siguiente notacin genera un vector de
fila llamado tiempo que contiene los nmeros de 0.0 a 5.0 en incrementos de 0.5:


El incremento tambin puede ser negativo, como se muestra en el siguiente
ejemplo, que genera los ntimeros 10, 9, 8, ... 0 en el vector de fila llamado
valores:


El operador de dos puntos tambin puede servir para seleccionar una submatriz
de otra matriz. Por ejemplo, suponga que se defini C en MATLAB como la
siguiente matriz:




Si ejecutamos los siguientes comandos,



habremos definido las siguientes matrices:




Si la notacin de signo de dos puntos define una matriz con subndices no vlidos,
como C (5:6,:), se exhibir un mensaje de error.
En MATLAB se vale tener una matriz vaca. Por ejemplo, cada una de las
siguientes instrucciones genera una matriz vaca:

H 1: 8; =
tiempo 0.0 : 0.5 : 5.0; =
valores 10 : 1: 0; =
Submatriz
1 0 0
1 1 0
1 1 0
0 0 2
(
(
(
(
(

( ) c _partitial _1 C :,2 : 3 ; =
( ) c _partitial _2 C 3 : 4,1: 2 ; =
0 0
1 0 1 1
c _partitial _1 c _partitial _2
1 0 0 0
0 2
(
(
(
(
= =
(
(

(

a [1;
b 4 : 1: 5;
=
=
31
Cabe sealar que una matriz vaca es distinta de una matriz que solo contiene
ceros. El empleo de la expresin c (:) equivale a una matriz de columna larga que
contiene la primera columna de c, seguida de Ia segunda columna de c, y As
sucesivamente.
Un operador muy til para manipular matrices es el operador de transponer. La
transpuesta de una matriz A se denota con A y representa una nueva matriz en
la que las filas de A se han convertido en las columnas de A.
En el curso estudiaremos este operador con mayor detalle, pero por ahora lo
usaremos solo para convertir un vector fila en un vector columna y viceversa.
Esta capacidad puede ser muy til al imprimir vectores. Por ejemplo, suponga que
generamos dos vectores, x y y. Ahora queremos imprimir los valores de modo
que x (1) y y (1) estn en la misma lnea, x (2) y y (2) estn en la misma lnea,
etc. Una forma sencilla de hacer esto es:



La salida generada por estas instrucciones es:





Este operador tambin ser til para generar algunas de las tablas especificadas
en los problemas del final del curso.
iPractique
Indique el contenido de las siguientes matrices. Luego verifique sus respuestas
introduciendo los comandos MATLAB . Use la siguiente matriz G:









Operador
de
Transponer
| |
x 0 : 4;
y 5 : 5 : 25;
x' y'
=
=
0 5
1 10
2 15
3 20
4 25
0.6 1.5 2.3 0.5
8.2 0.5 0.1 2.0
5.7 8.2 9.0 1.5
0.5 0.5 2.4 0.5
1.2 2.3 4.5 0.5
(
(

(
(
(
(
(


( )
| |
( )
( )
1
2
A G :,2
C 10 : 15
D 4 : 9 ; 1: 6
F 0.0 : 0.1: 1.0
T G 4 : 5 , 1: 3
T G 1: 2 : 5 , :
=
=
=
=
=
=
32
MATLAB incluye varias constantes predefinidas, valores especiales y matrices
especiales que podemos usar en nuestros programas y que se definen en la
siguiente lista:
pi Representa pi
i, j Representa el valor 1
Inf Representa infinito, que normalmente ocurre al dividir entre cero. Se
imprimir un mensaje de advertencia cuando se calcule este valor; si se
exhibe una matriz que contiene este valor, el valor aparecer como
NaN Representa No-es-un-nmero y suele ocurrir cuando una expresin no
est definida, como la division de cero entre cero.
clock Representa la hora actual en un vector de fila de seis elementos que
contiene ao, mes, da, hora, minuto y segundos.
date Representa la fecha actual en formato de cadena de caracteres, como
20-jun-96.
eps Representa la precision de punto flotante de la computadora que se est
usando. Esta precision epsilon es Ia cantidad ms pequea en que pueden
diferir dos valores en la computadora.
ans Representa un valor calculado por una expresin pero no almacenado en
un nombre de variable.
Se puede usar una serie de funciones especiales para generar matrices nuevas.
La funcin zeros genera una matriz que contiene solo ceros. Si el argumento de
la funcin es un escalar, como en zeros(6), la funcin generar una matriz
cuadrada usando el argumento como nmero de filas y nmero de columnas.
Si Ia funcin tiene dos argumentos escalares, como en zeros (m,n), generar una
matriz con m filas y n columnas. Dado que la funcin size devuelve dos
argumentos escalares que representan el nmero de filas y el nmero de
columnas de una matriz, podemos usar size para generar una matriz de ceros
que tenga el mismo tamao que otra matriz.
Las siguientes instrucciones ilustran los diversos casos:
A = zeros(3);
B = zeros(3,2);
C [1 2 3; 4 2 5];
D = zeros (size(C));



0 0 0 0 0
A 0 0 0 B 0 0
0 0 0 0 0
1 2 3 0 0 0
C D
4 2 5 0 0 0
( (
( (
= =
( (
( (

( (
= =
( (

33
La funcin ones genera una matriz que solo contiene unos, igual que la funcin
zeros genera una matriz que slo contiene ceros. Los argumentos para Ia funcin
ones tienen Ia misma funcionalidad que los de zeros. Las siguientes
instrucciones ilustran los diversos casos:
A = ones(3);
B = ones(3,2);
C = (1 2 3; 4 2 5];
D = ones(size(C));
Las matrices generadas son las siguientes:







Una matriz identidad es una matriz con unos en la diagonal principal y ceros en
las dems posiciones. Por ejemplo, la siguiente es una matriz identidad con
cuatro filas y cuatro columnas:




Cabe sealar que Ia diagonal principal es la diagonal que contiene elementos en
los que el nmero de fila es el mismo que el nmero de columna. Por tanto, los
subndices para los elementos de la diagonal principal son (1,1), (2,2), (3,3),
etcetera.
En MATLAB, las matrices identidad pueden generarse usando la funcin eye. Los
argumentos de eye son similares a los de las funciones zeros y ones. Aunque en
la mayor parte de las aplicaciones se usan matrices identidad cuadradas, la
definicin puede extenderse a matrices no cuadradas. Las siguientes
instrucciones ilustran los diversos casos:
A = eye(3);
B = eye(3,2);
C = [1 2 3; 4 2 5];
D = eye(eize(C));
Las matrices generadas son las siguientes:
0 0 0 0 0
A 0 0 0 B 0 0
0 0 0 0 0
1 2 3 0 0 0
C D
4 2 5 0 0 0
( (
( (
= =
( (
( (

( (
= =
( (

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
(
(
(
(
(

Matriz
Identidad
34







No es aconsejablenombrar a una matriz de identidad i. porque entonces i. no
representar a 1 en las instrucciones que sigan. (Veremos los nmeros
complejos con detalle mas adelante.)
Los valores para una matriz tambin pueden introducirse a travs del teclado
usando el comando input, que exhibe una cadena de texto y luego espera
entradas del usuario.
Despus, el valor introducido se almacena en la variable especificada. Si el
usuario vaa introducir ms de un valor, debe encerrarlos en corchetes. Si el
usuario pulsa la tecla Enter (Intro) sin introducir valores, se devolvera una matriz
vaca. Si el comando no termina con un signo de punto y coma, se imprimen los
valores introducidos para la matriz.
Considere el siguiente comando:
z = input(Introduzca valores para z en corchetes: );
Cuando se ejecuta este comando, se exhibe en la pantalla de la terminal la
cadena de texto Introduzca valores para z en corchetes: . El usuario puede
introducir entonces una expresin como [5. 1 6.3 -18.0], que especfica valores
para z. Como este comando input termina con un signo de punto y coma, no se
exhiben los valores cuando termina de ejecutarse el comando.
Hay varias formas de presentar el contenido de una matriz. La ms sencilla es
introducir el nombre de la matriz. Se repetir el nombre de la matriz y a partir de la
siguiente lnea se exhibirn los valores de la matriz.
Tambin hay varios comandos que pueden servir para exhibir matrices con un
mayor control sobre el formato de la salida.
Tambin podemos graficar los valores de una matriz para tener una
representacin visual. A continuacin presentamos algunos de los detalles del uso
de estas diferentes formas de exhibir informacin.
Formato de exhibicin. Cuando se exhiben los elementos de una matriz, los
enteros siempre se exhiben como enteros. Los valores no enteros siempre se
1 0 0 1 0
A 0 1 0 B 0 1
0 0 1 0 0
1 2 3 1 0 0
C D
4 2 5 0 1 0
( (
( (
= =
( (
( (

( (
= =
( (

35
exhiben usando un formato por omisin (llamado formato corto) que muestra
cuatro dgitos decimales.
MATLAB permite especificar otros formatos (vase tabla 2.1) que muestran ms
dgitos significativos. Por ejemplo, para especificar que queremos que los valores
se exhiban en un formato digital con 14 dgitos decimales, usamos el comando
format long.
Podemos regresar al formato decimal con cuatro dgitos decimales empleando el
comando format short. Se exhiben dos dgitos decimales cuando se especifica el
formato con format bank. Si un valor es muy grande o muy pequeno, la notacin
decimal no es satisfactoria.
Por ejemplo, un valor que se usa con frecuencia en qumica es la constante de
Avogadro

cuyo valor con cuatro posiciones significativas es
602,300,000,000,000,000,000,000.
Es obvio que necesitamos una notacin ms manejable para valores muy grandes
como la constante de Avogadro o muy pequeos como 0.0000000031.
La notacin cientfica expresa un valor como un nmero entre 1 y 10 multiplicado
por una potencia de 10. En notacin cientfica, Ia constante de Avogadr se
convierte en 6.023 x 10
23
. Esta forma tambin recibe el nombre de mantisa
(6.023) y exponente (23).
En MATLAB, se exhiben valores en notacin cientfica usando la letra e para
separar Ia mantisa y el exponente como en 6. 023e+23.
Si queremos que MATLAB exhiba valores en notacin cientfica con cinco dgitos
significativos usamos el comando format short e. Para especificar notacin
cientfica con 16 dgitos significativos, usamos el comando format long e.
Tambin podemos introducir valores en una matriz usando notacin cientfica,
pero es importante no escribir espacios entre Ia mantisa y el exponente porque
MATLAB interpreta 6 .023 e+ 23 como dos valores (6.023 y e+23), mientras que
6. 023e+23

se interpreta com un solo valor.
Tabla 2.1: Formatos de exibicin de numeros
Comando Matlab Exhibe Ejemplo
Format short Por omisin 15.2345
Format long 14 decimales 15.23453333333333
Format bank 2 decimales 15.23
Format short e 4 decimales 1.5235e+01
Format long e 15 decimales 1.523453333333333+01
Format + +,-, espacio +
Notacin
cientifica
36
Otro comando de formato es format +. Si se exhibe una matriz con este formato,
los nicos caracteres que se imprimen son signos de ms y menos. Si un valor es
positivo, se exhibe un signo ms; si un valor es 0, se dejar un espacio; si un
valor es negativo se exhibir un Signo menos.
Este formato permite visualizar una matriz grande en trminos de sus signos,
cosa que de otro modo tal vez no podramos ver fcilmente porque podra haber
demasiados valores en una fila para tener cabida en una sola lnea.
En el caso de los formatos largos y cortos, se aplica un factor de escala comn a
toda la matriz si los elementos llegan a ser demasiado grandes. Este factor de
escala se exhibe junto con los valores escalados.
Por ltimo, el comando format compact suprime muchos de los saltos de lnea
que aparecen entre las representaciones de matrices y permite ver ms lneas de
informacin juntas en la pantalla.
En las salidas de nuestros ejemplos supondremos que se ha ejecutado este
comando. El comando format loose regresa al modo de exhibicin menos
compacto.
Exhibicin de texto y valores. Podemos usar la funcin disp para exhibir texto
encerrado en apOstrofos; tambin podemos usarla para exhibir el contenido de
una matriz sin exhibir el nombre de la matriz.
Por ejemplo si un escalar temp contiene un valor de temperatura en grados
Fahrenheit, podramos exhibir el valor en una lnea y las unidades en Ia siguiente
lnea con estos comandos:
disp(temp); disp(grados F)
Si el valor de temp es 78, la salida ser la siguiente:
78
grados F
Observe que los dos comandos disp se introdujeron en la misma lnea para que
se ejecutaran juntos.
Salidas con formato. El comando fprintf nos permite tener todava ms control
sobre las salidas que el que tenemos con el comando disp. Adems de exhibir
tanto texto como valores de matrices, podemos especificar el formato que se
usar al exhibir los valores, y tambin saltos de lnea. La forma general de este
comando es la siguiente:
fprintf (formato,matrices)
El formato contiene el texto y las especificaciones de formato para las salidas, y
va seguido de los nombres de las matrices por exhibir. Dentro del formato se usan
los especificadores %e, %f y %g para indicar donde se exhibirn los valores de la
matriz.
Si se usa %e, los valores se exhiben en una notacin exponencial; si se usa %f,
los valores se exhiben en una notacin de punto fijo o decimal; si se usa %g, los
Especifica
dores
37
valores usarn %e o bien %f, el que sea ms corto.
Si aparece la cadena \n en el formato, se exhibir la lnea especificada hasta ese
punto, y el resto de la informacin se exhibir en la siguiente lnea. Lo usual es
que el formato termine con \n.
Un ejemplo sencillo del comando fprintf es:
fprintf(La temperatura es %f grados F \n,temp)
La salida correspondiente es:
La temperatura es 78.000000 grados F
Si modificamos el comando As:
fprintf(La temperatura es \n %f grados F \n,temp)
la salida ser:
La temperatura es
78.000000 grados F
Los especificadores de formato %f, %e y %g tambin pueden contener
informacin para especificar el nmero de posiciones decimales que se exhibirn
y el nmero de posiciones que se destinarn al valor correspondiente. Considere
este comando:
fprintf(La temperatura es %4.1f grados F \n,temp)
El valor de temp se exhibe usando cuatro posiciones, una de las cuales es
decimal:
La temperatura es 78.0 grados F
La instruccin fprintf nos permite tener gran control sobre la forma de las salidas;
la usaremos con frecuencia en nuestros ejemplos para que usted se familiarice
con ella.
Grficas xy sencillas. En esta seccin explicaremos cmo generar una grfica
xy sencilla a partir de datos almacenados en dos vectores. Suponga que
queremos graficar los siguientes datos recabados de un experimento con un
modelo de coche de control remoto.
El experiment se repite 10 veces, midiendo la distancia que el coche viaja en
cada ensayo.
Ensayo Distancia, ft
1 58.5
2 63.8
3 64.2
4 67.3
5 71.5
6 88.3
Grfica
xy
38
7 90.1
8 90.6
9 89.5
10 90.4
Suponga que los nmeros de ensayo se almacenan en un vector llamado x, y que
los valores de distancia se almacenan en un vector Llamado y. Para graficar estos
puntos, Usamos el comando plot, con x y y como argumentos.
plot(x,y)
Se genera automticamente Ia grfica de la figura 2.1. (Puede haber pequeas
variaciones en las escalas de la grfica debido al tipo de computadora y al tamao
de la ventana de grficos.). la buena practica de ingenieria exige la incusin de
unidades y un titulo.
Por tanto, incluimos los siguientes comandos que agregan un tItulo, leyendas x y
y, y una retcula de fondo:
plot (x,y),title(Experimento de laboratorio 1), ...
xlabel(Ensayo ),ylabel( Distancia, ft ),grid
Estos comandos generan la grfica de Ia figura 2.2.

GRAFICA
Si exhibimos una grfica y luego continuamos con ms clculos, MATLAB
generar y exhibir la grfica en Ia ventana de grficos y luego regresar de
inmediato para ejecutar el resto de los comandos del programa.
Dado que la ventana de grficos es remplazada por la ventana de comandos
cuando MATLAB regresa para terminar los clculos, puede ser aconsejable usar
el comando pause para detener el programa temporalmente a fin de que
podamos examinar la grfica.
La ejecucin continuar cuando se pulse cualquier tecla. Si desea hacer una
pausa de cierto nmero de segundos, use el comando pause(n), que hace una
pausa de n segundos antes de continuar.
El comando print imprime el contenido de la ventana de grficos en la impresora
conectada a la computadora.
Tambin pueden definirse matrices a partir de infomacin que se ha almacenado
en un archivo de datos. MATLAB puede utilizar dos tipos distintos de archivos de
datos: archivos MAT y archivos ASCII.
Un archivo MAT contiene datos almacenados en un formato binario que
39
aprovecha de/manera eficiente la memoria, y un archivo ASCII contiene
informacin almacenada en un forrnato de texto estndar para computadora.
Los archivos MAT son preferib!es para datos que van a ser generados y utilizados
por programas MATLAB. Los archivos ASCII son necesarios cuando los datos se
van a compartir (importndolos o exportndolos) con otros prograrnas que no
sean MATLAB.
GRAFICA
Los archivos MAT se generan desde un programa MATLAB usando el comando
save, que contiene un nombre de archivo y las matrices que se van a almacenar
en el archivo. Se agrega automticamente la extensin .mat al nombre del
archivo. Por ejemplo, el siguiente comando:
save data_1 x y;
guarda las matrices x y y en un archivo l!amado data_1.mat. Para recuperar
estas matrices en un programa MATLAB, usamos el comando:
load data_1;
Un archivo ASCII que vaya a ser utilizado por un programa MATLAB deber
contener solo informacin numrica, y cada fila del archivo deber contener el
mismo nmero de valores de datos.
El archivo puede generarse usando un procesador de textos 0 Un editor; tambin
puede generarse ejecutando un programa escrito en. un lenguaje para
computadora, como C, o mediante un programa MATLAB usando la siguiente
forma del comando save:
Experimento de Iaboratorio 1
save data_2.dat z/ascii,
Este comando hace que cada fila de la matriz z se escriba en una lnea individual
del archivo de datos. No se agrega la extensin .mat a los archivos ASCII.
Sin embargo como se ilustra en este ejemplo, es aconsejable que los nombres de
archivos ASCII tengan la extensin .dat para que sea fcil distinguirlos de los
archivos .mat y de los archivos .m
Suponga que un archivo ASCII llamado data_3.dat contiene un conjunto de
valores que representan el tiempo y la distancia correspondiente de un corredor
desde la lnea de salida en una carrera.
Cada tiempo y su valor de distancia correspondiente estn en una lnea individual
del archivo de datos. As, las primeras lneas del archivo de datos podran tener la
siguiente forma:



Estilo
0.0 0.0
0.1 3.5
0.2 6.8
40
El comando load seguido por el nombre del archivo lee la informacin y la coloca
en una matriz con el mismo nombre que el archivo de datos. Por ejemplo,
considere la instruccin:
load data_3.dat;
Los valores de datos se almacenard automticamente en la matriz data_3, que
tiene dos columnas.
Operacines con escalares y arreglos
Los clculos aritmticos se especifican con matrices y constantes cornbinadas
con operaciones aritmticas. En esta seccin verernos primero operaciones en las
que slo intervienen escalares; luego extenderemos las operaciones para incluir
operaciones de elemento por elemento.
Las operaciones aritmticas entre dos escalares se muestran en la tabla 2.2. Las
expresiones que contienen escalares y operaciones escalares se pueden evaluar
y almacenar en una variable especificada, como en la siguiente instruccin, que
especifica que los valores de a y b se sumen y Ia suma se almacene en x
X = a + b;
Esta instruccin de asignacin debe interpretarse As: el valor que est en a se
suma al valor que esta en b y la suma se almacena en x. Si interpretamos las
instrucciones de asignacin de esta manera, no nos extraar Ia siguiente
instruccin MATLAB vlida:
cuenta = cuenta + 1;
Es evidente que esta instruccin no es una expresion algebraica vlida, pero en
MATLAB especfica que se debe sumar 1 al valor que est en cuenta y el
resultado se debe almacenar otra vez en cuenta.
Por tanto, Ia instruccin equivale a especificar que el valor de cuenta se
incremente en 1.
Operaciones aritmticas entre dos escalares
Operacin Forma Algebrica MATLAB
Suma a+b a+b
Resta a-b a-b
Multiplicacin a*b a*b
Divisin
a
b
a/b
Exponenciacin a
b
a^b
41
Es importante tener presente que una variable solo puede almacenar un valor a la
vez. Por ejemplo, suponga que se ejecutaran las siguientes instrucciones
MATLAB una tras otra:


Cuando se ejecuta la primera instruccin se almacena el valor 0.0 en la variable
tiempo, y es sustituido por el valor 5.0 cuando se ejecuta la siguiente instruccin.
Si se introduce una expresin sin especificar una variable para almacenar el
resultado, el resultado o respuesta se almacenar automticamente en una
variable Ilamada ans. Cada vez que se almacene un nuevo valor en ans, se
perdera el valor anterior.
Las operacines de arreglos se ejecutan elemento por elemento. Por ejemplo,
suponga que A es un vector de fila con cinco elementos y B es un vector de fila
con cinco elementos. Una forma de generar un nuevo vector de fila C cuyos
valores sean los productos de los valores correspondientes de A y de B es la
siguiente




Estos comandos son en esencia comandos escalares porque cada uno multiplica
un solo valor por otro y almacena el producto en un tercer valor.
Para indicr que queremos realizar una multiplicacin elemento por elemento
entre dos matrices del mismo tamao, usamos un asterisco precedido por un
punto. As, las cinco instruciones anteriores pueden ser sustituidas por la
siguiente:

No poner el punto antes del asterisco es una omisin grave porque en tal caso la
instruccin especifica una operacin de matrices, no una operacion elemento por
elemento. Estudiaremos las operaciones de matrices mas adelante.
En el caso de la suma y la resta, las operaciones de arreglos y las de matrices
son iguales, As que no necesitamos distinguir entre ellas. En cambio, las
operaciones de arreglos para multiplicacin, divisin y exponenciacin son
diferentes de las operaciones de matrices para multiplicacin, divisin y
exponenciacin,
As que necesitamos incluir un punto para especificar una operacin de arreglos.
Estas reglas se resumen en la tabla 2.3.
tiempo 0.0;
tiempo 5.0;
=
=
Elemento
a
Elemento
C(1) A(1) * B(1);
C(2) A(2) * B(2);
C(3) A(3) * B(3);
C(4) A(4) * B(4);
C(5) A(5) * B(5);
=
=
=
=
=
C A. * B; =
42
Operaciones elemento por elemento
Operacin Forma algebraica MATLAB
Suma a+b a+b
Resta a-b a-b
Multiplicacin a*b a.*b
Divisin
a
b
a./b
Exponenciacin a
b
a.^b
Las operaciones elemento por elemento, u operaciones de arreglos, no slo se
aplican a operaciones entre dos matrices del mismo tamao, sino tambin a
operaciones entre un escalar y un no escalar.
As, las dos instrucciones de cada uno de los siguientes juegos de instrucciones
son equivalentes para una matriz A:
B = 3*A;
B = 3.*A;
C = A/5;
C = A./5;
Las matrices resuItntes B y C tendrn el mismo tamao que A.
A fin de ilustrar las operaciones de arreglos para vectores, considere los dos
siguientes vectores de fila:


Si calculamos el producto de arreglos de A y B usando la siguiente instruccin:


C contendr los siguientes valores:


El comando de divisin de arreglos,


genera un nuevo vector en el que cada elemento de A se divide entre el elemento
correspondiente de B. As, C contendr los siguientes valores:
| | | | A 2 5 6 B 2 3 5 = =
C A. * B; =
| | 4 15 30
C A. / B; =
43


La exponenciacin de arreglos tambin es una operacin elemento por elemento.
Por ejemplo, considere las siguientes instrucciones:





Los vectores C y D son los siguientes:


Tambin podemos usar una base escalar con un exponente vector, como en:

que genera un vector con los siguientes valores:


Este vector tambin podrIa haberse calculado con la instruccin:


Si no est seguro de haber escrito la expresin correcta, siempre pruebela con
ejemplos sencillos como los que hemos usado aqu.
Los ejemplos anteriores utilizaron vectores, pero las mismas reglas se aplican a
matrices con filas y columnas, como se ilustra con las siguientes instrucciones:



Los valores de estas matrices son:






| | 1 1.6667 1.2
| |
| |
A 2, 5, 6 ;
B 2, 3, 5 ;
C A. 2;
D A. B;
.
.
=
=
=
=
| | | | C 4 25 36 D 4 125 7776 = =
C 3.0. A;
.
=
| | 9 243 729 ;
C (3). A;
.
=
| | d 1: 5; 1: 1: 5 ;
p d. * 5;
q d. 3;
.
=
=
=
1 2 3 4 5
d
1 2 3 4 5
5 10 15 20 25 1 8 27 64 125
p q
5 10 15 20 25 1 8 27 64 125
(
=
(


( (
= =
( (


44
Precedencia de operaciones aritmticas
Precedencia Operacin
1 Parntesis, primero los ms internos
2 Exponenciacin de izquierda a derecha
3 Multiplicacin y divisin, de izquierda a derecha
4 Suma, resta, de izquierda a derecha

En vista de que es posible combinar varias operaciones en una sola expresin
aritmtica, es importante saber en qu orden se realizan las operaciones. La tabla
2.4 indica la precedencia de las operaciones aritmticas en MATLAB. Observe
que esta precedencia sigue la precedencia algebraica estndar.
Suponga que queremos calcular el area de un trapezoide; la variable base
contiene la longitud de la base y altura_1 y altura_2 contienen las dos alturas. El
area de un trapezoide puede calcularse con La siguiente instruccin MATLAB:
area = 0.5*base*(altura_1 + altura_2);
Suponga que omitimos los parntesis en La expresin:
area = 0.5*base*altura_1 + altura_2;
Esta instruccin se ejecutara como si fuera La instruccin:
area = (0.5*base*altura_1) + altura2;
Observe que si bien se calcul la respuesta incorrecta, no se imprimen mensajes
de error para alertarnos. Por tanto, es muy importante tener mucho cuidado al
convertir ecuaciones en instrucciones MATLAB. Agregar parntesis extra es una
forma fcil de asegurarse de que los clculos se harn en el orden deseado.
Si una expresin es larga, dividala en varias instrucciones:
Por ejemplo, considere La siguiente ecuacin:


Podra calcularse el valor de f usando las siguientes instrucciones MATLAB,
suponiendo que x es un escalar:


3 2
2
x 2x x 6.3
f
x 0.05005x 3.14
+
=
+
numerador x 3 2 * x 2 x 6.3;
denominador x 2 0.05005 * x 3.14;
f numerador / denominador;
. .
.
= +
= +
=
45

Es mejor usar varias instrucciones fciles de entender que usar una instruccin
que requiere meditar con cuidado el orden en que deben ejecutarse las
operaciones.
TALLER N
Escriba comandos MATLAB para calcular los siguientes valores. Suponga que
las variables de las ecuaciones son escalares y que se les asignaron valores.
1. Factor de correccin en clculos de presin:


2. Pendiente entre dos puntos:


3. Resistencia de un circuito en paralelo


4. Prdida de presin por friccin en un tubo:


TALLER N
D los valores contenidos en el vector C despus de ejecutarse las siguientes
instrucciones, donde A y B contienen los valores indicados. Verifique sus
respuestas usando MATLAB.







Las variables almacenadas en una computadora pueden asumir valores de una
gama muy amplia. En la mayor parte de las computadoras, el intervalo se
extiende de 10
-308
a 10
308
, que deber de ser suficiente para manejar cas
cualquier clculo.
2
b c
factor 1
c v
= + +
2 1
2 1
y y
pendiente
x x

1 2 3
1
resistencia
1 1 1
r r r
=
+ +
2
1 v
perdida f.p. .
d 2
=
| | | | A 2 1 5 0 B 3 2 1 4
C B* A 3;
C A. / B;
C 2 * A A. B;
C 2. B A;
C 2 * B/ 3. * A;
.
.
= =
=
=
= +
= +
=
46
No obstante, es posible que el resultado de una expresin est fuera de este
intervalo. Por ejemplo, suponga que ejecutamos las siguientes instrucciones:



Si suponemos el intervalo de valores de 10-308 a 10
308
, los valores de x y y estan
dentro del intervalo permitido, pero el valor de z Sera 2.5e400, y este valor
excede el intervalo.
Este error se denomina desbordamiento de exponente porque el exponente del
resultado de una operacin matemtica es demasiado grande para almacenarse
en La memoria de la computadora. En MATLAB, el resultado de un
desbordamiento de exponente es
Un desbordamiento negativo de exponente es un error similar que ocurre cuando
el exponente del resultado de una operacin aritmtica es demasiado pequeo
para almacenarse en la memoria de Ia computadora. Si usamos el mismo
intervalo permitido, obtenemos un desbordamiento negativo de exponente con los
siguientes comandos:



Una vez ms, los valores de x y y estan dentro del intervalo permitido, pero el
valor de + debe ser 2.5e-400. Dado que el exponente es menor que el mInimo,
causamos La ocurrencia de un error de desbordamiento negativo de exponente.
En MATLAB, el resultado de un desbordamiento negativo de exponente es cero.
Sabemos que Ia division entre cero es una operacin no valida. si una expresin
produce una divisin entre cero en MATLAB, el resultado es ,. MATLAB
exhibira un mensaje de error y continuar con los calculos subsecuentes.
La grafica ms comn que usan los ingenieros y cientficos es La grafica xy. Los
datos que se grafican por lo regular se Leen de un archivo de datos o se calculan
en los programas, y se almacenan en vectores que llamaremos x y y.
En general, supondremos que los valores x representan La variable
independiente, y los y, La variable dependiente. Los valores y pueden calcularse
como funcin de x, o los valores x y y podran medirse en un experimento. A
continuacin presentamos otras formas de exhibir esta informacin.
La mayor parte de las grficas que generamos dan por hecho que los ejes x y y
se dividen en intervalos equiespaciados; estas grficas se llaman graficas
x 2.5e200;
y 1.0e200;
z x * y;
=
=
=
Desborda
miento de
exponente
Deborda
miento
negativo
de
exponente
x 2.5e 200;
y 1.0e200;
z x / y;
=
=
=
Divisin
entre cero
47
Lineales. Ocasionalmente, podramos querer usar una escala logartmica en un
eje o en ambos.
Una escala logartmica (de base 10) es til cuando una variable abarca varios
Ordenes de magnitud, pues el amplio intervalo de valores puede graficarse sin
comprimir los valores ms pequeos.
Los comandos MATLAB para generar grficas lneales y logartmicas de los
vectores x y y son los siguientes:
plot(x, y) Genera una grfica lneal con los valores de x y y.
Genera una grfica de los valores de x y y usando una escala
Logartmica para x y una escala lneal para y.
Genera una grfica de Tos valores de x y y usando una escala
lneal para x y una escala Logartmica para y.
Genera una grafica de los valores de x y y usando escalas
logartmicas tanto para x como para y.
En la figura 2.3 se muestran ejemplos de estas graficas. Ms adelante en esta
seccin veremos com definir un grupo de grficas como las que se muestran en
esta figura.
Es importante tener presente que el logaritmo de un valor negativo o de cero no
existe. Por tanto, Si los datos que van a graficarse en una grfica semilog o log-
log contienen valores negativos o ceros, MATLAB exhibir un mensaje de
advertencia informando que esos puntos de datos se han omitido en la grfica.
Todos estos comandos pueden ejecutarse tambin con un solo argumento, como
en plot (y). En estos casos, las curvas se generan usando como valores x los
subndices del vector y.
GRAFICA PAG 56
Una forma sencilla de generar curvas multiples en la misma grafica es usar
mltiples argumentos en un comando de graficacion, como en
plot (x,y,w, z)
donde las variables x, y, w y z son vectores. Al ejecutarse este comando, se traza
La curva correspondiente a x versus y, y luego se traza en La misma grafica La
curva correspondiente a w versus z. La ventaja de esta tcnica es que el nmero
de puntos de las dos curvas no tiene que ser el mismo. MATLAB selecciona
automticamente diferentes tipos de lneas para poder distinguir entre las dos
curvas.
Otra forma de generar multiples curvas en La misma grafica es usar una sola
matriz con multiples columnas. Cada columna se graficar contra un vector x. Por
ejemplo, las siguientes instrucciones generan una grfica que contiene dos
Escala
Logartmica
semilogx(x, y)
semilogy(x, y)
loglog(x, y)
48
funciones como se muestra en La figura 2.4:




Si la funcin plot no tiene un vector x aparte, como en plot (f), las columnas de f
se graficarn usando los subndices de fila como valores x.
ESTILO DE LINEAS Y MARCAS
El comando plot (x, y) genera una grfica de lneas que conecta los puntos
representados por los vectores x y y con segmentos de lnea. Tambin podemos
seleccionar otros tipos de lneas: de guiones, de puntos y de puntos y guiones, y
tambin una grafica de puntos en lugar de una de lneas.
En este caso, los puntos representados por los vectores se marcarn con un
punto en vez de conectarse con segmentos de lnea. Asimismo, podemos escoger
caracteres distintos del punto para indicar los puntos: signos ms, estrellas,
crculos o marcas x. La tabla 2.5 lista estas diferentes opciones de lneas y
marcas.
El siguiente comando ilustra el uso de los estilos de lnea y marca; genera una
curva de lnea continua con los puntos representados por los vectores x y y y
luego marca los puntos mismos con crculos:
plot(x,y,x,y, 0)
Este tipo de grafica se muestra en la figura 6.3.
Opciones de lineas y marcas
Tipo de lnea indicador Tipo de punto Indicador
continua ___ punto
guiones --- ms +++
punteada ::: crculo Ooo
Guiones-puntos -.-.-. marca xxx
MATLAB fija automticamente la escala de los ejes ajustndola a los valores de
datos. Sin embargo, podemos supeditar esas escalas con el comando axis. Hay
varias formas de este comando:
axis Mantiene la escala del eje actual para grficas subsecuentes. Una
segunda ejecucin del comando regresa el sistema al escalado
x 0 : 0.1: 5;
f(:,1) x'. 2 3 * x' 2;
plot(x, f), title(' Multiples funciones'),...
xlabel(' x'),grid
.
=
= +
49
automtico.
axis (v) Especifica la escala del eje usando los valores de escala que estn
en el vector v, el cual debe contener (xmin,xmax,ymin,ymax)
estos comandos resultan especialmentre tiles cuando queremos comparar
curvas de diferentes graficas, pues pude ser dificil comparar visualmente
curvas trazadas con diferentes ejes.
El comando plot precede al comando axis(v) correspondiente.
El comando subplot permite dividir la ventana de grficos en subventanas. Las
posibles divisiones pueden ser dos subventanas o cuatro subventanas. Dos
subventanas pueden quedar arriba y abajo o a la izquierda y a Ia derecha.
Una division de cuatro ventanas tiene dos subventanas arriba y dos abajo. Los
argumentos del comando subplot son tres enteros: m, n, p. Los dgitos m y n
especifican que la ventana de grficos se divida en una retcula de m por n
ventanas ms pequea, y el dgito p especifica Ia p-sima ventana para Ia grafica
actual.
Las ventanas se numeran de izquierda a derecha y de arriba a abajo. Por tanto,
los siguientes comandos especifican que la ventana de graficos se divida en una
grfica superior y una inferior, y que la grafica actual se coloqueen Ia subventana
superior:
subplot(2, 1,1) ,plot(x,y)
La figura 2.3 contiene cuatro grficas que ilustran el comando subplot empleando
escalas lneales y logarmtmicas. Esta figura se gener usando las siguientes
instrucciones:
% Generar curvas de un polinomio.











% Generar curvas de un polinomio.
%
x 0 : 0.5 : 50;
y 5 * x. 2;
subplot(2,2,1),plot(x, y),...
title('Polinomio lineal / lineal'),...
ylabel(' y'),grid,...
subplot(2,2,2), semilogx(x, y),...
title('Polinomio log/ lineal'),...
yl
.
=
=

abel(' y'),grid,...
subplot(2,2,3), semilogy(x, y),...
title('Polinomio lineal / log'),...
xlabel(' x'), ylabel(' y'),grid,...
subplot(2,2, 4),loglog(x, y),...
title('Polinomio log/ log'),...
xlabel(' x'), ylabel(' y'),g

rid
50
Se incluirn con frecuencia ejemplos del comando subplot en este texto.
Resolucin aplicada de problemas: Motor turbohlice avanzado
En esta seccin realizaremos clculos en una aplicacin relacionada con el gran
desafIo del funcionamiento de vehculos. Un motor turbohlice avanzado l!amado
abanicos sin ductos (UDF, unducted fan) es una de las prometedoras
tecnologas que se estn desarrollando para aviones de transporte futuros.
Los motores de turbohlice, que han estado en uso desde hace varias dcadas,
combinan la potencia y la confiabilidad de los motores a reaccin con la eficiencia
de las hlices. Estos motores representan una mejora significativa respecto a los
anteriores motores de hlice impulsados por pistones
No obstante su aplicacin se ha limitado a aviones pequeos para cubrir rutas
cortas porque no son tan rpidos ni tan potentes como los motores de aspas a
reaccin que se emplean en los aviones de pasajeros de mayor tamao.
El motor UDF aprovecha avances significativos en Ia tecnologIa de hlices que se
probaron cuidadosamente en tneles de viento y que han angostado la brecha de
rendimiento entre los motores turbohlice y los de aspas a reaccin.
Nuevos materiales, formas de aspas y mayores velocidades de rotacin permiten
a los aviones con motores UDF volar casi con la misma rapidez que los provistos
de motores de aspas a reaccin, con mayor eficiencia de combustible. Adems, el
UDF es considerablemente ms silencioso que el motor turbohlice convencional.
Durante un vuelo de prueba de un avin con motor UDF, el piloto de prueba
ajust el nivel de potencia del motor en 40,000 newtons, lo que hace que el avin
de 20,000 kg alcance una velocidad de crucero de 180 m/s (metros por segundo).
A continuacin, las gargantas del motor se ajustan a un nivel de potencia de
60,000 newtons y el avin comienza a acelerar. Al aumentar la velocidad del
avin, el arrastre aerodinmico aumenta en proporcin con el cuadrado de la
velocidad respecto al aire.
Despus de cierto tiempo, el avin alcanza una nueva velocidad de crucero en la
que el empuje de los motores UDF es equilibrado por el arrastre. Las ecuaciones
empleadas para estimar la velocidad y aceleracin del avin desde el momento
en que se reajustan las gargantas hasta que el avin alcanza su nueva velocidad
de crucero (aproximadamente 120 s despus) son las siguientes:
Velocidad = 0.00001tiempo
3
- 0.00488tiempo
2
+ 0.75795tiempo + 181.3566
Aceleracion= 3- 0.000062velocidad
2

Escriba un programa MATLAB que pida al usuario introducir un tiempo inicial y un
tiempo final (ambos en segundos) que definan un intervalo de tiempo para el cual
deseamos graficar la velocidad y la aceleracin del avin.
Suponga que el tiempo cero representa el punto en el que se aument el nivel de
potencia. El tiempo final deber ser 120 segundos o menos.
51
Calcular la nueva velocidad y aceleracin del avin despus de un cambio en el
nivel de potencia.
El siguiente diagrama muestra que las entradas del programa son los tiempos
inicial y final y que las salidas son grficas de los valores de velocidad y
aceleracin dentro de este lapso.





Dado que el programa est generando una grafica para un intervalo de tiempo
especfico, supondremos que el intervalo es de 0 a 5 segundos. Luego
calculamos unos cuantos valores con una calculadora para poderlos comparar
con los valores de las curvas generadas por el programa.

Tiempo (s) Velocidad (m/s) Aceleracin (m/s^2)
0.0 181.3566 0.9608
3.0 183.5868 0.9103
5.0 185.0256 0.8775
La generacin de las curvas del valor de la velocidad y aceleracin requiere los
siguientes pasos:
1. leer lmites del intervalo de tiempo
2. calcular los valores de velocidad y aceleracin correspondientes.
3. graficar la nueva velocidad y aceleracin
Puesto que el intervalo de tiempo depende de los valores de entrada, puede ser
muy pequeo o muy grande, por tanto, en lugar de calcular valores de velocidad y
aceleracin en los puntos especificados, calcularemos 100 puntos dentro del
intervalo especificado.
Tiempo inicial
Tiempo finall
Grafica de valores de velocidad
Grafica de valores de aceleracin
52
Primero probamos el programa usando los datos del ejemplo a mano. Esto
genera la siguiente interaccin:
Teclee tiempo inicial (en segundos):0
Teclee tiempo final (mx 120 segundos): 5
La grafica generada por el programa se muestra en las figuras en vista de que los
valores calculados coinciden con el ejemplo a mano, podemos probar el programa
con otros valores de tiempo. Si los valores no hubieran concordado con el
ejemplo, habriamos tenido que determinar si el error estuvo en el ejemplo o en el
programa.
En la figura se muestran las graficas generadas para el intervalo de tiempo de 0 a
120 segundos. Observe que la aceleracin se acerca a cero conforme la
velocidad se acerca a la nueva velocidad de crucero.

53
ARCHIVO M
















% Estos comandos generan y grafican valores de velocidad
% y aceleracion en un int ervalo especificado por el usuario
%
tiempo_inicial input(' Teclee tiempo inicial (en segundos) : ');
tiempo_ final input(Teclee tiempo final (max 120
=
= segundos) : ');
%
incr _ tiempo (tiempo_ final tiempo_ final) / 99;
tiempo tiempo_inicial : incr _ tiempo : tiempo_ final;
velocidad 0.00001* tiempo. 3 0.00488 * tiempo. 2...
0.75795 * tiempo 181.3566;
aceleracion 3 0.00062 * v
. .
=
=
=
+ +
= elocidad. 2;
%
subplot(2,1,1),plot(tiempo, velocidad), title(' Velocidad'),...
ylabel(' metros/ segundos'),grid,...
subplot(2,1,2),plot(tiempo,aceleracion), title(' Aceleracion'),...
xlabel(' Tiempo, s'), ylabel(met
.
ros/ segundo 2),grid
.
54
CARACTERES ESPECIALES
CARACTER DETALLE
[ ] Forma matrices
( ) Forma subndices
, Separa subndices o elementos de matrices
; Spara comandos o filas de matrices
% Indica comentarios
: Genera matrices
+ Suma de escalares y arreglos
- Resta de escalares y arreglos
* Multiplicacin de escalares
.* Multiplicacin de arreglos
/ Divisin de esvalares
./ Divisin de arreglos
^ Potenciacin de escalares
.^ Potenciacin de arreglos
Transponer

COMANDOS Y FUNCIONES
ans almacena valores de expresiones
axis controla la escala de los ejes
^C genera un aborto local
clc despeja la pantalla de comandos
clear despeja el espacio de trabajo
clf borra una figura
55
clock representa la hora actual
date representa la fecha actual
demo ejecuta demostraciones
disp exhibe matriz o texto
eps representa la precision de punto flotante
exit termina MATLAB
eye genera una matriz identidad
format + establece formato de solo signos ms y menos
forma
compact
establece formato de forma compacta
format
long
establece formato decimal largo
format
long e
establece formato exponencial largo
format
loose
establece formato de forma no compacta
format
short
establece formato decimal corto
format
short e
establece formato exponencial corto
fprintf imprime informacin formateada
grid inserta una reticula en una grfica
help invoca el recurso de ayuda
i representa el valor 1
inf representa el valor
input acepta entradas del teclado
j representa el valor 1
load carga matrices de un archivo
56
loglog genera una grafica log-log
NaN representa el valor No-es-un-nmero
ones genera una matriz de unos
pause detiene temporalmente un programa
pi representa el valor t
plot genera una grafica xy lneal
print imprime Ia ventana de grficos
quit termina MATLAB
save guarda variables en un archivo
semilogx genera una grfica log-lneal
semilogy genera una grafica lneal-log
size determina las dimensiones de filas y columnas
subplot divide la ventana de grficos en subventanas
title agrega un tItulo a una grfica
who lista las variables en memoria
whos lista las variables y sus tamaos en memoria
xlabel agrega una leyenda de eje x a una grfica
ylabel agrega una leyenda de eje y a una grafica
zeros genera una matriz de ceros

N NOTAS
1 Escoja nombres que le ayuden a recordar lo que se est almacenando
en la variable.
2 Siempre incluya unidades y un tItulo en las grficas para fines de
documentacin.
3 Use la extensin dat en los archivos de datos para distinguirlos de los
57
archivos MAT y los archivos M.
4 Use multiples instrucciones para calcular expresiones largas,
hacindolas ms comprensibles
5 Para comparar informacin de diferentes grficas, use el comando
axis para especificar que las grficas tengan los mismos ejes.

N NOTAS DE DEPURACIN
1 Hasta que se sienta comodo asignando valores a una matriz, omita el
signo de punto y coma despus de una definicin de matriz a fin de
que se exhiban los nmeros.
2 No use los nombres i o j para variables en un programa que maneje
nmeros complejos.
3 Pruebe una expresin complicada con valores sencillos para
asegurarse de que entiende com se evala.
4 Agregue parntesis extra, si es necesario, para asegurarse de que los
clculos se efecten en el orden deseado.
5 Recuerde que el logaritmo de un valor negativo o de cero no existe.

Tablas de conversion. En los problemas 1-10, exhiba las tablas especificadas
usando el operador de transponer si es necesario. Incluya una cabecera de tabla
y cabeceras de columna. Escoja un nmero apropiado de posiciones decimales
para los valores.
1. Genere una tabla de conversiones de grados a radianes. La primera lnea
deber contener los valores para 0, la segunda deber contener los
valores para 100, etc. La ltima lnea deber contener los valores para
360. (Recuerde que radianes = 180.)
2. Genere una tabla de conversiones de centImetros a pulgadas. Comience la
columna de centmetros en 0, con incrementos de 2 cm. La ultima lnea
deber contener el valor de 50 cm. (Recuerde que 1 pulg = 2.54 cm)
3. Genere una tabla de conversiones de mts/h a ft/s. Inicie la columna de
mts/h en 0, con incrementos de 5 mts/h. La ultima lnea deber contener el
valor de 65 mi/h. (Recuerde que 1 mt = 3.280 ft)
Conversiones monetarias. Las siguientes conversiones monetarias aplican
a los problemas 4-7:
$1 = 5.045 francos (Fr)
58
1 yen (Y) = $0101239
1.4682 marco alemn (DM) = $1
4. Genere una tabla de conversiones de francos a dlares. Inicie la columna
de los francos en 5 Fr, con incrementos de 5 Fr. Exhiba 25 lneas de la
tabla.
5. Genere una tabla de conversiones de marcos alemanes a francos. Inicie la
columna de marcos alemanes en 1 DM, con incrementos de 2 DM. Imprima
30 lneas de la tabla.
6. Genere una tabla de conversiones de yenes a marcos alemanes. Inicie la
columna de yenes en 100 Y y exhiba 25 lneas, de modo que la ltima lnea
contenga
10000 Y.
7. Genere una tabla de conversiones de dlares a francos, marcos alemanes
y yenes. Inicie la columna en $1, con incrementos de $1. Imprima 50 lneas
de la tabla.
Conversiones de temperatura. Los siguientes problemas generan tablas de
conversin de temperatura. Use las siguientes ecuaciones que dan las relaciones
entre temperaturas en grados Fahrenheit (F), grados Celsius (C), grados Kelvin
(K) Y grados Rankin (R):
TF=T~~_459.67
= TC + 32
TR =
8. Genere una tabla con las conversiones de Fahrenheit a Kelvin para
valores de
9. 0 F a 200 F. Permita al usuario especificar el incremento en grados F
entre cada lnea.
10. Genere una tabla con las conversiones de Celsius a Rankin. Permita al
usuario introducir la temperatura inicial y el incremento entre lneas.
Imprima 25 lneas de la tabla.
11. Genere una tabla con conversiones de Celsius a Fahrenheit. Permita al
usuario introducir la temperatura inicial, el incremento entre lneas y el
nmero de 11-lineas de la tabla.
59
Las expresiones aritmtcas a menudo requieren clculos distintos de la
suma, resta, multplicacin division y exponenciacin. Por ejemplo, muchas
expresiones requieren el empleo de logaritmos funciones trigonomtricas,
polinomios y nmeros complejos. MATLAB contiene varias funciones para realizar
estos clculos adicionales. Por ejemplo, si queremos calcular el seno de un
angulo y almacenar el resultado en b, podemos usar el siguiente comando:


La funcin sin supone que el argumento est en radanes. Si el argumento
contiene un valor en grados, podemos convertr los grados a radanes dentro de
la referencia la funcin:


Tambin podramos haber hecho la conversin en una instruccin aparte:


Estas instrucciones son vlidas Si angulo es un escalar o una matriz; Si
angulo es un matriz, la funcin se aplicar elemento por elemento a los valores
de Ia matriz.
Ahora que hemos visto un ejemplo del uso de una funcin, resumiremos las
reglas que lo rigen. Una funcin es una referencia que representa una matriz.
Los argumentos o parmetros de una matriz se colocan entre parntesis despus
del nombre de la funcin. Una funcin puede tener cero, uno o muchos
argumentos dependiendo de su definicin. Por ejemplo, pi es una funcin que no
tiene argumento cuando usamos la referencia de funcin pi, el valor de t
susttuye automatcamente Ia referencia a la funcin. Si una funcin contiene ms
de un argumento, es muy importante dar los argumentos en el orden correcto.
Algunas funciones tambin requieren que los argumentos estn en unidades
especficas. Por ejemplo, las funcion trigonomtricas suponen que los argumentos
estn en radanes. En MATLAB, algunas funciones usan el nmero de
argumentos para determinar el resultado de la funcin Adems, los nombres de
funciones deben estar en minsculas.
No podemos colocar una referencia de funcin a la izquierda de un signo igual
porque representa un valor y no una variable. Las funciones pueden aparece Ia
izquierda de un signo de igual y en expresiones. Las referencias de funcin
tambin pueden formar parte del argumento de otra referencia de funcin. Por
ejemplo la siguiente instruccin calcula el logaritmo del valor absoluto de x:
log_x = log(abs(x));
b sin(angulo); =
b sin(angulo * pi / 180); =
angulo_radianes angulo * pi / 180);
b sin(angulo_radianes);
=
=
Funcin
60
Si se usa una funcin para calcular el argumento de otra funcin, hay que
asegurarse de que el argumento de cada funcin est encerrado en su propio
juego de parentesis. Este anidamiento de funciones tambin se llama
composicin de funciones.
A continuacin veremos varias categoras de funciones que se usan
comnmente en calculos de ingeniera. Presentaremos otras
funciones en los temas restantes cuando tratemos los temas
pertnentes. En el apndice A hay tablas de las funciones comunes,
lo mismo que en las dos ltmas pginas del texto.
Las funciones matemticas comunes incluyen funciones para calcular el valor
absoluto de un valor o la raz cuadrada de un valor o para redondear un valor. He
aqu una lista de estas funciones junto con descripciones breves.
abs (x) Calcula el valor absoluto de x.
sqrt (x) Calcula la raz cuadrada de x.
round(x) Redondea x al entero ms cercano.
fix(x) Redondea (o trunca) x al entero ms cercano a 0.
floor Cx) Redondea x al entero ms cercano a -
ceil (x) Redondea x al entero ms cercano a
sign(x) Devuelve un valor de -1 Si x es menor que 0, un valor de 0 si x es
igual a 0 y un valor de 1 si x es mayor que 0.
ren(x,y) Devuelve el residuo de x/y. Por ejemplo, ren(25,4) es 1, y ren
(100,21) es 16. Esta funcin tambin se llama funcin mdulo.
exp (x) Calcula e
x
, donde e es la base de los logaritmos naturales
(aproximadamente 2.718282).
log (x) Calcula ln x, el logaritmo natural de x con base e.
log
10
(x) Calcula log
10
x, el logaritmo comn de x con base 10.
TALLER N
Evale las siguientes expresiones, y luego verifique sus respuestas introduciendo
las expresiones en MATLAB.
1. round(-2.6) 2. fix(-2.6)
3. floorC-2.6) 4. ceil(-2.6)
5. sign(-2.6) 6. rem(15,2)
7. floor(ceil10.8)) 8. log10(100) + log10(0.001)
9. abs(-5:5) 10. round([0:0.3:2,1:0.75:4])

61
Las funciones trigonomtricas suponen que los angulos se representan en
radanes. Para convertr radanes a grados o grados a radanes, use las
siguientes conversiones, que se basan en el hecho de que 180 = t radanes:



He aqu una lista de las funciones trigonomtricas con descripciones breves:
sin(x) Calcula el seno de x, donde x est en radanes
cos(x) Calcula el coseno de x, donde x est en radanes
tan(x) Calcula la tangente de x, donde x est en radanes.
asin(x) Calcula el arcoseno o seno inverso de x, donde x debe estar
entre -1 y 1. La funcin devuelve un angulo en radanes entre
-t /2.y t /2.
acos(x) Calcula el arcocoseno o coseno inverso de x, donde x debe
estar entre -1 y 1. La funcin devuelve un angulo en radanes
entre 0 y t.
atan(x) Calcula la arcotangente o tangente inversa de x. La funcin
devuelve un ngulo en radanes entre -t /2 y t /2.
atan2(y,x) Calcula la arcotangente o tangente inversa del valor y/x. La
funcin devuelve un ngulo en radanes que est entre -t y t
dependiendo de los signos de x y de y.
Las dems funciones trigonomtricas pueden calcularse usando las siguientes
ecuaciones: I








TALLER N
Escriba comandos MATLAB para calcular los siguientes valores, suponiendo
que todas las variables sean escalares:
1. Movimiento uniformemente acelerado:
( )
( )
( )
( )
( )
( )
( )
( )
2
1 1 1
sec x csc x cot x
cos x sin x tan x
1
arcsec x ar cos para x 1
x
1
arccsc x arcsen para x 1
x
x
arccot arccos
1 x
= = =
| |
= >
|
\ .
| |
= >
|
\ .
| |
=
|
+ \ .
angulo_grados angulo_radianes * (180/ pi);
angulo_radianes angulo_grados * (pi / 180);
=
=
Funcines
Trigonome
tricas
62

2. Frecuencia de oscilacin elctrica:



3. Alcance de un proyectl:



4. Contraccin longitudinal:



5. Volumen de un anillo de filete:



6. Distancia del centro de gravedad a un plano de referencia en un sector de
cilindro hueco:



Las funciones hiperblicas son funciones de la funcin exponencial natural, e
x
;
hiperblicas las funciones hiperblicas inversas son funciones de la funcin de
logaritmo natural,
ln x. MATLAB incluye varias funciones hiperblicas, cmo se muestra en estas
breves descripciones:
sinh(x) Calcula el seno hiperblico de x, que es igual a:



coshCx) Calcula el coseno hiperblico de x, que es igual a:


2
i
movimiento v 2.a.x = +
1
frecuencia
2 c
L
=
t
( ) ( )
2
i
sen b .cos b
alcance 2v .
g
=
2
v
longitud k 1
c
| |
=
|
\ .
2
volumen 2 1 .y 0.8333 .x
4 4
t t ( | | | |
= t
| | (
\ . \ .
( ) ( )
2
i
sen b .cos b
alcance 2v .
g
=
x x
e e
2

x x
e e
2

+
63
tanh(x) Calcula la tangente hiperblica de x, que es igual a:


asinh(x) Calcula el seno hiperblico inverso de x, que es igual a:


acosh(x) Calcula el coseno hiperblico inverso de x, que es iguaI a:


atanh(x) Calcula la tangente hiperblica inversa de x, que es igual a:



Las dems funciones hiperblicas e hiperblicas inversas se pueden Calcular
usando las siguientes ecuaciones:











TALLER N
Escriba expresiones MATLAB para calcular los siguientes valores. (Suponga que
x es un escalar y que su valor est en el intervalo de valores correcto para los
clculos


senhx
coshx
( )
2
ln x x 1 + +
( )
2
ln x x 1 +
1 x
ln para x 1
1 x
+
s

2
2
coshx
cothx para x 0
senhx
1
sechx
coshx
1
csch
senhx
x 1
acothx ln para x 1
x 1
1 1 x
asechx ln para 0 x 1
x
1 1 x
acshx ln
x x
= =
=
=
+
= >

| |
+
= s s |
|
\ .
| |
+
= + |
|
\ .
1. cothx 2. secx
3. cscx 4. acothx
5. asechx 6. acscx



64
OPERACIONES ARITMTCAS CON NMEROS COMPLEJOS
OPERACIN RESULTADO







Suponga que: c
1
=a
1
+ib
1
c
2
=a
2
+ib
2

Los nmeros complejos son necesarios para resolver muchos problemas en
ciencias e ingeniera. Recuerde que un nmero complejo tiene la forma a + ib,
donde i es la parte real del valor y b es la parte imaginaria del valor.
La tabla 3.1 es un repaso de los resultados de las operaciones aritmtcas entre
dos nmeros complejos.
Una de las ventajas de usar MATLAB para calculos de ingeniera es su facilidad
para manejar nmeros complejos.
Un nmero complejo se almacena cmo dos nmeros reales (que representan Ia
parte real y la parte imaginaria) en MATLAB. Los comandos MATLAB tambin
suponen que i. representa 1 , a menos que se haya dado a i un valor distinto.
(MATLAB tambin reconoce el uso de j para representar 1
Esta notacin es de uso comn en ingeniera elctrica.) As, el siguiente
comando define una variable compleja x:


Cuando realizamos operaciones entre dos nmeros complejos, MATLAB
automatcamente realiza los clculos necesarios, cmo se bosqueja en la tabla
3.1.
Si se realiza una operacin entre un nmero real y uno complejo, MATLAB
supone que la parte imaginaria del nmero real es 0. Tenga cuidado de no usar
el nombre i o j para otras variables en un programa en el que tambin se usen
1 2
C C +
1 2
C C
1 2
C .C
1
2
C
C
1
C
*
1
C
( ) ( )
1 2 1 2
a a i b b + + +
( ) ( )
1 2 1 2
a a i b b +
( ) ( )
1 2 1 2 1 2 2 1
a a b b i a b a b +
1 2 1 2 2 1 2 1
2 2 2 2
2 2 2 2
a a b b a b b a
i
a b a b
| | | | +
+
| |
+ +
\ . \ .
2 2
1 1 1
a b (magnitud o valor absoluto de c ) +
1 1 1
a ib (conjugado de c )
x 1 i * 0.5; =
65
nmeros complejos los nuevos valores susttuirn al valor de 1 y podran
causar muchos problemas.
Coordenadas rectangulares y polares. Podemos visualizar el sistema de
nmeros complejos cmo un plano con un eje real y uno imaginario.
Los nmeros reales (los que no tienen parte imaginaria) representan el eje x; los
nmeros imaginarios (los que no tienen parte real) representan el eje y; y los
nmeros que tienen tanto parte real cmo inmaginaria representan el resto del
plano.
As, el sistema de nmeros reales.con el que estamos ms familiarizados) es un
subconjunto del sistema de nmeros complejos. Cuando representamos un
nmero complejo con una parte real y una parte imaginaria, cmo en 2 + i3,
estamos usando notacin rectangular.
En la figura 3.1 vemos que un nmero complejo podra describirse tambin con un
angulo u y un radio r relatvo al origen. Esta forma de denomina notacin polar, y
el punto 2 + i3 puede representarse en notacin polar con Un ngulo de .98
radanes y un radio de 3.6.
Estudiando la figura 3.1 es fcil determinar las siguientes relaciones para realizar
conversiones entre coordenadas rectangulares y polares.
Conversion rectangular a polar:


Conversion polar a rectangular:


MATLAB incluye varias funciones que son especficas para nmeros complejos y
sus conversiones
conj(x) Calcula el conjugado complejo del nmero complejo x. Por tan-to,
Si x es igual a a + ib, conj(x) es igual a a - ib.
realx Calcula la porcin real del nmero complejo x.
imag(x) Calcula la porcin imaginaria del nmero complejo x.
abs(x) Calcula el valor absoluto o magnitud del nmero complejo x.
angle(x> Calcula el ngulo usando el valor de atan2(imag(x),real(x)); As, el
valor del ngulo est entre -t y . t
Frmula de Euler. Para deducir algunas propiedades importantes de los nmeros
complejos necesitamos las siguientes representaciones de serie de Maclaurin,
que por lo regular se ven en los cursos de clculo:


2 2 1
b
r a b , tan
a

= + u =
a r cos , b rsen = u = u
66





Ahora, sea x el valor imaginario ib. Entonces, por Ia Ec. (3.3) tenemos:






Ahora separamos Ia suma infinita de Ia Ec. (3.4) en dos partes, obteniendo:



Por ltimo, susttuimos las sumas infinitas de las Ecs. (3.1) y (3.2) en Ia Ec.
(3.5) para obtener:


La Ec. (3.6) es una frmula muy importante ilamada frmula de Euler. Esta
frmula de Euler se usa con frecuencia As cmo estas dos frmulas adicionales
que se pueden deducir de ella:






Usando la frmula de Euler, podemos expresar un nmero complejo en forma de
coordenadas rectangulares o en forma polar. Esta relacin se deduce cmo sigue:



3 5
2 4
2 3
X
x x
senx x ...
3! 5!
x x
cosx 1 ...
2! 4!
x x
e 1 x ...
2! 3!
= +
= +
= + + + +
( ) ( ) ( ) ( )
2 3 4 5
ib
2 3 4 5
ib ib ib ib
e 1 ib ...
2! 3! 4! 5!
b b b b
1 ib i i ...
2! 3! 4! 5!
= + + + + + +
= + + + + + +
2 4 3 5
ib
b b b b
e 1 ... i b ...
2! 4! 3! 5!
| | | |
= + + +
| |
\ . \ .
ib
e cosb isenb = +
i i
i i
e e
sen
2i
e e
cos
2
u u
u u

u =
+
u =
( ) ( )
( )
a ib r cos i rsen
r cos isen
+ = u + u
= u + u
67
Ahora usamos las Ecs. (3.7) y (3.8) en Ia Ec. (3.9) para obtener:


donde,




As, podemos representar un nmero complejo ya sea en forma rectangular (a+bi)
o en forma exponencial (re
iu
)
TALLER N
Convierta los valores complejos de los problemas 1-4 a la forma polar. Luego
verifique sus respuestas usando funciones MATLAB.




Convierta los valores exponenciales complejos de los problemas 5-8 a forma
rectangular. Verifique sus respuestas usando funciones MATLAB.






Grficas polares. Los datos a veces se representan con valores complejos, que
pueden considerarse cmo un ngulo y una magnitud. Por ejemplo, si medimos la
intensidad de luz alrededor de una fuente de luz, podramos representar Ia
informacin con un ngulo desde un eje fijo y una magnitud que representa la
intensidad.
Para graficar datos complejos, tal vez querramos usar una grfica polar en lugar
de graficar la informacin de magnitud y fase por separado. El comando MATLAB
para generar una grfica polar de los vectores theta y r es el siguiente
polar (theta, r) Genera una grfica polar de los ngulos theta (en radanes)
versus las magnitudes r.
El comando polar (r) Genera una grfica usando los Indices del vector r cmo los
i
a ib re
u
+ =
2 2 1
b
r a b , tan ;
a
a r cos , b rsen

= + u =
= u = u
1. 3 2i
2. i
3. 2
4. 0.5 i



+
X
i0.75
i2.3
i3
5. e
6. e
7. 0.5e
8. 3.5e
t
t

Graficas
Polares
68
valores de u.
A fin de ilustrar el uso de la funcin polar, suponga que deseamos generar
puntos en una curva con radio creciente. Podramos generar valores de ngulo
desde 0 hasta 2t, y el radio correspondiente que aumenta de 0 a 1.
La figura 3.2 contiene una grfica polar generada con las siguientes
instrucciones:



grafica

Un polinomio es una funcin de una sola variable que se puede expresar en la
siguiente forma general,


donde la variable es x y los coeficientes del polinomio se representan con los
valones de a
0
, a
1
, etc. El grado de un polinomio es igual al valor ms alto
empleado cmo exponente. Por tanto, la forma general de un polinomio cbico
(grado 3) es:
g(x) = a
0
x
3
+ a
1
x
2
+ a
2
x + a
3

y un ejemplo especfico de un polinomio cbico es:
h(x) = x
3
- 2x
2
+ 0.5x - 6.5.
Observe que, en la forma general, la suma del subindice del coeficiente y el
exponente de la variable da el grado del polinomio.
Los polinomios ocurren con frecuencia en aplicaciones de ciencias e ingeniera
porque suelen ser buenos modelos para representar sistemas fsicos. En esta
seccin veremos la evaluacin de polinomios y los clculos con polinomios. Si a
usted le interesa modelar Un Conjunto de datos empleando un modelo
polinmico.
Evaluacin de polinomios. Hay varias formas de evaluar un polinomio para un
conjunto de valores usando MATLAB. Cmo ilustracin, considere el siguiente
polinomio:
f(x) = 3x
4
- 0.5x
3
+ x - 5.2
Si queremos evaluar esta funcin para un valor escalar que est almacenado en
x, podemos usar operaciones escalares cmo se muestra en este comando:
theta 0 : 2 * pi / 100 : 2 * pi;
r theta/(2 * pi);
polar(theta,r), title(' Grafica Polar ')
=
=
Polinomio
N N 1 N 2 2
o 1 2 N 2 N 1 N
f(x) a x a x a x ............a x a x a


= + + + + +
69


Si x es un vector o una matriz, necesitaremos especificar operaciones de arreglo
o de elemento por elemento:


El tamao de la matriz f ser el mismo que el de Ia matriz x.
Los polinomios tambin pueden evaluarse usando la funcin polyval:
polyval(a,x) Evala un polinomio con coeficientes a para los valores que
estn en x. El resultado es una matriz del mismo tamao que x.
As, podemos usar los siguientes comandos para evaluar el polinomio del prrafo
anterior, si el vector a contiene los coeficientes del polinomio:



Estos comandos tambin podran combinarse en uno slo:


Suponga que queremos evaluar el siguiente polinomio dentro del intervalo [0,5]:


La siguiente referencia polyval generar y graficara 201 puntos del polinomio
dentro del intervalo deseado:





Operaciones de polinomios. Si suponemos que los coeficientes de dos polinomios
estn almacenados en los vectores a y b, podremos realizar clculos con
polinomios usando a y b.
Por ejemplo, si queremos sumar polinomios, sumamos los coeficientes de los
terminos similares. Es decir, los coeficientes de la suma de dos polinomios son las
sumas de los coeficientes de los dos polinomios.
Cabe sealar que los vectores que contienen los coeficientes de los polinomios
deben ser del mismo tamao para poderlos sumar. Cmo ilustracin, suponga
f 3 * x 4 0.5 * x 3 x 5.2;
. .
= +
f 3 * x. 4 0.5 * x. 3 x 5.2;
. .
= +
| |
( )
a 3, 0.5,0,1, 5.2 ;
f polyval a, x ;
=
=
| | ( )
f polyval 3, 0.5,0,1, 5.2 , x ; =
( )
5 3 2
g x x 3x 2.5x 2.5; = +
| |
( )
( ) ( )
x 0: 5/ 200 : 5;
a 1,0,3, 2.5,0, 2.5 ;
g polyval a, x ;
plot x,g , title 'Funcion Polinomica'
=
=
=
70
que deseamos efectuar la siguiente suma de polinomios:




Las instrucciones MATLAB para realizar esta suma son:




Cmo esperbamos, el valor de s es [1, 4, - 5, 4, - 13.6].
Los coeficientes del polinomio que representa la diferencia entre dos polinomios
se pueden calcular de forma similar.
El vector de coeficientes de la diferencia se calcula restando los dos vectores de
coeficientes de polinomios. Una vez ms, el tamao de los dos vectores de
coeficientes tendra que ser el mismo.
Podemos especificar un multplo escalar de un polinomio multplicando el vector
de coeficientes del polinomio por el escalar. As, si queremos especificar el
siguiente polinomio,
g(x)=3f(x)
podemos representar g(x) con Ia matriz de coeficientes que es un escalar
multplicado por el vector de coeficientes de f(x). Si f(x) = 3x
2
- 6x + 1, el vector de
coeficientes g podr calcularse cmo sigue:



Desde luego, el escalar puede ser positivo o negativo.
Multplicar dos polinomios es ms complicado que sumar o restar dos polinomios
porque se generan y combinan varios terminos. De forma similar, dividir dos
polinomios es un proceso tedioso porque debemos multplicar y restar polinomios.
MATLAB contiene funciones para realizar multplicacin y division de polinomios:
cony (a, b) Calcula un vector de coeficientes que contiene los
coeficientes del producto de los polinomios representados por
los coeficientes contenidos en a y en b. Los vectores a y b no
tienen que tener el mismo tamao.
[q,r] = deconv(n,d) Devuelve dos vectores. El primero contiene los coeficientes
del cociente y el segundo contiene los coeficientes del
( )
( )
( ) ( ) ( )
4 2
3 2
g x x 3x x 2.4
h x 4x 2x 5x 16
s x g x h x
= +
= +
= +
| |
| |
g 1,0, 3, 1,2.4 ;
h 0, 4, 2,5, 16 ;
s g h;
=
=
= +
| | f 3, 6,1 ;
g 3 * f;
=
=
71
polinomio que es el residuo.
A fin de ilustrar el uso de las funciones cony y deconv para la multplicacin y
division de polinomios, consideremos el siguiente producto de polinomios:


Podemos multplicar estos polinomios usando la funcin cony de esta manera:




El resultado que ofrece MATLAB es:



Que corresponde a la siguiente ecuacin:


Podemos ilustrar la divisin de polinomios usando los polinomios anteriores:



Esta division polinmica se especifica con estos comandos:




Cmo esperabamos, el vector de coeficientes del cociente es [3, -5, 6, -2], que
representa el polinomio cociente 3x
3
- 5x
2
+ 6x - 2, y el vector del residuo contiene
ceros.
Varias aplicaciones de ingeniera requieren expresar el cociente de dos
polinomios cmo una suma de fracciones polinmicas
TALLER N
Suponga que se han dado los siguientes polinomios
f
1
(x) = x
3
3x
2
x + 3
( ) ( ) ( )
3 2 5 4 2
g x 3x 5x 6x 2 x 3x x 2.5 = + + +
| |
| |
( )
a 3, 5,6, 2 ;
b 1,3,0, 1,0,2,5 ;
g conv a,b ;
=
=
=
g
3 4 9 13 1 1.5 10.5 15 5
=

( )
8 7 6 5 4 3 2
g x 3x 4x 9x 13x x 1.5x 10.5x 15x 5 = + + + +
( )
8 7 6 5 4 3 2
5 4 2
3x 4x 9x 13x x 1.5x 10.5x 15x 5
h x
x 3x x 2.5
+ + + +
=
+ +
| |
| |
| | ( )
g 3, 4, 9,13, 1,1.5, 10,5,15, 5 ;
b 1,3,0, 1,0,2.5 ;
q,r deconv g,b ;
=
=
=
72
f
2
(x)=x
3
6x
2
+12x8
f
3
(x) = x
3
8x
2
+ 20x 16
f
4
(x) = x
3
5x
2
+ 7x 3
f5(x) = x 2
Grafique cada una de las siguientes funciones en el intervalo [0,4]. Use funciones
MATLAB con vectores de coeficientes de polinomios para evaluar las
expresiones.

Ra
ce
s
de
polinomios. La resolucin de muchos problemas de ingeniera implica obtener las
Races de una ecuacin de la forma:
y=f(x)
donde las Races son los valores de x para los que y = 0. Entre los ejemplos de
aplicaciones en las que necesitamos obtener las Races de ecuaciones incluyen
el diseo del sistema de control para un brazo robtico, el diseo de resortes y
amortguadores para automviles, el anlisis de Ia respuesta de un motor y el
anlisis de la estabilidad de un filtro digital.
Si la funcin f(x) es un polinomio de grado N, entonces f(x) tiene exactamente N
Races. Esas N Races pueden contener Races multples o Races complejas,
cmo se mostrar en los siguientes ejemplos.
Si suponemos que los coeficientes (a
0
, a
1
,. . .) del polinomio son valores reales,
todas las Races complejas siempre ocurrirn en pares conjugados complejos.
Si un polinomio se factoriza obteniendo terminos lneales, es fcil identficar las
Races del polinomio igualando cada trmino a 0. Por ejemplo, considere Ia
siguiente ecuacin:
f(x) = x
2
+ x - 6
=(x - 2)(x+3)
Entonces, si f(x) = 0, tenemos lo siguiente:
(x - 2)(x+3)=0
Las races de Ia ecuacin, que son los valores de x para los que f(x) = 0, son x =2
y x = - 3. Las Races tambin corresponden al valor de x donde el polinomio cruza
el eje x, cmo se muestra en Ia figura 3.3.
FIGURA
Un polinomio cubco tiene la siguiente forma general:
f(x) = a
0
x
3
+ a
1
x
2
+ a
2
x + a
3

( ) ( ) ( )
( ) ( ) ( ) ( ) ( )
( ) ( ) ( ) ( ) ( )
1 2 4
5 2 3 1 3
4 1 2 5
1. f x 2. f x 2f x
3. 3f x f x 2f x 4. f x * f x
5. f x / x 1 6. f x * f x / f x

+

73
Cmo el polinomio cubico tiene grado 3, tiene exactamente tres Races. Si
suponemos que los coeficientes son reales, las posibilidades para las Races son
las siguientes:
3 Races reales distntas
1 raz real con multplicidad de 3
1 raz real simple y 1 raz real con multplicidad de 2
1 raz real y un par conjugado complejo de Races.
He aqu algunos ejemplos de funciones que ilustran estos casos:









La figura 3.4 contiene grficas de estas funciones. Observe que las Races reales
corresponden a los puntos donde la funcin cruza el eje x.
FIGURA
Es relatvamente fcil determinar las Races de grado 1 o 2 igualando el polinomio
a 0 y despejando x. Si no se puede factorizar fcilmente un polinomio de segundo
grado, Se puede usar la ecuacin cuadrtca para obtener las dos Races.
En el caso de polinomios de grado 3 o superior, puede ser difcil determinar las
Races de los polinomios a mano.
Existen varias tcnicas numricas para determinar las Races de polinomios;
algunas de ellas, cmo la bsqueda incremental, el mtodo de biseccin y la
tcnica de posicin falsa, identfican las races reales buscando puntos en los que
la funcin cambia de signo, porque esto indica que la funcin cruz el eje x.
Podemos usar otras tcnicas, cmo el mtodo de Newton-Raphson, para obtener
Races complejas.
La funcin MATLAB para determinar las Races de un polinomio es la funcin
roots
roots (a) Determina las Races del polinomio representado por el vector de
coeficientes a.
La funcin roots devuelve un vector de columna que contiene las Races del
polinomio; el nmero de Races es igual al grado del polinomio. A fin de ilustrar el
( ) ( ) ( ) ( )
( ) ( )
( ) ( ) ( )
( ) ( ) ( ) ( ) ( ) ( )
1
3 2
2
2
3 2
2
3
3
4
3 2
f x x 3 x 1 x 1
x 3x x 3
f x x 2
x 6x 12x 8
f x x 4 x 2
x 12x 16
f x x 2 x 2 i x 2 i
x 2x 3x 10
= +
= +
=
= +
= +
= +
= + +
= +
74
uso de esta funcin, suponga que nos interesa determinar las Races de este
polinomio:
J(x)=x
3
2x
2
3x+10
Los comandos para calcular e imprimir las Races de este polinomio son:


Estos dos comandos tambin podran combinarse en uno slo:


Los valores que se imprimen son 2+i; 2-i; -2. Podemos verificar que estos valores
son Races evaluando el polinomio en las Races y observando que su valor es
prctcamente 0:


Si tenemos las Races de un polinomio y queremos determinar los coeficientes del
polinomio cuando se multplican todos los terminos lneales, podemos usar la
funcin poly:
poly(r) Determina los coeficientes del polinomio cuyas races estn
contenidas en el vector r.
La salida de la funcin es un vector de fila que contiene los coeficientes del
polinomio. Por ejemplo, podemos calcular los coeficientes del polinomio cuyas
Races son -1, 1 y 3 con la siguiente instruccin:


El vector de fila a es igual a [1, -3, -1, 3], cmo esperbamos, porque sta es una
de las funciones de ejemplo que ya vimos en esta seccin.
TALLER N
Determine las races reales de los siguientes polinomios. Luego grafique cada
polinomio en un intervalo apropiado a fin de verificar que cruza el eje x en las
posiciones de las races reales.






| |
( )
p 1, 2, 3,10 ;
r roots p
=
=
| | ( )
r roots 1, 2, 3,10 =
| | ( )
polyval 1, 2, 3,10 ,r
| | ( )
a poly 1,1,3 ; =
( )
( )
( )
( )
( )
( )
( )
( )
3 2
1
2
2
2
3
5 4 3 2
4
5 4 3 2
5
5 4 3 2
6
5 4 3 2
7
5 4 3
8
g x x 5x 2x 8;
g x x 4x 4
g x x 2x 2
g x x 3x 11x 27x 10x 24
g x x 4x 9x 32x 28x 48
g x x 3x 4x 26x 40x 24
g x x 9x 35x 65x 64x 26
g x x 3x 4x 4x 4
= + +
= + +
= +
= + +
= + +
= +
= + +
= + +
75
MATLAB contiene varias funciones diseadas especficamente para evaluar y
graficar funciones de dos variables. Primero estudaremos la evaluacin de
funciones de dos variables; luego veremos las grficas tridimensionales y de
contorno de las funciones resultantes.
Evaluacin de funciones. Recuerde que la evaluacin de una funcin de una
variable, cmo f(x), implica calcular un vector de valores x, y luego calcular un
vector correspondiente de valores de Ia funcin cmo se ilustra con las siguientes
instrucciones:


Para evaluar una funcin f(x,y) de dos variables, primero definimos una retcula
bidimensional en el plano xy. A continuacin evaluamos ia funcin en los puntos
de la retcula para determinar puntos en la superficie tridimensional.
Este proceso se iiustra en la figura 3.5 que muestra una retcula subyacente de
valores xy con los correspondientes valores de z que representan los valores de
la funcin.
Definimos una retcula bidimensional en el plano xy en MATLAB usando dos
matrices. Una matriz contiene las coordenadas x de todos los puntos de la
retcula, y la otra contiene las coordenadas y de todos los puntos de la retcula.
Por ejemplo, supongamos que queremos definir una retcula en la que la
coordenada x vare de -2 a 2 en incrementos de 1 y Ia coordenada y vare de -1
a 2 en incrementos de 1. Esta retcula es similar a la retcula subyacente de la
figura 3.5. La matriz correspondiente de valores x de la retcula es la siguiente:




La matriz correspondiente de valores y de la retcula es esta matriz:





As, el punto de la esquina superior izquierda de la retcula tiene coordenadas (-2,
-1) y el punto de la esquina inferior derecha de la retcula tiene coordenadas (2,
2).
x 0 : 0.1: 5;
f 2 * x. 2 3 * x 2;
.
=
= +
2 1 0 1 2
2 1 0 1 2
2 1 0 1 2
2 1 0 1 2




1 1 1 1 1
0 0 0 0 0
1 1 1 1 1
2 2 2 2 2

76
La funcin meshgrid genera las dos matrices que definen la retcula subyacente
para una funcin bidimensional.
(x_grid,y_grid] = meshgrid(x,y) Genera dos matrices de tamao n x m, con base
en los valores de los vectores x y y que contiene
m-valores y n-valores, respectivamente. La
matriz x_grid contiene los valores de x
repetidos en cada fila, y la matriz y_grid
contiene los valores de y repetidos en cada
columna.
As, para generar las dos matrices descritas en la pgina anterior, podramos usar
las siguientes instrucciones:
x = -2:2;
y = -1:2;
(x_grid, y_grid) = meshgrid(x,y);
Una vez definidas las matrices de la retcula subyacente, podremos calcular los
valores correspondientes de la funcin. Por ejemplo, suponga que deseamos
evaluar la siguiente funcin para la retcula subyacente que acabamos de definir:


Los valores correspondientes de la funcin se pueden calcular y almacenar en
una matriz z de cuatro filas y cinco columnas con estas instrucciones:


Puesto que las operaciones son elemento por elemento, el valor de la matriz z
que tiene subindices (1, 1) se calcula usando los valores que estn en xgrid (1, 1)
y en y_grid (1, 1), y As sucesivamente. Observe que no se requieren ciclos para
calcular todos los valores de z. Un error comn al calcular los valores de una
funcin de dos variables es usar los vectores x y y, en lugar de los valores de la
retcula subyacente que estn en x_grid y en y_grid.
Grficas tridimensionales. Hay varias formas de graficar una superficie
tridimensional con MATLAB. En esta explicacin presentaremos dos tipos de
grficas:
La grfica de malla y la grfica de superficie. Una grfica de malla tiene una
cuadrcula de malla abierta cmo se aprecia en Ia figura 3.6, mientras que una
grfica de superficie tiene una cuadrcula sombreada cmo la de Ia figura 3.7. A
continuacin describimos las variaciones de los comandos MATLAB para generar
estas grficas:
mesh(x_pts,y_pts, z) Genera una grfica de cuadrcula abierta de la
superficie definida por la matriz z. Los argumentos
x_pts y y_pts pueden ser vectores que definen los
2 2
1
z f(x, y)
1 x y
= =
+ +
( )
z 1. / 1 x _grid. 2 y_grid. 2 ;
. .
= + +
77
intervalos de valores de las coordenadas x y y, o bien
matrices que definen la retcula subyacente de
coordenadas x y y.
surf (x_pts,y_pts, z) Genera una grfica de cuadrcula sombreada de la
superficie definida por la matriz z. Los argumentos
x_pts y y_pts pueden ser vectores que definen los
intervalos de valores de las coordenadas x y y, o bien
matrices que definen la retcula subyacente de
coordenadas x y y.
Las instrucciones que generaron las grficas de las figuras 3.6 y 3.7 son stas:











Observe que los argumentos x_grid y y_grid podran haber sido sustituidos por
x y y.
Una vez que sienta que ha adquirido soltura usando los comandos mesh y sur
utilice la funcin help para conocer las opciones adicionales de estos comandos
tambin las funciones view (para especificar el punto de vista) y colormap (para
espicificar las escalas de color).
Grficas de contorno. Un mapa de contorno es en esencia un mapa de
elevacin que contiene un grupo de lneas que conectan elevacones iguales.
Podemos imaginar una lnea que conecta puntos con la misma elevacin cmo un
corte del terreno a esa elevacin.
Si tenemos un mapa con muchas lneas que muestran diferentes elevacones,
podemos determinar dnde estn las montaas y los valles. Un mapa de contorno
se genera a partir de datos de elevacin tridimensionales, y puede ser generado
por MATLAB usando matrices que definen el intervalo de coordenadas x y y y los
datos de elevacin (coordenada z).
| | ( )
( )
( ) ( )
( ) ( )
( ) ( )
( )
x 2 : 0.1: 2;
y 1: 0.1: 2;
x _grid, y_grid meshgrid x, y ;
z 1. / 1 x _grid. 2 y_grid. 2 ;
subplot 2,2,1 ,mesgrid x _grid.y_grid, z ,...
title ' Grafica de Malla' , xlabel ' x' ,...
ylabel ' y' , zlabel ' z' ,pause
subplot 2,2,1 , surf x _grid, y_
=
=
=
= + . + .
( )
( ) ( )
( ) ( )
grid, z ,...
title ' Grafica de Superficie' , xlabel ' x' ,...
ylabel ' y' , zlabel ' z'
78
A continuacin describimos dos variaciones del comando contour y una variacin
relacionada del comando mesh:
contour(x,y, z) Genera una grfica de contorno de la superficie definida por la
matriz z. Los argumentos x y y son vectores que definen los
intervalos de valores de las coordenadas x y y. El ruImero de
lneas de contorno y sus valores se escogen
automticamente.
contour(x,y, z,v) Genera una grfica de contorno de la superficie definida por la
matriz z. Los argumentos x y y son vectores que definen los
intervalos de valores de las coordenadas x y y. El vector v
define los valores que se usarn para las lneas de contorno.
meshc(x_pts,y_pts,z) Genera una grfica de cuadrcula abierta de la
superficie definida por la matriz z. Los argumentos
x_pts y y_pts pueden ser vectores que definen los
intervalos de valores de las coordenadas x y y, o
pueden ser matrices que definen la retcula subyacente
de coordenadas x y y. Adems, se genera una grfica
de contorno debajo de la grfica de malla.
Los siguientes comandos generan las grficas que se muestran en las figuras 3.8
y 3.9, suponiendo que las matrices x, y, x_grid, y_grid y z se definen usando las
instrucciones MATLAB anteriores:
Grfica de contorno

Una vez que haya adquirido cierto dominio usando el comando contour, use la
funcin help para aprender a usar otras opciones de estos comandos y la funcin
Contour3 (para trazar grficas de contorno tridimensionales).
MATLAB contiene varias funciones que facilitan la evaluacin y anlisis de datos.
Primero presentaremos varias funciones de anlisis sencillas, y luego veremos
funciones que calculan medidas ms complejas, o mtricas, relacionadas con un
conjunto de datos.
Los siguientes grupos de funciones se utlizan con frecuencia para evaluar un
conjunto de datos recabados de un experimento.
Mximo y mnimo. Este conjunto de funciones puede servir para determinar
maximos y mnimos y sus posiciones. Tome nota de que las funciones max y
mim pueden especificar una salida o dos.
79
max(x) Determina el valor ms grande contenido en x. Si x es una
matriz, la funcin devuelve un vector de fila que contiene el
elemento mximo de cada columna.
[y, k] = max(x) Determina los valores mximos de x y los Indices
correspondientes del primer valor mximo de cada columna
de x
max(x,y) Determina una matriz con el mismo tamao que x y y. Cada
elemento de la matriz contiene el valor mximo de las
posiciones correspondientes en x y y.
mim (x) Determina el valor ms pequeo contenido en x. Si x es una
matriz, la funcin devuelve un vector de fila que contiene el
elemento mnimo de cada columna.
[y, k] = mim (x) Determina los valores mnimos de x y los Indices
correspondientes del primer valor mnimo de cada columna de
x
min(x,y) Determina una matriz con el mismo tamao que x y y. Cada
elemento de la matriz contiene el valor mnimo de las
posiciones correspondientes en x y y.
Sumas y productos. MATLAB contiene funciones para calcular las sumas y
productos de las columnas de una matriz, y funciones para calcular las sumas y
productos acumulativos dentro de las columnas de una matriz.
sum(x) Determina la suma de los elementos de x. Si x es una matriz,
esta funcin devuelve un vector de fila que contiene la suma
de cada columna.
prod (x) Determina el producto de los elementos de x. Si x es una
matriz, esta funcin devuelve un vector de fila que contiene el
producto de cada columna.
cumsum(x) Determina un vector del mismo tamao que x que contiene
sumas acumulativas de valores de x. Si x es una matriz, la
funcin devuelve una matriz del mismo tamao que x y que
contiene sumas acumulativas de valores de las columnas de x
cumprod (x) Determina un vector del mismo tamao que x que contiene
productos acumulativos de valores de x. Si x es una matriz, la
funcin devuelve una matriz del mismo tamao que x y que
contiene productos acumulativos de valores de las columnas
de x
Media y mediana. La media de un grupo de valores es el promedio. Se usa la
letra griega (mu) para representar el valor medio, cmo se muestra en la
siguiente ecuacin que usa notacin de sumatorias para definir la media:


N
k
k 1
N
k 1 2 N
k 1
x
N
donde x x x ............... x
=
=
=
= + + +

80
La mediana es el valor que est a la mitad del grupo, suponiendo que los valores
estn ordenados. Si hay un nmero impar de valores, la mediana es el valor que
est en la posicin media. Si el nmero de valores es par, la mediana es el
promedio de los dos valores que estn en medio.
Las funciones para calcular la media y la mediana son las siguientes:
mean (x) Calcula el valor medio (o promedio) de los elementos del vector x. Si
x es una matriz, esta funcin devuelve un vector de fila que contiene
el valor medio de cada columna.
median(x) Determina la mediana de los elementos del vector x. Si x es una
matriz, esta funcin devuelve un vector de fila que contiene la
mediana de cada columna. Los valores de x no tienen que estar
ordenados.
Ordenamiento de valores. MATLAB contiene una funcin para ordenar valores
en orden ascendente.
sort (x) Devuelve un vector con los valores de x en orden ascendente. Si x
es una matriz, esta funcin devuelve una matriz con cada columna
en orden ascendente.
TALLER N
Determine las matrices representadas por las siguientes referencias de funcin.
Luego use MATLAB para verificar sus respuestas. Suponga que w, x y y son las
siguientes matrices:








Dos medidas estadsticas importantes para un conjunto de datos son su varianza
y su desviacin estndar. Antes de dar las definiciones matemticas, resulta til
adquirir un entendimiento intuitivo de estos valores.
Considere los valores de los vectores data_1 y data_2 que se grafican en la figura
3.10. Si tratramos de trazar una lnea recta a travs de estos valores, la lnea
sera horizontal y estara aproximadamente en 3.0 en ambas grficas.
Por tanto, supondramos que ambos vectores tienen aproximadamente el mismo
| | | |
( ) ( )
( ) ( )
( ) ( )
( ) ( )
W 0 3 2 7 X 3 1 5 7
1 3 7
y 2 8 4
6 1 2
1. max w 2. min y
3. min x, y 4. mean y
5. median w 6. cumprod y
7. sort 2 * w x 8. sort y
= =
=

+
81
valor medio de 3.0. Sin embargo, es evidente que los datos de los dos vectores
tienen caractersticas distintivas. Los datos de data_2 varan ms respecto a la
media, o se desvan ms de la media.
As, las medidas de varianza y desviacin para los valores de data_2 sern
mayores que para los de data_1. Por tanto, entendemos intuitivamente que la
varianza (o desviacin) tiene que ver con qu tanto varan los valores respecto a
la media.
Cuanto mayor sea la varianza, ms ampliamente fluctuarn los valores respecto
al valor medio.
Matemticamente, la varianza o
2
de un conjunto de valores de datos (que
supondremos estn almacenados en un vector (x) se puede calcular usando la
siguiente ecuacin, donde o es el sImbolo griego sigma:
GRAFICA



Esta ecuacin podra parecer un tanto intimidante al principio, pero si se examina
de cerca resulta mucho ms sencilla. El trmino x
K
- p es la diferencia o
desviacin de x
K
respecto a la media.
Este valor se eleva al cuadrado para que siempre tenga un valor positivo. Luego
se suman las desviaciones al cuadrado de todos los puntos de datos.
Esta suma se divide entonces entre N-1, o sea que es aproximadamente un
promedio. (La ecuacin de Ia varianza a veces tiene N cmo denominador, pero
la forma de la ecuacin 3.12 tiene propiedades estadsticas que la hacen ms
deseable generalmente.)
Por tanto, la varianza es el promedio de las desviaciones de los datos respecto a
la media, elevadas al cuadrado.
La desviacin estndar se define cmo Ia raz cuadrada de la varianza, o


MATLAB incluye una funcin para calcular Ia desviacin estndar.
std (x) Calcula la desviacin estndar para los valores contenidos en x. Si x
es una matriz, se devuelve un vector de fila que contiene la
desviacin estndar de cada columna.
Para calcular la varianza, simplemente eleve al cuadrado la desviacin estndar.
Un histograma es un tipo especial de grfica que tiene especial importancia para
( )
N 2
K
2 K 1
x
N 1
=

o =

2
o = o
82
las mediciones estadsticas que tratamos en esta seccin porque muestra la
distribucin de un conjunto de valores.
En MATLAB, el histograma calcula el nmero de valores que caen en 10
intervalos espaciados equitativamente entre los valores mnimo y mximo del
conjunto de valores.
Por ejemplo, si graficamos los histogramas de los valores de datos de los
vectores data_1 y data_2 de la figura 3.10, obtenemos los histogramas de Ia
figura 3.11. Observe que la informacin de un histograma es diferente de Ia que
se obtiene de la media o de la varianza.
El histograma no slo nos muestra Ia gama de valores, sino tambin la forma en
que estn distribuidos. Por ejemplo, los valores de data_1 tienden a estar
distribuidos equitativamente dentro de la gama de valores. (En la seccin 3.7
veremos que estos tpos de valores se denominan valores uniformemente
distribuidos.)
Los valores de data_2 no estn distribuidos equitativamente dentro de la gama de
valores. De hecho, la mayor parte de los valores estn centrados en la media. (En
la seccin 3.7 veremos que este tpo de distribucin es una distribucin gaussiana
o normal.)
El comando MATLAB para generar y trazar un histograma es hist:
hist (x) Genera un histograma de los valores de x usando 10 intervalos.
hist (x, a) Genera un histograma de los valores de x usando a intervalos.
Los histogramas de los vectores data_1 y data_2 usando 25 intervalos se
muestran en la figura 3.12.

GRAFICA
83
Hay muchos problemas de ingeniera que requieren nmeros aleatorios para
obtener una solucin. En algunos casos, esos nmeros sirven para crear una
simulacin de un problema complejo.
La simulacin puede probarse una y otra vez para analizar los resultados, y cada
prueba representa una repeticin del experimento. Tambin usamos nmeros
aleatorios para aproximar secuencias de ruido.
Por ejemplo, la esttica que escuchamos en una radio es una secuencia de ruido.
Si estamos probando un programa que usa un archivo de datos de entrada que
representan una seal de radio, tal vez nos interese generar ruido y agregarlo a
una seal de voz o de msica a fin de obtener una seal ms realista.
Los nmeros aleatorios no se definen mediante una ecuacin; ms bien, se
caracterizan por la distribucin de valores. Por ejemplo, los nmeros aleatorios
que tienen la misma probabilidad de ser cualquier valor entre un lmite superior y
uno inferior se denominan nmeros aleatorios uniformes.
El histograma de la parte superior de la figura 3.10 muestra la distribucion de un
conjunto de valores uniformes entre 2 y 4. La funcin rand de MATLAB genera
nmeros aleatorios distribuidos uniformemente en el intervalo [0,1]. Se emplea un
valor de semilla para iniciar una Sucesin aleatoria de valores; este valor de
semilla es inicialmente 0, pero se puede cambiar con la funcin geed.
rand(n) Genera una matriz n x n que contiene nmeros aleatorios
entre 0 y 1.
rand (m, n) Genera una matriz m x n que contiene nmeros aleatorios
entre 0 y 1.
rand( seed ,n) Asigna n cmo valor de la semilla.
rand ( seed) Devuelve el valor actual de la semilla del generador de
nmeros aleatorios.
La funcin rand genera Ia misma Sucesin de valores aleatorios en cada Sesin
de trabajo Si se usa el mismo valor de semilla. Los siguientes comandos generan
y exhiben dos series de diez nmeros aleatorios uniformemente distribuidos entre
0 y 1; la diferencia entre las dos series se debe al uso de semillas distntas:
rand(seed,0)
set1 = rand(10,1);
rand(seed,123)
set2 = rand(10,1);
[set1 set2]
84
Los valores que se exhiben con estos comandos son:
0.2190 0.0878
0.0470 0.6395
0.6789 0.0986
0.6793 0.6906
0.9347 0.3415
0.3835 0.2359
0.5194 0.2641
0.8310 0.6044
0.0346 0.4181
0.0535 0.1363
Con frecuencia se requieren sucesiones aleatorias con valores dentro de
intervalos distintos del de 0 a 1. Por ejemplo, supongamos que queremos generar
valores entre -5 y 5. Primero generamos un nmero aleatorio r (que est entre 0 y
1) y luego lo multiplicamos por 10, que es Ia diferencia entre el Lmite superior y el
inferior (5 - (-5)).
Ahora le sumamos el Lmite inferior (-5) para obtener un valor que tiene la misma
probabilidad de ser cualquier valor entre -5 y 5. Por tanto, si queremos convertir
un valor r que est uniformemente distribuido entre 0 y 1 en un valor
uniformemente distribuido entre un lmite inferior a y un lmite superior b, usamos
la siguiente ecuacin:


La Sucesin data_1, graficada en la figura 3.10 de la pgina 94, se gener con
esta ecuacin:
data_i = 2*rand(1,500) + 2;
Por tanto, la Sucesin contiene 500 valores distribuidos uniformemente entre 2 y
4. La semilla de los nmeros aleatorios fue 246.
TALLER N
Escriba instrucciones MATLAB para generar 10 nmeros aleatorios en el
intervalo especificado. Verifique sus respuestas ejecutando las instrucciones e
imprimiendo los valores generados en los vectores.
1.Nmeros aleatorios uniformes entre 0 y 10.0.
2.Nmeros aleatorios uniformes entre -1 y +1.
3.Nmeros aleatorios uniformes entre -20 y -10
4.Nmeros aleatorios uniformes entre 4.5 y 5.0.
5.Nmeros aleatorios uniformes entre -t y t.
( ) x b a .r a = +
85
NMEROS ALEATORIOS GAUSSIANOS
Cuando generamos una Sucesin aleatoria con una distribucin uniforme, todos
los valores tienen Ia misma probabilidad de ocurrir. A veces necesitamos generar
nmeros aleatorios usando distribuciones en las que algunos valores tienen
mayor probabilidad de ser generados que otros.
Por ejemplo, suponga que una Sucesin aleatoria representa mediciones de
temperatura exterior tomadas durante cierto tiempo. Veriamos que las mediciones
de temperatura tienen cierta variacin, pero por lo regular no son igualmente
verosimiles.
Por ejemplo, podramos encontrar que los valores varan en unos cuantos grados,
aunque ocasionalmente pueden ocurrir cambios mayores a causa de tormentas,
nublados y cambios del da a la noche.
Las sucesiones aleatorias que tienen algunos valores con mayor probabilidad de
ocurrir que otros a menudo pueden modelarse con nmeros aleatorios gaussianos
aleatorios (tambin Ilamados nmeros aleatorios normales).
Un ejemplo de conjunto de valores con una distribucin gaussiana es el
representado por la segunda grfica de la figura 3.10. La media de esta variable
aleatoria corresponde a la coordenada x del pico de esta distribucin, que es
aproximadamente 3. A partir del histograma de la figura 3.12 podemos ver que la
mayor parte de los valores estn cerca de la media.
Mientras que una variable aleatoria uniforme tiene lmites superior e inferior
especficos, una variable aleatoria gaussiana no se define en terminos de lmites
superior e inferior: se define en terminos de la media y la varianza de los valores.
Para los nmeros aleatorios gaussianos puede demostrarse que
aproximadamente el 68% de los valores caen a menos de una desviacin Stndar
de Ia media, el 95% caen a menos de dos desviaciones Stndar de la media, y el
99% caen a menos de tres desviaciones Stndar de la media. estos datos Son
tiles cuando se trabaja con nmeros aleatorios gaussianos.
MATLAB genera valores gaussianos con una media de cero y una varianza de
1.0 si se especifica una distribucin normal. Las funciones para generar valores
gaussiarios son:
randn(n) Genera una matriz de n x n que contiene nmeros aleatorios
gaussianos (o normales) con una media de 0 y una varianza de 1.
randn (m,n) Genera una matriz de m x n que contiene nmeros aleatorios
gaussianos (o normales) con una media de 0 y una varianza de 1.
Si desea modificar valores gaussianos con una media de 0 y una varianza de 1 de
modo que tengan otra distribucin gaussiana, multplique los valores por la
desviacin estndar de la distribucin deseada y sumeles Ia media de la
distribucin deseada. As pues, si r es un nmero aleatorio con una media de 0 y
una varianza de 1.0, la siguiente ecuacin generara un nmero aleatorio con una
desviacin estndar de a y una media de b:
86

La Sucesin data_2, graficada en la figura 3.10, se gener con esta ecuacin:
data 2 = randn(1,500) + 3;
Asi, la Sucesin contiene 500 valores aleatorios gaussianos con una desviacin
estndar de 1 y una media de 3. La semilla para nmeros aleatorios que se us
fue 95.
TALLER N
Use MATLAB para generar 1000 valores con las caractersticas especificadas.
Calcule Ia media y la varianza de los 1000 valores, y comprelas con los valores
especificados. Prepare tambin el histograma de los valores usando 25 intervalos.
1. Nmeros aleatorios gaussianos con una media de 1.0 y una varianza de
0.5.
2. Nmeros aleatorios gaussianos con una media de -5.5 y una desviacin
estndar de 0.25.
3. Nmeros aleatorios gaussianos con una media de -5.5 y una desviacin
estndar de 1.25.
MATLAB incluye varias funciones que manipulan el contenido de una matriz.
Describiremos cada una de estas funciones y daremos un ejemplo para
ilustrarias.
Se puede girar una matriz en direccin contraria a las manecillas del reloj usando
la funcin rot90
rot90 (A) Gira la matriz A 90 en direccin contraria a las manecillas del reloj.
rot90 (A, n) Gira la matriz A n 90 en direccin contraria a las manecillas del
reloj.
Sea A la matriz siguiente:




Si ejecutamos los comandos:
B rot90(A);
C = rot90(A,2);
los valores de B y c sern:
x a.r b = +
2 1 0
A 2 5 1
3 4 6
(
(
=
(
(

87




Hay dos funciones para invertr una matriz:
flipir (A) Invierte la matriz A de izquierda a derecha.
flipud (A) Invierte la matriz A de arriba hacia abajo.
Por ejemplo, considere los siguientes comandos MATLAB:
A = [1,2; 4,8; -2,0];
B = fliplr(A);
C = fiipud(B);
Despus de ejecutarse estos comandos, las matrices A, B y c contienen los
siguientes valores:





La funcin reshape nos permite reconfigurar una matriz de modo que tenga un
nmero diferente de filas y columnas:
reshape(A,m,n) Reconfigura la matriz A de modo que tenga m filas y n
columnas.
El nmero de elementos de Ia matriz original y de la matriz reconfigurada debe
ser el mismo; si no, aparecer un mensaje de error. Los nmeros se seleccionan
en orden de columna de la matriz vieja y se usan para llenar Ia nueva matriz.
Considere las siguientes instrucciones MATLAB:
A=[2 5 6 -1;3 -2 10 0];
B reshape(A,4,2);
C = reshape(A,8,1);
Despus de ejecutarse estas instrucciones, los valores de las matrices A, B y C
son los siguientes:

0 1 6 6 4 3
A 1 5 4 c 1 5 2
2 2 3 0 1 2

( (
( (
= =
( (
( (

1 2 2 1 0 2
A 4 8 B 8 4 C 8 4
2 0 0 2 2 1

( ( (
( ( (
= = =
( ( (
( ( (

88






Las funciones diag, triu y tril nos permiten extraer elementos de una matriz. La
definicin de estas tres funciones se basa en la definicin de diagonal principal,
que es la diagonal que parte de la esquina superior izquierda de la matriz y
contiene los valores con subindices de fila y de columna iguales, cmo a
11
, a
22
y
a
33
.
Aun las matrices no cuadradas tienen una diagonal principal. Por ejemplo, en la
matriz A de la subseccin anterior los elementos de la diagonal principal son 2, -2;
los elementos de Ia diagonal principal de B son 2, 10; y el elemento de la diagonal
principal de C es 2.
Tambien podemos definir otras diagonales adems de la principal. Por ejemplo,
podemos definir una k-sima diagonal. Si k es 0, la k-sima diagonal es la
diagonal principal. Si k es positivo, la k-sima diagonal es una diagonal paralela a
la diagonal principal y situada ms arriba. Si k = 1, la k-sima diagonal es el
conjunto de elementos que estn inmediatamente arriba de los de la diagonal
principal.
Para k =2, la k-sima diagonal es el conjunto de elementos de la segunda
diagonal arriba de Ia diagonal principal. Si k es menor que 0, la k-sima diagonal
es el conjunto de elementos de una diagonal situada debajo de la diagonal
principal. As, para k -1, la k-sima diagonal es la primera diagonal abajo de la
diagonal principal.
La funcin dag sirve para extraer valores de diagonales de una matriz:
dag (A) Extrae los elementos de la diagonal principal y los almacena en
un vector de columna Si A es una matriz. Si A es un vector, la funcin generar
una matriz cuadrada con A cmo su diagonal.
dag (A, k) Extrae los elementos de la k-sima diagonal de A y los
almacena en un vector de columna.
Por ejemplo, las siguientes instrucciones:
P = [1 2 3; 2 4 6;-1 2 0];
A=diag(P,1);
Genera un vector com los siguientes elementos:
2
3
2 6 5
2 5 6 1 3 10 2
A B C
3 2 10 0 5 1 6
2 0 10
1
0
(
(
(
(
(
(
(
(
(
(
= = =
(
(
(

(
(

(
(

(
(

89




La funcin triu genera una nueva matriz que se conoce como matriz triangular
superior:
triu(A) Genera una matriz cuadrada de valores a partir de A,
con ceros por debajo de la diagonal principal.
triu(A,k) Generan una matriz cuadrada de valores a partir de
A con ceros a partir de la k-enesima diagonal.
Considere las instrucciones:
A = [1:2:7; 3:3:12; 4:-1:1; 1:4];
B = triu (A);
C = triu (A,-1),
D = triu (A,3);








La funcin tril es similar a la funcin triu, slo que genera matrices triangulares
inferiores:
tril (A) Genera una matriz cuadrada de valores a partir de A, con ceros arriba de la
diagonal principal.
tril (A, k) Genera una matriz cuadrada de valores a partir de A, con ceros
arriba de la k-sima diagonal.
Si susttuimos las referencias a triu en el ejemplo anterior por referencias a tril,
tenemos:
A = [1:2:7; 3:3:12; 4:-1:1; 1:4];
B = triu (A);
C = triu (A,-1),
D = triu (A,3);
1 2 3
2
P 2 4 6 A
6
1 2 0
(
(
(
= =
(
(

(

1 3 5 7 1 3 5 7
3 6 9 12 0 6 9 12
A B
4 3 2 1 0 0 2 1
1 2 3 4 0 0 0 4
1 3 5 7 0 0 0 7
3 6 9 12 0 0 0 0
C D
0 3 2 1 0 0 0 0
0 0 3 4 0 0 0 0
( (
( (
( (
= =
( (
( (

( (
( (
( (
= =
( (
( (

90








TALLER N
Determine las matrices generadas por las siguientes referencias de funcin.
Luego verifique sus respuestas usando MATLAB.
Suponga que A y B son las siguientes matrices:




1. rot90(B) 2 rot90(A,3)
3. fliplr(A) 4. flipud(fiipir(B))
5. reshape(A,4,3) 6.reshape(A,6,2)
7. reshape(A,2,6) 8 reshape(flipud(B),8,2)
9. triu(B) 10.triu(B,-1)
11. tril(A,2) 12.dag(rot90(B))
1 3 5 7 1 0 0 0
3 6 9 12 3 6 0 0
A B
4 3 2 1 4 3 2 0
1 2 3 4 1 2 3 4
0 0 0 0 1 3 5 0
3 0 0 0 3 6 9 12
C D
4 3 0 0 4 3 2 1
1 2 3 0 1 2 3 4
( (
( (
( (
= =
( (
( (

( (
( (
( (
= =
( (
( (

1 3 5 0
0 1 0 3
3 6 9 12
A 4 3 5 0 B
4 3 2 1
1 2 3 0
1 2 3 4
(
(
(
(
(
= =
(
(
(
(

91
Este acapite pretende servir de gua para dar los primeros pasos en la
programacin. Para aprender, el lenguaje que se emplee es -hasta cierto punto-
irrelevante: lo ms importante son los conceptos. Una vez conocido un lenguaje,
pasar a otro no suele resultar difcil. Como Matlab es un lenguaje simple, resulta
idneo para los comienzos.
Un programa consiste en una serie de instrucciones que se ejecutan
secuencialmente (una detrs de otra). Por lo tanto, es requisito previo conocer
esas instrucciones, y cmo escribirlas correctamente (sintaxis).
La elaboracin de un programa para Matlab es muy sencilla. Basta abrir un
documento de texto (se puede hacer con cualquier editor, Matlab trae uno
incorporado), escribir las instrucciones tal como se pondran en la ventana de
comandos y guardar el documento con la extensin .m (por ejemplo: miprog.m).
Matlab reconoce automticamente los ficheros que tienen extensin .m: si en la
ventana de comandos se introduce
miprog
las rdenes almacenadas en el fichero miprog.m se ejecutarn, una tras otra. A
ese recorrido a travs de las instrucciones se le conoce con el nombre de flujo.
Los comandos de un programa se denominan tambin sentencias.
El hecho de guardar una serie de instrucciones (el cdigo) en un fichero tiene de
por s algunas ventajas: evita el repetir las rdenes en la ventana de comandos.
Pero la potencia de un programa se pone de manifiesto si en l se contienen
instrucciones que controlan qu sentencias se ejecutan en cada circunstancia.
As, un programa puede "decidir", llegado a un punto, ejecutar unos comandos u
otros en funcin del valor que tome una variable, por poner un caso.
Antes de ponerse a escribir el programa, sobre todo si es un poco largo o
complejo, es til trazar un esquema, en lenguaje corriente, de lo que se quiere
hacer. A eso se le denomina un diagrama de flujo. Si lo que se pretende est
claro, escribir el programa se reduce a traducir el diagrama de flujo del castellano
al lenguaje de Matlab.
92
Veamos un caso simple. Construyamos el diagrama de flujo de un programa que
escoja un nmero al azar del 0 al 9 y nos pida que lo adivinemos. Una vez
escogido el nmero, el programa debe informar si hemos acertado o no. El
diagrama de flujo correspondiente es














Diagrama de flujo.

En un diagrama de flujo ha de buscarse la claridad, la concisin, el rigor. Con un
buen diagrama de flujo, gran parte del trabajo est hecho. Puede ser tentador
comenzar a escribir directamente el programa en el editor, con la esperanza de
hacerlo todo bien a la primera.
Suele ser ms eficaz, sin embargo, escribir antes el diagrama de flujo, para luego
intentar pasarlo al lenguaje informtico elegido.
Para implementar el control del flujo, son muy tiles unas expresiones que
permiten comparar dos variables entre s o una variable con un valor fijo.
En un programa, a veces es necesario preguntarse:
es x mayor que y?
Pues si x es mayor que y, entonces ...,
93
y si no, ... ;
o bien:
caso de que la variable x sea menor que cero, hacer tal cosa.
OPERADORES RELACIONALES Y LGICOS
MATLAB cuenta con seis operadores relacionales para comparar dos matrices
de igual tamao, cmo se muestra en la tabla 3.2. Se usan matrices o
expresiones de matrices en ambos lados de un operador relacional para dar otra
matriz del mismo tamao.
Cada entrada de la matriz resultante contiene un 1 si la comparacin es
verdadera cuando se aplica a los valores de las posiciones correspondientes de
las matrices; de lo contrario, la entrada de la matriz resultante contiene un 0.
Una expresin que contiene un operador relacional es una expresin lgica
porque el resultado es una matriz que contiene ceros y unos que pueden
interpretarse cmo valores falsos y valores verdaderos, respectvamente; la matriz
resultante tambin se denomina matriz 0-1.
Considere la expresin lgica a<b. Si a y b son escalares, el valor de esta
expresin es 1 (verdadero) si a es menor que b; de lo contrario, la expresin es 0
(falso). Sean a y b vectores con los siguientes valores


Entonces, el valor de a<b es el vector [1 1 0], en tanto que el valor de a~=b es [1
1 1].

OPERADORES RELACIONALES
OPERADOR RELACIONAL INTERPRETACIN
< Menor que
<= Menor o igual que
> Mayor que
>= Mayor o igual que
== Igual
~= No igual
Una condicin, como se ha indicado, slo admite dos respuestas: verdadero o
falso.
| | | | a 2 4 6 b 3 5 1 = =
94
As, a la pregunta es x mayor o igual que y?, que en el lenguaje de Matlab se
expresa x>=y, slo caben dos respuestas posibles: s, es cierto, x es mayor o igual
que y; o bien, no, es falso, x no es mayor o igual que y.
Dos observaciones. La primera: el operador relacional igual que se construye
con dos smbolos ==.
El motivo es el siguiente: si se escribe x=3, el resultado es que se le asigna a x el
valor 3. No se hace ninguna pregunta. Si lo que se desea es preguntar es x igual
a 3?, no se puede escribir x=3, pues en este caso x tomara el valor 3,
independientemente de lo que valiera antes.
En cambio, x==3 es el anlogo en lenguaje informtico a la pregunta: es x igual
a 3?. Tras la pregunta x==3 la variable x sigue valiendo lo mismo que antes .
La segunda observacin es una pequea astucia: la tilde ~ del operador
diferente que se consigue apretando la tecla Alt y -sin soltarla- escribiendo con el
teclado el nmero 126. En algunos sistemas operativos, tambin sirve apretar
AltGr y, sin soltarla, apretar la tecla 4.
Las condiciones se pueden agrupar en construcciones lgicas: condicin1 Y
condicin2, condicin1 condicin2, etctera. Consltese el manual de Matlab
en lo relativo a este tpico.
En resumen: con las expresiones relacionales se pueden realizar preguntas de
respuesta unvoca (verdadero o falso), que permitan luego tomar una decisin.
La jerarqua, del nivel ms alto al ms bajo, es ~, & y I. . Desde luego, se pueden
usar parntesis para alterar la jerarqua. En el ejemplo anterior, se evalan
primero las expresiones b==c y b==5.5.
Suponga que b contiene el valor 3 y c contiene el valor 5; entonces, ninguna de
las expresiones es verdadera, y la expresin b==c I b=-5.5 es falsa. A
continuacin aplicamos el operador , ~ que cambia el valor de la expresin a
verdadero. Suponga que no hubiramos puesto los parntesis alrededor de la
expresin lgica, cmo en:


En este caso, Ia expresin ~b==c se evaluara junto con b==5.5. Para los valores
que hemos dado a b y c, el valor de ambas expresiones relacionales es falso; por
tanto, el valor de toda la expresin lgica es falso. Usted tal vez se pregunte cmo
podemos evaluar ~b Si b es un nmero.
En MATLAB, cualquier valor distinto de cero se considera verdadero; los valores
de cero son falsos. Por tanto, debemos tener mucho cuidado al usar los
operadores relacionales y lgicos, asegurndonos de que los pasos que se
ejecuten sean los que queremos que se ejecuten.
Tambin podemos combinar dos expresiones lgicas usando los operadores
lgicos no (not), y (and) y o (or). Estos operadores lgicos se representan con
los smbolos que se muestran en Ia tabla 3.3.
b c | b 5.5 ~ == ==
95
Si dos expresiones lgicas se unen con I. las entradas de la matriz 0-1 resultante
son 1 (verdadero) si cualquiera de esas expresiones es verdadera, o si ambas lo
son; es 0 (falso) slo si ambas expresiones son falsas.
Si dos expresiones lgicas se unen con &, Ia expresin completa es verdadera
slo si ambas expresiones son verdaderas. La tabla 3.4 lista todas las posibles
combinaciones para los operadores lgicos con dos expresiones Igicas.
Los operadores lgicos se usan con expresiones lgicas completas. Por ejemplo,
a>b & b>c es una expresin Igica vlida, pero a>b & c no es una expresin
equivalente.
Las expresiones lgicas tambin pueden ir precedidas por el operador lgico no
(not). Este operador cambia el valor de la expresin al valor opuesto; por tanto, si
a>b es verdadero, ~ (a>b) es falso.
Una expresin lgica puede contener varios operadores lgicos, cmo en:


Combinaciones de operadores Iogicos
A B ~A A|B A&B
falso falso verdadero falso falso
falso verdadero verdadero verdadero falso
verdadero falso falso verdadero falso
verdadero verdadero falso verdadero verdadero
TALLER N
Determine si las siguientes expresiones de los problemas 1 al 8 son verdaderas o
falsas. Luego verifique sus respuestas usando MATLAB. Recuerde que para
verificar su respuesta lo nico que necesita hacer es teclear la expresin para que
se exhiba el valor representado. Suponga que las siguientes variables tienen los
valores indicados:





( ) b c | b 5.5 ~ == ==
( )
( )
a 5.5 b 1.5 k 3
1. a 10.0 2. a b 6.5
3. k 0 4. b k a
5. a 3 * b 6. k k 6
7. a 10 a 5 8. abs k 3 | k b a
= = =
< + >=
~= >
~ == <= +
< & > > <
96
El resultado de una condicin permite tomar una decisin, es decir, si la condicin
es verdadera se ejecutan determinadas sentencias. El diagrama de flujo se
ramifica:










Ramificacin if

La ramificacin ms simple, expresada en este diagrama de flujo, se obtiene con
la siguente sintaxis:
if (condicin)
sentencias
end
(lo que va en negritas, hay que sustituirlo por las expresiones adecuadas; if y end
son palabras clave del lenguaje informtico, y no se pueden utilizar para otra
cosa, p. ej. una variable no puede -no debera- llamarse if).
Un caso concreto:
if(length(sitios)>1)
recta=polyfit(x,y,1);
end
Ledo en lenguaje corriente: si la longitud del vector sitios es mayor que 1, se
realiza el ajuste lineal indicado en la instruccin recta=polyfit(x,y,1).
Caso contrario (si la longitud del vector sitios es menor o igual a 1) esa instruccin
no se ejecuta (y el programa sigue en la instruccin que venga despus de end).
97
Existe la posibilidad de ejecutar ciertas sentencias si la condicin es verdadera, y
otras diferentes si la condicin es falsa:
if (condicin)
sentencias A
else
sentencias B
end
dicho de otra manera: si la condicin se cumple, se ejecutan las sentencias A; si
no, se ejecutan las sentencias B.










Diagrama de flujo de una ramificacin if / else

Una vez se hayan ejecutado las sentencias que correspondan (las sentencias A
si la condicin es verdadera, las sentencias B en caso contrario) el programa
contina con las instrucciones que vengan despus de end.
Es de sealar que las ramificaciones se pueden anidar (una condicin dentro de
otra: dentro de las sentencias A o de las sentencias B en el anterior diagrama
de flujo). El cdigo se vuelve ms complejo. Tambin se pueden construir
ramificaciones con varias posibilidades: la sintaxis hace uso de las palabras clave
if / elseif / elseif / ... / else / end.
INSTRUCCION if SENCILLA
He aqu un ejemplo de la instruccin if:
if g < 50
count = count + 1;
disp(g);
end
98
Suponga que g es un escalar. Si g es menor que 50, count se incrementa en 1 y
se exhibe g en la pantalla; si no, se psan por alto estas dos instrucciones. Si g
no es un escalar, count se incrementar en 1 y slo se exhibir g en la pantalla si
todos los elementos de g son menores que 50.
La forma general de la instruccin if sencilla es la siguiente:
if expresin lgica
instrucciones
end
Si la expresin lgica es verdadera, ejecutamos las instrucciones que estn entre
la instruccin if y Ia instruccin end. Si la expresin lgica es falsa, saltamos de
inmediato a la instruccin que sigue a Ia instruccin end.
Es importante sangrar las instrucciones dentro de una
estructura <<if>> para que sea ms fcil entender.
Puesto que las expresiones lgicas se generan a partir de operadores
relacionales y operadores lgicos, a continuacin veremos estos nuevos
operadores.
INSTRUCCIONES if ANIDADAS
He aqu un ejemplo de instrucciones if anidadas que extiende el ejemplo anterior:






Una vez ms, supondremos primero que g y b son escalares. Entonces, Si g<50,
incrementamos count en 1 y exhibimos g. Adems, Si b>g, asignamos 0 a b. si g
no es menor que 50, pasamos de inmediato a la instruccin que sigue a la
segunda instruccin end. Si g no es un escalar, la condicin g<50 slo ser
verdadera si todos los elementos de g son menores que 50. Si ni g ni b son
escalares, b ser mayor que g slo si cada uno de los pares de elementos
correspondientes de g y b son valores tales que el de b es mayor que el de g. Si
g o b es un escalar, la otra matriz se comparar con el escalar elemento por
elemento.
CLUSULAS else Y elseif
La clusula else nos permite ejecutar una serie de instrucciones si una expresin
lgica es verdadera y una serie diferente Si Ia expresin es falsa. Para ilustrar
esta instruccin, supongamos que tenemos una variable interval. Si el valor de
interval es menor que 1, queremos asignar el valor interval / 10 a x_increment
en caso contrario, queremos asignar 0.1 a x_increment. La siguiente instruccin
if g 50
count count 1;
disp(g);
if b g
b 0
end
end
<
= +
>
=
99
ejecuta estos pasos:




Si anidamos varios niveles de instrucciones if-else, puede ser difcil determinar
cules expresiones lgicas deben ser verdaderas (o falsas) para ejecutar cada
serie de instrucciones. En estos casos es comn utilizar Ia clusula elseif para
aclarar Ia lgica del programa, cmo se ilustra con las siguientes instrucciones:







En este ejemplo, las temperaturas entre 90 y 100 estn en el intervalo operativo
normal; las temperaturas fuera de este intervalo generan un mensaje apropiado.
TALLER N
En los problemas 1 al 4, escriba instruccciones MATLAB que realicen los pasos
indicados. Suponga que las variables son escalares.
1. Si la diferencia entre volt_1 y volt_2 es mayor que 10.0, exhibir los valores
de volt_1 y volt_2.
2. Si el logaritmo natural de x es mayor o igual que 3, asignar 0 a time e
incrementar count en 1.
3. Si dist es menor que 50.0 y time es mayor que 10.0, incrementar time en
2; en caso contrario, incrementar time en 2.5.
4. Si dist es mayor o igual que 100.0, incrementar time en 2.0. Si dist est
entre 50 y 100, incrementar time en 1. En los dems casos, incrementar time en
0.5.
FUNCIONES LGICAS
MATLAB contiene una serie de funciones lgicas que son muy tiles. A
continuacin describimos estas funciones.
any(x) Devuelve un escalar que es 1 (verdadero) si cualquier elemento del
vector x es distinto de cero; en caso contrario, el escalar es 0 (falso). Si x es una
matriz, esta funcin devuelve un vector de fila; un elemento de este vector de fila
contiene un 1 (verdadero) si cualquier elemento de la columna correspondiente de
if int erval 1
x _increment int erval / 10;
else
x _increment 0.1;
end
<
=
=
( )
( )
( )
if temperatura 100
disp 'Demasiado caliente falla de equipo.'
elseif temperatura 90
disp ' Intervalo Operativo Normal.'
elseif temperatura 50
disp ' Temperatura por debajo del int ervalo operativo deseado.'
else
disp 'Demasiado f
>

>
>
( ) rio apagar equipo'
end

100
x es distinto de cero, y un 0 (falso) en caso contrario.
all (x) Devuelve un escalar que es 1 (verdadero) Si todos los elementos del vector
x son distintos de cero; en caso contrario, el escalar es 0 (falso). Si x es una
matriz, esta funcin devuelve un vector de fila; un elemento de este vector de fila
contiene un 1 (verdadero) si todos los elementos de la columna correspondiente
de x son distintos de cero, y un 0 (falso) en caso contrario.
find (x) Devuelve un vector que contiene los Indices de los elementos
distintos de cero de un vector x. Si x es una matriz, entonces los Indices se
seleccionan de x (:), que es un vector de una sola columna formado a partir de las
columnas de x.
isnan (x) Devuelve una matriz con unos donde los elementos de x son NaN y
ceros donde no lo son.
finite (x) Devuelve una matriz con unos donde los elementos de x son finitos
y ceros donde son infinitos o NaN.
isempty(x) Devuelve 1 Si x es una matriz vaca y 0 en caso contrario.
Suponga que A es una matriz con tres filas y tres columnas de valores. Considere
Ia siguiente instruccin
if all(A)
disp(A no contiene ceros)
end
La cadena A no contiene ceros slo se exhibe si los nueve valores de A son
distintos de cero.
Ahora presentamos otro ejemplo que usa una funcin lgica. Suponga que
tenemos un vector que contiene un grupo de valores que representan las
distancias de un carro de cable a la torre ms cercana. Queremos generar un
vector que contenga las velocidades del carro a esas distancias. Si el carro est a
30 pies o menos de la torre, usamos esta ecuacin para calcular la velocidad:
velocidad = 0.425 + 0.00175d
2

Si el carro est a ms de 30 pies de la torre, usamos la siguiente ecuacin:
velocidad = 0.625 + 0.12d - 0.00025d
2

Podemos usar la funcin find para encontrar los valores de distancia mayores
que 30 pies y los de 30 pies o menos. Puesto que la funcin find identfica los
subindices para cada grupo de valores, podemos calcular las velocidades
correspondientes con estas instrucciones
inferior = find(d < 30);
velocidad(inferior) = 0.425 + 0.00175*d(inferior).^
2
;
superior = find(d >= 30);
velocidad(superior) = 0.625 + 0.12*d(superior)
101
- 0.00025*d(superior) ^2;
Si todos los valores de d son menores que 30, el vector superior estar vaco, y
Ia referencia a d(superior) y velocidad(superior) no har que cambie ningn
valor.
TALLER N
Determine el valor de las siguientes expresiones. Luego verifique sus respuestas
introduciendo las expresiones. Suponga que la matriz b tiene los valores
indicados:






3.4 Otra posibilidad de ramificacin mltiple la ofrece la construccin
switch. La sintaxis es:
switch variable
case valor1,
sentencias A
case valor2,
sentencias B
case ...
...
end
(Como antes, lo escrito en negritas debe sustituirse por las expresiones
adecuadas). Las palabras clave son switch, case, end.
La ramificacin switch opera de la siguiente manera. Al llegar a la expresin
switch variable, si variable tiene el valor valor1 se ejecutan las sentencias A; si
variable toma el valor valor2, las sentencias B; y as sucesivamente. Es
importante notar que la variable slo debe tomar unos pocos valores: valor1,
valor2, etc. para que el programa se ramifique en unas pocas ramas. No tiene
sentido intentar una ramificacin switch con una variable que pueda tomar un
nmero infinito de valores.
( ) ( )
( ) ( ) ( ) ( )
( ) ( ) ( ) ( )
1 0 4
b 0 0 3
8 7 0
1. any b 2. find b
3. all any b 4. any all b
5. finite b :,3 6.any b 1: 2,1: 3
(
(
=
(
(

102
Hay ocasiones en las que es necesario repetir el mismo conjunto de instrucciones
muchas veces, cambiando algunos detalles. Pongamos un caso. Sea un vector
x(i) con n componentes; se quiere construir la "media mvil" de x con tres
elementos, que consiste en ir tomando la media aritmtica de cada tres puntos
consecutivos. Es decir: desde i=2 hasta n-1,
media(i-1)=(x(i)+x(i-1)+x(i+1))/3.
(Detalles: se empieza a contar en i=2 porque para el primer elemento de x no
existe el elemento anterior; y se acaba en n-1 por anloga razn; adems, el
primer componente de media es el correspondiente a i=2, de ah que se asigne el
resultado a media(i-1)).
Eso es lo que se consigue con un bucle for, cuya sintaxis es:
for contador=inicio:paso:fin,
sentencias
end
Las palabras claves son for y end. Este bucle pone en marcha una variable
llamada contador que va desde inicio hasta fin de paso en paso. Cada vez que
las sentencias se ejecutan, contador aumenta en un valor paso (que si se omite,
se le asigna automticamente el valor 1). Cuando contador llega al valor fin, el
bucle se acaba y el programa contina con las sentencias que haya ms all de
end.











Diagrama de flujo de un bucle for
103
Obsrvese que un bucle como el indicado se implementa un nmero fijo de veces:
desde inicio hasta fin de paso en paso. En ocasiones, sin embargo, no se sabe de
antemano cuntas veces habr que ejecutar las sentencias del bucle.
En un ejemplo de una seccin anterior usamos la funcin find para encontrar los
valores de distancia mayores que 30 pies y de 30 pies o menos. Luego
calculamos las velocidades correspondientes usando las ecuaciones apropiadas,
cmo repetimos aqu:
inferior find (d < 30);
velocidad(inferior) = 0.425 + 0.00175 * d (inferior).^2;
superior = find(d>=30);
velocidad(superior )= 0.625 + 0.12 * d (superior)
-0.00025*d(superior).^2;
Otra forma de realizar estos pasos usa un ciclo for. En las siguientes
instrucciones, se asigna el valor 1 a k y se ejecutan las instrucciones contenidas
en el ciclo. El valor de k se incrementa a 2 y se ejecutan otra vez las instrucciones
del ciclo. Esto continua hasta que el valor de k es mayor que la longitud del vector
d.
for k = 1:lenght(d)
if d(k) < 30
velocidad (k) = 0.425 - 0.00175 * d(k).^2;
else
velocidad(k )= 0.625 + 0.12 * d(k)
- 0.00025 * d(k) ^2;
end
end
Aunque estas instrucciones realizan las mismas operaciones que los pasos
anteriores empleando la funcin find, Ia solucin sin ciclo se ejecuta con mucha
mayor rapidez.
Un ciclo for tiene la siguiente estructura general:
for Indice = expresin
instrucciones
end
La expresin es una matriz(que podra ser un escalar o un vector) y las
instrucciones se repiten tantas veces cmo columnas hay en Ia matriz de Ia
expresin. Cada vez que se repite el ciclo, el Indice tiene el valor de uno de los
104
elementos de la matriz de la expresin. Las reglas para escribir y usar un ciclo for
son las siguientes
1. El Indice de un ciclo for debe ser una variable.
2. Si Ia matriz de la expresin es la matriz vaca, no se ejecutar el ciclo. El control
pasar a la instruccin que sigue a la instruccin end.
3. Si Ia matriz de la expresin es un escalar, el ciclo se ejecutar una vez, y el
Indice contendr el valor del escalar.
4. Si Ia matriz de Ia expresin es un vector de fila, en cada repeticin del ciclo
el Indice contendr el siguiente valor del vector.
5. Si Ia matriz de la expresin es una matriz, en cada repeticin del ciclo el
Indice contendr Ia siguiente columna de Ia matriz.
6. Al completarse un ciclo for, el indice contendr el ltimo valor utilizado.
7. Se puede usar el operador de dos puntos para definir la matriz de la
expresion usando el siguiente formato:
for k = inicial.: incremento : limite
TALLER N
Determine el nmero de veces que se ejecutaran los ciclos for definidos por las
siguientes instrucciones. Para verificar su respuesta, utlice la funcion length, que
devuelve el nmero de valores contenidos en un vector. Por ejemplo, el nmero
de veces que se ejecuta el ciclo for del problema 1 es length (3:20)
1. for k = 3:20
2. for count = -2:14
3. for k = -2:-1:-10
4. for time = 10:-1:0
5. for time = 10:5
6. for index =2:3:12
Por ejemplo: si es necesario repetir una serie de sentencias hasta que se cumpla
una determinada condicin, y no se sabe a priori cuntas veces ser necesario
realizar esas operaciones. En ese caso se emplea un bucle while:
while(condicin),
sentencias
end
Este bucle ejecuta las sentencias mientras la condicin sea verdadera.
Diagrama de flujo de un bucle while
105












Es posible sustituir la condicin por una variable. En efecto: una variable que toma
el valor cero corresponde a una condicin falsa. Si la variable toma un valor
diferente de cero, es equivalente a una condicin verdadera. As, se puede
escribir
x=10;
while(x)
sentencias
x=x-1;
end
Para x=10, la "condicin" es verdadera puesto que x es diferente de cero. Ntese
que el contador x hay que modificarlo manualmente (lnea x=x-1) puesto que, al
revs que lo que ocurre con el bucle for, este no gestiona ningn contador. En
cuanto x tome el valor cero, la "condicin" es falsa y el bucle acaba.
Atencin: es fcil caer en bucles infinitos. En el ejemplo anterior, si falta la lnea
x=x-1 y las sentencias no modifican el valor de x, la "condicin" siempre ser
cierta (pues x=10) y el programa nunca saldr del bucle: ejecutar una y otra vez
las sentencias. El programa se "cuelga", y hay que interrumpirlo desde el teclado
apretando las teclas Ctrl+C.
El ciclo while es una estructura para repetr una serie de instrucciones en tanto se
cumple una condicion especificada. El formato general de esta estructura de
control es:
while expresin
instrucciones
end
Si Ia expresion es verdadera, se ejecutan las instrucciones, despus de lo cual se
106
vuelve a probar Ia condicin. Si Ia condicin se sigue cumpliendo, se ejecuta otra
vez Ia serie de instrucciones.si Ia condicin es falsa, el control pasa a Ia
instruccin que sigue a la instruccin end. Las variables modificadas dentro del
ciclo deben incluir las variables de Ia expresion, pues de lo contrario el valor de la
expresin nunca cambiara. Si la expresin siempre es verdadera (o es un valor
distinto de cero), el ciclo se convierte en un ciclo infinito.
Los ciclos son estructuras necesarias en la mayor parte de los lenguajes de alto
nivel; no obstante, generalmente puede aprovecharse la potencia de las
operaciones elemento por elemento con matrices para evitar el uso de ciclos en
los programas MATLAB.

Antes de usar un ciclo en un programa MATLAB, examine con detenimiento
formas alternativas de realizar los calculos deseados sin ciclos; esto
permitir a su programa ejecutarse con mayor rapidez y, en general, har
que su programa sea mas legible porque es ms corto.


107
Empecemos diciendo que, en general, para realizar una tarea particular se
pueden emplear muchos programas diferentes que den el resultado correcto.
Cul es el ms eficiente? No es una pregunta trivial!
Hay que ir probando para mejorar la velocidad. Con la prctica -y el estudio- se
descubren las maneras ms rpidas de implementar las instrucciones entre todas
las posibles.
La confeccin de programas se vuelve frecuentemente una tarea rutinaria donde
el orden facilita las cosas. Repasar un programa una y otra vez, modificando poco
a poco el cdigo para depurarlo, exige una cierta disciplina. Aunque cada uno
tenga sus preferencias, es conveniente desarrollar algunos hbitos. Me atrevo a
recomendar algunos:
El programa debe resultar de fcil lectura. As, pasado el tiempo, es
ms sencillo revisarlo. Los nombres de las variables, en la medida de lo
posible, deben ser autoexplicativos. La siguiente porcin de cdigo,
escrita de dos maneras equivalentes, lo muestra. Por qu llamar x o N a
una variable? Los nombres abstractos restan claridad al programa.

N=10;
x=rand(1,N);
y=zeros(1,N);
for i=1:N,
y(i)=sum(x(1:i));
end
num_pts=10;
prob=rand(1,num_pts);
prob_acum=zeros(1,num_pts);
for indice=1:num_pts,

prob_acum(indice)=sum(prob(1:indice));
end
Ambos cdigos son equivalentes y se ejecutarn igual de rpido (los
nombres largos de las variables no influyen en la velocidad de ejecucin).
Introducir comentarios en el programa. Los comentarios son lneas que
no se ejecutan, en las que se escriben aclaraciones explicativas. Para
que una lnea no se ejecute, basta escribir al principio de ella el smbolo
%. As:
%escala: 102 pixels = 8 mm
d_m=8/102;
Un programa con comentarios es ms fcil de entender.
108
Suele ser bueno definir las variables al principio. Ello evita tener que
buscarlas a lo largo del cdigo para cambiar su valor cuando sea
necesario.
Adems, si es posible, es mejor definir los vectores y matrices al
principio con su dimensin adecuada. En el caso de que haya que ir
rellenando los valores de un vector, el programa va ms rpido si se
define el vector vaco al principio (con el comando ones o zeros) que ir
aadiendo componentes al vector conforme se van calculando.
Para ver dnde empiezan y dnde acaban los bucles y ramificaciones,
es costumbre indentar (introducir una sangra) en las lneas contenidas
en ellos. Eso resulta de especial ayuda en los bucles y condiciones
anidados.
A. Ejercicios
Escribir un programa que tome un nmero entero al azar entre el 0 y el 9,
pregunte un nmero al usuario y le informe si acert o no.
Escribir un programa que tome un nmero entero al azar entre el 0 y el 9,
y le pregunte un nmero al usuario hasta que acierte.
Escribir una funcin que devuelva el valor absoluto del argumento. (Nota.-
Ya existe en Matlab: abs(x)).
Escribir una funcin que devuelva el radio (distancia al origen), recibiendo
como argumento las coordenadas cartesianas (x,y).
Escribir un programa que, tras pedir al usuario un nmero, le informe de si
es par, impar o no entero.
Escribir un programa que calcule las N primeras fracciones del tipo 1/i,
tras pedir N al usuario.
Escribir un programa que calcule los cuadrados de los nmeros enteros,
hasta que el cuadrado sea mayor o igual que 100.
B. Proyectos
Realizar una criba de nmeros primos, esto es, elaborar un programa que
calcule en el menor tiempo posible la mayor cantidad de nmeros primos
consecutivos partiendo de los ms pequeos.
Los ficheros con extensin (.m) son ficheros de texto sin formato (ficheros ASCII)
109
que constituyen el centro de la programacin en MATLAB. Ya se han utilizado en
varias ocasiones.
Estos ficheros se crean y modifican con un editor de textos cualquiera. En el caso
de MATLAB 6.5 ejecutado en un PC bajo Windows, lo mejor es utilizar su propio
editor de textos, que es tambin Debugger.
Existen dos tipos de ficheros *.m, los ficheros de comandos (llamados scripts
en ingls) y las funciones.
Los primeros contienen simplemente un conjunto de comandos que se ejecutan
sucesivamente cuando se teclea el nombre del fichero en la lnea de comandos
de MATLAB o se incluye dicho nombre en otro fichero *.m.
Un fichero de comandos puede llamar a otros ficheros de comandos. Si un fichero
de comandos se llama desde de la lnea de comandos de MATLAB, las variables
que crea pertenecen al espacio de trabajo base de MATLAB (recordar apartado
2.4.7), y permanecen en l cuando se termina la ejecucin de dicho fichero.
Las funciones permiten definir funciones enteramente anlogas a las de
MATLAB, con su nombre, sus argumentos y sus valores de retorno. Los
ficheros *.m que definen funciones permiten extender las posibilidades de
MATLAB; de hecho existen bibliotecas de ficheros *.m que se venden (toolkits) o
se distribuyen gratuitamente (a travs de Internet).
Las funciones definidas en ficheros *.m se caracterizan porque la primera lnea
(que no sea un comentario) comienza por la palabra function, seguida por los
valores de retorno (entre corchetes [ ] y separados por comas, si hay ms de
uno), el signo igual (=) y el nombre de la funcin, seguido de los argumentos
(entre parntesis y separados por comas).
Recurdese que un fichero *.m puede llamar a otros ficheros *.m, e incluso puede
llamarse a s mismo de forma recursiva. Los ficheros de comandos se pueden
llamar tambin desde funciones, en cuyo caso las variables que se crean
pertenecen al espacio de trabajo de la funcin.
El espacio de trabajo de una funcin es independiente del espacio de trabajo base
y del espacio de trabajo de las dems funciones. Esto implica por ejemplo que no
puede haber colisiones entre nombres de variables: aunque varias funciones
tengan una variable llamada A, en realidad se trata de variables completamente
distintas (a no ser que A haya sido declarada como variable global).
A continuacin se ver con un poco ms de detalle ambos tipos de ficheros *.m.
Como ya se ha dicho, los ficheros de comandos o scripts son ficheros con un
nombre tal como file1.m que contienen una sucesin de comandos anloga a la
que se tecleara en el uso interactivo del programa.
Dichos comandos se ejecutan sucesivamente cuando se teclea el nombre del
fichero que los contiene (sin la extensin), es decir cuando se teclea file1 con el
110
ejemplo considerado.
Cuando se ejecuta desde la lnea de comandos, las variables creadas por file1
pertenecen al espacio de trabajo base de MATLAB. Por el contrario, si se ejecuta
desde una funcin, las variables que crea pertenecen al espacio de trabajo de la
funcin (ver apartado 2.4.7, en la pgina 13).
En los ficheros de comandos conviene poner los puntos y coma (;) al final de cada
sentencia, para evitar una salida de resultados demasiado cuantiosa. Un fichero
*.m puede llamar a otros ficheros *.m, e incluso se puede llamar a s mismo de
modo recursivo.
Sin embargo, no se puede hacer profile (ver apartado 6.11, en la pgina 90) de
un fichero de comandos: slo se puede hacer de las funciones.
Las variables definidas por los ficheros de comandos son variables del espacio de
trabajo desde el que se ejecuta el fichero, esto es variables con el mismo carcter
que las que se crean interactivamente en MATLAB si el fichero se ha ejecutado
desde la lnea de comandos. Al terminar la ejecucin del script, dichas variables
permanecen en memoria.
El comando echo hace que se impriman los comandos que estn en un script a
medida que van siendo ejecutados. Este comando tiene varias formas:
echo on activa el echo en todos los ficheros script
echo off desactiva el echo
echo file on donde 'file' es el nombre de un fichero de funcin, activa el echo en
esa funcin
echo file off desactiva el echo en la funcin
echo file pasa de on a off y viceversa
echo on all activa el echo en todas las funciones
echo off all desactiva el echo de todas las funciones
Mencin especial merece el fichero de comandos startup.m (ver apartado 2.6).
Este fichero se ejecuta cada vez que se entra en MATLAB. En l puede introducir
todos aquellos comandos que le interesa se ejecuten siempre al iniciar la sesin,
por ejemplo format compact y los comandos necesarios para modificar el path.
La primera lnea de un fichero llamado name.m que define una funcin tiene la
forma:
function [lista de valores de retorno] = name(lista de argumentos)
donde name es el nombre de la funcin. Entre corchetes y separados por comas
van los valores de retorno (siempre que haya ms de uno), y entre parntesis
tambin separados por comas los argumentos.
Puede haber funciones sin valor de retorno y tambin sin argumentos.
111
Recurdese que los argumentos son los datos de la funcin y los valores de
retorno sus resultados. Si no hay valores de retorno se omiten los corchetes y el
signo igual (=); si slo hay un valor de retorno no hace falta poner corchetes.
Tampoco hace falta poner parntesis si no hay argumentos.
Una diferencia importante con C/C++/Java es que en MATLAB una funcin no
puede modificar nunca los argumentos que recibe, de cara al entorno que ha
realizado la llamada.
Los resultados de una funcin de MATLAB se obtienen siempre a travs de los
valores de retorno, que pueden ser mltiples y matriciales. Tanto el nmero de
argumentos como el de valores de retorno no tienen que ser fijos, dependiendo de
cmo el usuario llama a la funcin
15
.
Las variables definidas dentro de una funcin son variables locales, en el sentido
de que son inaccesibles desde otras partes del programa y en el de que no
interfieren con variables del mismo nombre definidas en otras funciones o partes
del programa.
Se puede decir que pertenecen al propio espacio de trabajo de la funcin y no son
vistas desde otros espacios de trabajo. Para que la funcin tenga acceso a
variables que no han sido pasadas como argumentos es necesario declarar
dichas variables como variables globales, tanto en el programa principal como
en las distintas funciones que deben acceder a su valor.
Es frecuente utilizar el convenio de usar para las variables globales nombres
largos (ms de 5 letras) y con maysculas.
Por razones de eficiencia, los argumentos que recibe una funcin de MATLAB no
se copian a variables locales si no son modificados por dicha funcin (en trminos
de C/C++ se dira que se pasan por referencia).
Esto tiene importantes consecuencias en trminos de eficiencia y ahorro de
tiempo de clculo. Sin embargo, si dentro de la funcin se realizan modificaciones
sobre los argumentos recibidos, antes se sacan copias de dichos argumentos a
variables locales y se modifican las copias (dirase que en este caso los
argumentos se pasan por valor).
Dentro de la funcin, los valores de retorno deben ser calculados en algn
momento (no hay sentencia return obligatoria, como en C/C++/Java). De todas
formas, no hace falta calcular siempre todos los posibles valores de retorno de la
funcin, sino slo los que el usuario espera obtener en la sentencia de llamada
a la funcin.
En cualquier funcin existen dos variables definidas de modo automtico,
llamadas nargin y nargout, que representan respectivamente el nmero de
argumentos y el nmero de valores de retorno con los que la funcin ha sido
llamada. Dentro de la funcin, estas variables pueden ser utilizadas como el
programador desee.
La ejecucin de una funcin termina cuando se llega a su ltima sentencia
ejecutable. Si se quiere forzar el que una funcin termine de ejecutarse se puede
112
utilizar la sentencia return, que devuelve inmediatamente el control al entorno de
llamada.
Es un concepto distinto del de funciones sobrecargadas (funciones distintas con
el mismo nombre y distintos argumentos), utilizadas en C/C++/Java. En MATLAB
una misma funcin puede ser llamada con ms o menos argumentos y valores de
retorno. Tambin en C/C++ es posible tener un nmero variable de argumentos,
aunque no de valores de retorno.
De ordinario las funciones devuelven el control despus de que se ejecute la
ltima de sus sentencias. La sentencia return, incluida dentro del cdigo de una
funcin, hace que se devuelva inmediatamente el control al programa que realiz
la llamada.
Desde la versin 5.0, MATLAB dispone de una nueva forma de pasar a una
funcin un nmero variable de argumentos por medio de la variable varargin, que
es un vector de celdas que contiene tantos elementos como sean necesarios
para poder recoger en dichos elementos todos los argumentos que se hayan
pasado en la llamada.
No es necesario que varargin sea el nico argumento, pero s debe ser el ltimo
de los que haya, pues recoge todos los argumentos a partir de una determinada
posicin. Recurdese que a los elementos de un cell array se accede utilizando
llaves {}, en lugar de parntesis ().
De forma anloga, una funcin puede tener un nmero indeterminado de valores
de retorno utilizando varargout, que es tambin un cell array que agrupa los
ltimos valores de retorno de la funcin.
Puede haber otros valores de retorno, pero varargout debe ser el ltimo. El cell
array varargout se debe crear dentro de la funcin y hay que dar valor a sus
elementos antes de salir de la funcin.
Recurdese tambin que las variables nargin y nargout indican el nmero de
argumentos y de valores de retorno con que ha sido llamada la funcin. A
continuacin se presenta un ejemplo sencillo: obsrvese el cdigo de la siguiente
funcin atan3:
function varargout=atan3(varargin)
if nargin==1
rad = atan(varargin{1});
elseif nargin==2
113
rad = atan2(varargin{1},varargin{2});
else
disp('Error: ms de dos argumentos')
return
end
varargout{1}=rad;
if nargout>1
varargout{2}=rad*180/pi;
end
MATLAB (y muchos otros lenguajes de programacin) dispone de dos funciones,
llamadas atan y atan2, para calcular el arco cuya tangente tiene un determinado
valor. El resultado de dichas funciones est expresado en radianes.
La funcin atan recibe un nico argumento, con lo cual el arco que devuelve est
comprendido entre /2 y +/2 (entre 90 y 90), porque por ejemplo un arco de
45 es indistinguible de otro de 135, si slo se conoce la tangente.
La funcin atan2 recibe dos argumentos, uno proporcional al seno del ngulo y
otro al coseno. En este caso ya se pueden distinguir los ngulos en los cuatro
cuadrantes, entre y (entre 180 y 180).
La funcin atan3 definida anteriormente puede recibir uno o dos argumentos: si
recibe uno llama a atan y si recibe dos llama a atan2 (si recibe ms da un
mensaje de error). Adems, atan3 puede devolver uno o dos valores de retorno.
Por ejemplo, si el usuario la llama en la forma:
>> a = atan3(1);
devuelve un valor de retorno que es el ngulo en radianes, pero si se llama en la
forma:
>> [a, b] = atan3(1,-1);
devuelve dos valores de retorno, uno con el ngulo en radianes y otro en grados.
Obsrvese cmo la funcin atan3 utiliza los vectores de celdas varargin y
varargout, as como el nmero actual de argumentos nargin con los que ha sido
llamada.
Tambin las funciones creadas por el usuario pueden tener su help, anlogo al
que tienen las propias funciones de MATLAB. Esto se consigue de la siguiente
forma: las primeras lneas de comentarios de cada fichero de funcin son muy
importantes, pues permiten construir un help sobre esa funcin. En otras
palabras, cuando se teclea en la ventana de comandos de MATLAB:
>> help mi_func
114
el programa responde escribiendo las primeras lneas del fichero mi_func.m que
comienzan por el carcter (%), es decir, que son comentarios.
De estas lneas, tiene una importancia particular la primera lnea de
comentarios (llamada en ocasiones lnea H1). En ella hay que intentar poner la
informacin ms relevante sobre esa funcin. La razn es que existe una funcin,
llamada lookfor que busca una determinada palabra en cada primera lnea de
comentario de todas las funciones *.m.
MATLAB permite que los usuarios creen una ayuda general para todas las
funciones que estn en un determinado directorio. Para ello se debe crear en
dicho directorio un fichero llamado contents.m. A continuacin se muestra un
fichero tpico contents.m correspondiente al directorio toolbox\local de MATLAB:
% Preferences.
%
% Saved preferences files.
% startup - User startup M-file.
% finish - User finish M-file.
% matlabrc - Master startup M-file.
% pathdef - Search path defaults.
% docopt - Web browser defaults.
% printopt - Printer defaults.
%
% Preference commands.
% cedit - Set command line editor keys.
% terminal - Set graphics terminal type.
%
% Configuration information.
% hostid - MATLAB server host identification number.
% license - License number. % version - MATLAB version number.
% Utilities. % userpath - User environment path.
% Copyright 1984-2002 The MathWorks, Inc.% $Revision: 1.14 $ $Date:
2002/06/07 21:45:05 $
Comprubese que la informacin anterior es exactamente la que se imprime con
el comando
>> help local
Si el fichero contents.m no existe, se listan las primeras lneas de comentarios
115
(lneas H1) de todas las funciones que haya en ese directorio. Para que el Help
de directorios funcione correctamente hace falta que ese directorio est en el
search path de MATLAB o que sea el directorio actual.
Tradicionalmente MATLAB obligaba a crear un fichero *.m diferente por cada
funcin. El nombre de la funcin deba coincidir con el nombre del fichero.
A partir de la versin 5.0 se introdujeron las sub-funciones, que son funciones
adicionales definidas en un mismo fichero *.m, con nombres diferentes del
nombre del fichero (y del nombre de la funcin principal) y que las sub-funciones
slo pueden ser llamadas por las funciones contenidas en ese fichero,
resultando invisibles para otras funciones externas.
A continuacin se muestra un ejemplo contenido en un fichero llamado mi_fun.m:
function y=mi_fun(a,b)
y=subfun1(a,b);

function x=subfun1(y,z)
x=subfun2(y,z);

function x=subfun2(y,z)
x=y+z+2;
Las funciones privadas (private) son funciones que no se pueden llamar desde
cualquier otra funcin, aunque se encuentren en el path o en el directorio actual.
Slo ciertas funciones estn autorizadas a utilizarlas. Las funciones privadas
se definen en sub-directorios que se llaman private y slo pueden ser llamadas
por funciones definidas en el directorio padre del sub-directorio private.
En la bsqueda de nombres que hace MATLAB cuando encuentra un nombre en
una expresin, las funciones privadas se buscan inmediatamente despus de las
sub-funciones, y antes que las funciones de tipo general.
Las funciones *.p son funciones *.m pre-compiladas con la funcin pcode. Por
defecto el resultado del comando pcode func.m es un fichero func.p en el
directorio actual (el fichero func.m puede estar en cualquier directorio del search
path). El comando pcode -inplace func.m crea el fichero func.p en el mismo
directorio donde encuentra el fichero func.m. Pueden pasarse varios ficheros *.m
al comando pcode de una sola vez.
116
Los ficheros *.p se ejecutan algo ms rpidamente que los *.m y permiten ocultar
el cdigo de los ficheros ASCII correspondientes a las funciones *.m de MATLAB.
Las variables persistentes son variables locales de las funciones (pertenecen al
espacio de trabajo de la funcin y slo son visibles en dicho espacio de trabajo),
que conservan su valor entre distintas llamadas a la funcin.
Por defecto, las variables locales de una funcin se crean y destruyen cada vez
que se ejecuta la funcin. Las variables persistentes se pueden definir en
funciones, pero no en ficheros de comandos.
Es habitual utilizar para ellas letras maysculas. Las variables se declaran como
persistentes utilizando la palabra persistent seguida de los nombres separados
por blancos, como por ejemplo:
>> persistent VELOCIDAD TIEMPO
Las variables persistent se inicializan a la matriz vaca [ ] y permanecen en
memoria hasta que se hace clear de la funcin o cuando se modifica el fichero-
M. Para evitar que un fichero-M se modifique se puede utilizar el comando mlock
file.m, que impide la modificacin del fichero. El comando munlock desbloquea el
fichero mientras que la funcin mislocked permite saber si est bloqueado o no.
Las variables globales son visibles en todas las funciones (y en el espacio de
trabajo base o general) que las declaran como tales. Dichas variables de declaran
precedidas por la palabra global y separadas por blancos, en la forma:
global VARIABLE1 VARIABLE2
Como ya se ha apuntado, estas variables slo son visibles en los espacios de
trabajo de las funciones que las declaran como tales (y en el propio espacio de
trabajo base, si tambin ah han sido declaradas como globales). Ya se ha dicho
tambin que se suele recurrir al criterio de utilizar nombres largos y con
maysculas, para distinguirlas fcilmente de las dems variables.
Las referencias de funcin (function handles) constituyen un nuevo
mecanismo pera referirse a un nombre de funcin, introducido en MATLAB 6.0.
En versiones anteriores la nica forma de referirse a una funcin era por medio
del nombre.
Tngase en cuenta que MATLAB, al igual que otros lenguajes de programacin
como C/C++ y Java, admite funciones sobrecargadas (overloaded functions),
esto es, funciones diferentes que tienen el mismo nombre pero se diferencian
entre s por el nmero y tipo de los argumentos.
117
Cuando un programa llama a una funcin sobrecargada, MATLAB analiza los
tipos de los argumentos incluidos en la llamada y llama a la funcin que mejor se
adapta a esos tipos de argumentos.
Las referencias de funcin permiten al programador un mayor control sobre la
funcin que es efectivamente llamada y tienen algunas otras ventajas que se
vern en este apartado y en sus sub-apartados.
El principal uso de las referencias de funcin (como de los nombres de funcin
en versiones anteriores) es el pasar a una funcin el nombre de otra funcin, junto
con sus argumentos, para que la pueda ejecutar.
A estas funciones que ejecutan otras funciones que se les pasan como
argumentos se les llama funciones de funcin. Por ejemplo, MATLAB dispone
de una funcin llamada quad que calcula la integral definida de una funcin entre
unos lmites dados.
La funcin quad es genrica, esto es calcula, mediante mtodos numricos,
integrales definidas de una amplia variedad de funciones, pero para que pueda
calcular dicha integral hay que proporcionarle la funcin a integrar. Por ejemplo,
para calcular la integral entre 0 y de la funcin seno(x) se puede utilizar la
sentencia:
>> area=quad('sin',0,pi)
area =
2.0000
La funcin quad ejecuta la funcin sin por medio de la funcin feval, que tiene la
siguiente forma general:
feval(funcname, arg1, arg2, arg3, ...)
donde funcname es una cadena de caracteres con el nombre de la funcin a
evaluar, y arg1, arg2, arg3, ... son los argumentos que se le pasan a feval para
que se los pueda pasar a funcname.
A partir de la versin 6.0 de MATLAB ya no se pasa, a las funciones de funcin, el
nombre de la funcin como en el ejemplo anterior, sino una referencia de
funcin o function handle.
De todas formas, para mantener la compatibilidad con los programas
desarrollados en versiones anteriores, se sigue admitiendo que se pase a feval el
nombre de la funcin, pero este mecanismo ya no se soportar en versiones
posteriores. En MATLAB 6.* la forma correcta de ejecutar el ejemplo anterior sera
(se explicar con ms detalle a continuacin):
fh=@sin;
area=quad(fh,0,pi);
donde la variable fh es una referencia de funcin, que es un nuevo tipo de
dato de MATLAB, con todas las posibilidades y limitaciones que esto supone.
118
Ya se ha comentado que las referencias de funcin son un nuevo tipo de datos
de MATLAB 6. Una referencia de funcin se puede crear de dos formas
diferentes:
Mediante el operador @ ("at" o "arroba")
1) La referencia a la funcin se crea precediendo el nombre de la funcin por el
operador @. El resultado puede asignarse a una variable o pasarse como
argumento a una funcin. Ejemplos:
fh = @sin;
area = quad(@sin, 0, pi);

2) Mediante la funcin str2func La funcin str2func recibe como argumento una
cadena de caracteres conteniendo el nombre de una funcin y devuelve como
valor de retorno la referencia de funcin. Una de las ventajas de esta funcin
es que puede realizar la conversin de un vector de celdas con los nombres
en un vector de referencias de funcin. Ejemplos:
>> fh = str2func('sin');
>> str2func({'sin','cos','tan'})
ans =
@sin @cos @tan
Una caracterstica comn e importante de ambos mtodos es que se aplican
solamente al nombre de la funcin, y no al nombre de la funcin precedido o
cualificado por su path. Adems los nombres de funcin deben tener menos de
31 caracteres.
La principal aplicacin de las referencias de funcin es pasar informacin de
funciones a otras funciones para que aqullas puedan ser ejecutadas por stas.
Para evaluar una referencia de funcin MATLAB utiliza la funcin feval, que se
llama de la forma siguiente:
[r1, r2, r3, ...] = feval(fh, arg1, arg2, arg3, ...)
donde fh es una referencia de funcin y r1, r2, r3, ... y arg1, arg2, arg3, ... son
respectivamente los valores de retorno y los argumentos de la funcin cuya
referencia es fh.
Sobre la funcin feval hay que hacer dos observaciones:
1. La referencia de funcin fh debe ser un escalar. En otras palabras, no es
posible evaluar un array de referencias de funcin con una sola llamada a
feval.
119
2. La funcin fh que se ejecuta en el momento de la llamada a feval depende
de la situacin en el momento en que se cre la referencia de funcin, y no
de la situacin en el momento de la llamada a feval. Por ejemplo, si
despus de crear la referencia fh se cambia de directorio la funcin
correspondiente, en el momento de la ejecucin no ser posible
encontrarla; si despus de crear fh se crea una nueva funcin con el
mismo nombre, esta funcin no podr nunca ser ejecutada por medio de la
referencia creada previamente.
El siguiente ejemplo muestra cmo se puede ejecutar una sub-funcin desde
otra funcin definida en un fichero *.m diferente.
Recurdese que, en principio, las sub-funciones slo son accesibles desde otras
funciones definidas en el mismo fichero *.m. Supngase que se crea un fichero
llamado pruebafh.m que contiene las siguientes lneas (se define una funcin
principal pruebafh que se llama como el fichero y una sub-funcin subf):
% fichero pruebafh.m
function mifh=pruebafh
mifh=@subf;
function A=subf(B, C)
A=B+C;
Obsrvese que la funcin principal pruebafh devuelve una referencia a la sub-
funcin subf. En principio slo pruebafh tiene acceso a subf y gracias a ese
acceso puede crear la referencia mifh.
Sin embargo, una vez que la referencia a subf ha sido creada y devuelta como
valor de retorno, cualquier funcin con acceso a pruebafh podr tambin acceder
a la sub-funcin subf. El siguiente programa principal, definido en un fichero
pruebafhMain.m, puede acceder a la sub-funcin gracias a la referencia de
funcin (si se intenta acceder directamente se obtiene un error).
% fichero pruebafhMain.m
fh=pruebafh
A=rand(3);
B=eye(3)*10;
C=feval(fh,A,B)
% D=subf(A,B) % ERROR
disp('Ya he terminado')
Este ejemplo sencillo es bastante significativo respecto a los beneficios que se
pueden obtener de las referencias de funcin.
120
Una referencia de funcin puede contener informacin de varias funciones, en
concreto de todas aquellas funciones que fueran "visibles" en el momento en el
que dicha referencia fue creada.
Recurdese que funciones visibles, adems de las funciones intrnsecas de
MATLAB (built-in functions) son las funciones que estn definidas en el
directorio actual y en los directorios definidos en el path de MATLAB.
La funcin functions permite obtener toda la informacin disponible de una
referencia de funcin. Obsrvese la estructura salida del siguiente ejemplo (el
campo methods es a su vez una estructura que puede mostrarse por separado):
>> info=functions(@deblank)
function: 'deblank'
type: 'overloaded'
file: 'c:\matlab6p5\toolbox\matlab\strfun\deblank'methods: [1x1 struct]
>> info.methods
ans = cell: 'c:\matlab6p5\toolbox\matlab\strfun\@cell\deblank'
En este caso concreto se ha considerado la funcin deblank, que permite eliminar
caracteres en blanco en cadenas de caracteres o en vectoras de celdas con
cadenas de caracteres. El valor de retorno de la funcin functions es una
estructura con los cuatro campos siguientes:
function cadena de caracteres con el nombre de la funcin a la que
corresponde la referencia
type Cadena de caracteres con uno de los siguientes valores:
'simple', 'subfunction', 'private', 'constructor' y
'overloaded'.
file Cadena de caracteres que contiene el nombre del fichero *.m en el que est
definida la funcin o bien el texto 'MATLAB built-in function'. methods
Estructura que contiene los paths de los ficheros *.m en los que estn definidas
las funciones sobrecargadas que se corresponden con esta referencia.
El argumento de la funcin functions debe ser una referencia de funcin escalar
(no puede ser un array de referencias de funcin). Los distintos valores del campo
type tienen los siguientes significados: simple Funciones intrnsecas no
sobrecargadas. overloaded Funciones sobrecargadas.
Son las nicas que tienen campo methods. constructor Constructores
relacionados con clases y objetos. subfunction Funciones definidas en un fichero
*.m de otra funcin. private Funciones privadas (definidas en un subdirectorio
private).
Las funciones sobrecargadas (overloaded) tienen un inters especial, pues son
las nicas que tienen el campo methods y las que pueden dar origen a ms
dificultades o problemas. De modo anlogo a otros lenguajes de programacin
121
como C/C++ y Java, las funciones sobrecargadas de MATLAB son funciones que
tienen el mismo nombre, pero distintos tipos de argumentos y distinto cdigo (en
otras palabras, funciones diferentes que slo coinciden en el nombre).
Las funciones default son las que no tienen argumentos especializados. Otras
funciones esperan recibir un argumento de un tipo ms concreto. Salvo que haya
una funcin especializada cuyos argumentos coincidan con los tipos de la
llamada, MATLAB utilizar la funcin default.
De la misma manera que una cadena de caracteres pude ser convertida en una
referencia de funcin por medio de la funcin str2func, MATLAB dispone de la
funcin func2str que realiza la conversin inversa. Puede ser interesante
convertir una referencia de funcin en cadena de caracteres para construir
mensajes de error en relacin con construcciones try...catch.
Otras funciones que pueden utilizarse en relacin con las referencias de funcin
son las siguientes (se presentas mediante ejemplos):
isa(unaVariable, 'function_handle')
Funcin que devuelve "1" "0" segn unaVariable sea o no una referencia de
funcin. Esta funcin se podra utilizar dentro de una funcin de funcin para
comprobar que el argumento que indica la funcin a ejecutar con feval ha llegado
correctamente.
isequal(unfh, otrofh)
Funcin que compara dos referencias a funcin e indica si dan acceso
exactamente a los mismos mtodos o no.
Como las referencias de funcin son variables estndar de MATLAB, pueden
guardarse y recuperarse de una sesin a otra por medio de los comandos save y
load. .
Hay que tener cuidado al utilizar referencias de funcin creadas en sesiones
anteriores, porque si ha cambiado el entorno de trabajo en algo que les afecte se
obtendr un error en tiempo de ejecucin.
La principal utilidad de las referencias de funcin es el pasar informacin de una
funcin a otras funciones que la deben poder ejecutar por medio de feval.
Algunas otras ventajas de las referencias de funciones son las siguientes:
1. Se pueden encontrar todas las funciones con el mismo nombre que son visibles
en un determinado estado del programa. De esta forma se tiene ms control
sobre la funcin que verdaderamente se va a ejecutar.
2. Acceder desde cualquier parte de un programa a las funciones privadas y a las
sub-funciones. De esta forma se puede reducir el nmero de ficheros *.m
122
necesarios, pues muchas funciones se podrn definir como sub-funciones en
un mismo fichero.
3. Mejorar la eficiencia de las funciones que se utilizan repetidamente, pues no es
necesario buscar el fichero *.m cada vez.
4. Las referencias de funcin son, como se ha dicho, variables ordinarias de
MATLAB que pueden ser agrupadas en arrays de una o ms dimensiones.
TALLER N
Cree y pruebe funciones escritas por el usuario para calcular lo siguiente:








( )
( )
( ) ( )
0, si x 0
1. step x
1, en otro caso
0, si x 0
2. ramp x
x, en otro caso
0, si x 0
3. g x sen x / 2 , si 0 x 1
1 si x 1
<

=
`
)
<

=
`
)
<


= t s s
`

>
)
123
En este tema exploramos las diversas funciones MATLAB para crear matrices y
para calcular nuevas matrices a partir de matrices existentes. Entre ellas estn las
funciones matemticas, funciones trigonomtricas, funciones de anlisis de datos,
funciones de nmeros aleatorios y funciones lgicas; tambin ilustramos los
pasos a seguir para crear una funcin escrita por el usuario. Adems,
presentamos las instrucciones y funciones de seleccin que nos permiten analizar
porciones selectas de las matrices. Por ltimo, incluimos una breve descripcin de
los ciclos porque a veces se necesitan en las soluciones MATLAB.
Este resumen de MATLAB lista todos los sImbolos especiales, comandos y
funciones que definimos en este tema. Tambin se incluye una descripcin breve
de cada uno.
CARACTERES ESPECIALES
COMANDOS Y FUNCIONES
abs calcula valor absoluto o magnitud
acos calcula arcocoseno
all determina si todos los valores son verdaderos
any determina si algn valor es verdadero
asin calcula arcoseno
atan calcula arcotangente de 2 cuadrantes
atan2 calcula arcotangente de 4 cuadrantes
ceil redondea hacia
cos calcula el coseno de un ngulo
cumprod determina productos acumulativos
cumsum determina sumas acumulativas
else clusula opcional de la instruccin if
elseif clusula opcional de la instruccin if
end define el final de una estructura de control
exp calcula un valor con base e
find localiza los valores distintos de cero
finite determina si los valores son finitos
fix redondea hacia cero
floor redondea hacia -
for genera una estructura de ciclo
124
function genera una funcin definida por el usuario
hist dibuja un histograma
if prueba una expresin lgica
isempty determina si una matriz est vaca
isnan determina si los valores son NaN
length determina el nmero de valores en un vector
log calcula el logaritmo natural
log10 calcula el logaritmo comn
max determina el valor mximo
mean determina la media
median determina Ia mediana
mim determina el valor mnimo
polyval evala un polinomio
prod determina el producto de los valores
rand genera un nmero aleatorio uniforme
randn genera un nmero aleatorio gaussiano
rem calcula el residuo de una divisin
round redondea al entero ms cercano
sign genera -1, 0 o 1 con base en el signo
sin calcula el seno de un ngulo
sort ordena valores
sqrt calcula raz cuadrada
std calcula desviacin estndar
sum determina la sumatoria de los valores
tan calcula la tangente de un ngulo
what lista archivos
while genera una estructura de ciclo

NOTAS DE ESTILO
1. Sangre las instrucciones incluidas en una instruccin if para facilitar su
comprensin.
2. Evite usar ciclos porque pueden aumentar significativamente el tiempo de
ejecucin de un programa.

125

3. No olvide encerrar los argumentos de cada funcin en parntesis.
4. No use el nombre de variable i o j para otras variables en un programa que
tambin use nmeros complejos.
5. Al usar operadores relacionales y lgicos, asegrese de que los pasos que
se ejecutan sean los debidos.
PROBLEMAS

Trayectoria de cohete. Se est diseando un cohete pequeo para medir las
fuerzas de corte del viento en las inmediaciones de tormentas. Antes de iniciar las
pruebas, los diseadores estn creando una simulacin de Ia trayectoria del
cohete, y han deducido la siguiente ecuacin que, segn creen, puede predecir el
desempeo del cohete, donde t es el tiempo transcurrido en segundos:
altura = 60 + 2.13t
2
- 0.0013t
4
+ 0.000034t
4.751

La ecuacin da la altura sobre el suelo en el instante t. El primer trmino (60) es la
altura en pies sobre el suelo de la punta del cohete.
1. Escriba comandos para calcular y exhibir el tiempo y Ia altura del cohete
desde t = 0 hasta el instante en que toque el suelo, en incrementos de 2
segundos. Si el cohete no ha tocado el suelo en 100 segundos, imprima valores
slo hasta t= 100s.
2. Modifique los pasos del problema 1 para que, en lugar de una tabla, el
programa exhiba el instante en el que el cohete comienza a caer hacia el suelo y
el instante en el que el cohete choca con el suelo.
Empaque de suturas. Las suturas son hilos o fibras empleados para coser
tejidos vivos a fin de cerrar heridas por accidente u operacin. Los paquetes de
suturas deben sellarse cuidadosamente antes de enviarse a los hospitales de
modo que los contaminantes no puedan penetrar en los paquetes. El objeto que
sella el paquete se denomina dado sellador. En general, los dados selladores se
calientan con un calentador elctrico. Para que el proceso de sellado tenga xito,
el dado de sellado se mantiene a cierta temperatura y debe hacer contacto con el
paquete con cierta presin durante cierto tiempo. El periodo durante el cual el
dado hace contacto con el paquete se denomina tiempo de permanencia.
Suponga que los intervalos aceptables de parmetros para un sello correcto son
los siguientes:
Temperatura: 150-170 C
Presin: 60-70 psi
Tiempo de permanencia: 2-2.5 s
3. Un archivo de datos llamado suture .dat contiene informacin sobre lotes
de suturas que han sido rechazados durante un periodo de una semana. Cada
lnea del archivo de datos contiene el numero de lote, la temperatura, Ia presin y
126
el tiempo de permanencia de un lote rechazado. Un ingeniero de control de
calidad quiere analizar esta informacin para determinar el porcentaje de los lotes
rechazados por temperatura, el porcentaje rechazado por presin y el porcentaje
rechazado por tiempo de permanencia. Si un lote especfico se rechaza por ms
de una razn, se debe contar en todos los totales aplicables. Escriba
instrucciones MATLAB para calcular e imprimir estos tres porcentajes. Use los
siguientes datos:

NMERO DE
LOTE
TEMPERATURA PRESIN TIEMPO DE
PERMANENCIA
24551 145.5 62.3 2.23
24582 153.7 63.2 2.52
26553 160.3 58.9 2.51
26623 159.5 58.9 2.01
26642 160.3 61.2 1.98

4. Modifique la solucin del problema 3 de modo que tambin imprima el
numero de lotes que hay en cada categora de rechazo y el nmero total de lotes
rechazados. (Recuerde que un lote rechazado slo debe aparecer una vez en el
total, pero podra aparecer en ms de una categora de rechazo.)
5. Escriba un programa que lea el archivo de datos suture.dat y se asegure
de que la informacin corresponda slo a lotes que debieron haberse rechazado.
Si algn lote no debera estar en el archivo de datos, exhiba un mensaje
apropiado con la informacin del lote.
Reforestacin. Un problema de silvicultura consiste en determinar qu tanta area
debe dejarse sin cortar de modo que el area cosechada se pueda reforestar en
cierto tiempo. Se supone que Ia reforestacin ocurre con una rapidez conocida
por ao, dependiendo del clima y las condiciones del suelo. Una ecuacin de
reforestacin expresa este crecimiento en funcin de la cantdad de rboles en pie
y la tasa de, reforestacin. Por ejemplo, si se dejan 100 acres sin cortar despus
de la cosecha y la tasa de reforestacin es de 0.05, habr rboles en 100 + 0.05 x
100 = 105 acres al final del primer ao. Al final del segundo ao, el nmero de
acres con rboles es de 105 + 0.05 x 105 = 110.25 acres.
6. Suponga que hay 14,000 acres en total y se dejan 2500 acres sin cortar, y
que la tasa de reforestacin es de 0.02. Exhiba una tabla que muestre el numero
d~ acres reforestados a! final de cada ao, durante un total de 20 aos.
7. Modifique el programa creado en el problema 6 de modo que el usuario
pue introducir el nmero de aos que deben usarse para la tabla.
127
8. Modifique el programa creado en el problema 6 de modo que el usuario
pueda introducir un numero de acres, y el programa determine cuantos aos se
requieren para que ese numero de acres quede cubierto con rboles.
Datos de sensores. Suponga que un archivo de datos llamado sensor.dat
contiene informacin recolectada de una serie de sensores. Cada fila contiene
una serie de lecturas de sensor, donde la primera fila contiene valores tomados a
los 0.0 segundos, la segunda fila contiene valores tomados a los 1.0 segundos,
etc.
9. Escriba un programa que lea el archivo de datos y exhiba el numero de
sensores y el numero de segundos de datos contenidos en el archivo.
10. Escriba un progama que procese de antemano los datos de sensores de
modo que todos los valores mayores que 10.0 se igualen a 10.0, y todos los
valores menores que -10.0 se igualen a -10.0.
11. Escriba un programa que exhiba los subindices de los valores de datos de
sensores cuyo valor absoluto sea mayor que 20.0.
12. Escriba un programa que exhiba el porcentaje de los valores de datos de
sensores que son 0.
Salida de una planta de energa elctrica. La salida de potencia en megawatts
de una planta de energa elctrica durante un periodo de ocho semanas se
almacen en un archivo de datos Ilamado plant.dat. Cada lnea del archivo
representa los datos de una semana, y contiene la salida de los das 1, 2,.. ., 7.
13. Escriba un programa que use los datos de salida de la planta de
electricidad y exhiba un informe que liste el numero de das en los que Ia salida
de potencia fue mayor que el promedio. El informe debera indicar el numero de la
semana y el numero de da para cada uno de esos das, adems de mostrar la
salida de potencia media de la planta durante el periodo de ocho semanas.
14. Escriba un programa que use los datos de salida de Ia planta de
electricidad e indique el da y Ia semana en los que ocurri la salida de potencia
maxima y minima. Si el mximo o el mnimo ocurri en mas de un da, se deben
indicar todos los das en cuestin.
15. Escriba un programa que use los datos de salida de la planta de
electricidad e indique Ia salida de potencia media para cada semana. Adems,
exhiba la salida de potencia media para el da 1, el da 2, etcetera.

Vous aimerez peut-être aussi