Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso Básico de MATLAB PDF
Curso Básico de MATLAB PDF
1.3.Instrucciones de instalacin
1.4.Inicio de Matlab
1.5.Como terminar Matlab
1.6.Estructura de directorios
1.7.Uso del Help
1.1 Instalacin
Antes de la instalacin
1. Inserte el CD que contiene el producto Mathworks dentro de la lectora de CD ROM y haga doble
click en el archivo setup.exe. El instalador arrancar automticamente mostrando el siguiente cuadro de
dialogo de bienvenida
2. Luego de clickear en el botn Next aparecer el siguiente cuadro de dialogo en el cual deber ingresar
el numero de licencia personal (PLP) .Una vez ingresado haga click en Next y
5.Haga click en el botn Next para instalar todos los productos y documentacin seleccionados en el
directorio por omisin (C: \matlabR12). Si desea especificar un directorio diferente tenga en cuenta lo
siguiente:
.No utilice la palabra "private" como directorio de instalacin
.No utilice un nombre de directorio que contenga espacios o que comience con @.
.Si el directorio que especifica no existe el instalador lo crea.
Se puede copiar informacin de este cuadro de dialogo para su posterior uso en la configuracin.
7.Cuando el instalador finaliza muestra el cuadro de dialogo Installation Complete
En este cuadro de dialogo ,se puede elegir iniciar Matlab o registrarse como usuario de Matlab .Si elige
lo ultimo se inicia el navegador de internet y abre la pagina de MathWorks Web site para registrar el
producto.
Si ha instalado productos que requieran la reiniciacin de su sistema antes de ejecutarlos el instalador
mostrara esa alternativa en el siguiente cuadro de dialogo.
Consejos para el uso del Index: Haga el panel mas ancho para poder ver el producto o el documento al
cual el texto ingresado pertenece, escriba en diferente orden las palabras ingresadas en la bsqueda, si
el Produt filter esta en Selected pruebe volviendo a All.
.Contents: Clickeando en la orejeta de contenidos se puede ver un ndice de la documentacin por
producto. Clickeando en el signo + de cualquier documento se expande el ndice de dicho documento,
luego si hacemos doble click en el tem seleccionado nos muestra la primera pagina del documento. En
la siguiente figura podemos ver la estructura de documentos.
2.2.2.Command History
En esta ventana se van guardando los comandos ejecutados en la ventana de comandos. Entonces es
muy til para visualizar funciones ejecutadas anteriormente, lo nico que se necesita hacer es
seleccionar la funcin con el mouse y hacer doble click en la misma para que la funcin o comando se
ejecute nuevamente en la ventana de comandos.
2.2.3.Launch Pad
Provee un acceso rpido y fcil a las herramientas, demos y documentacin instaladas. Ver figura como
ejemplo de uso.
2.2.4.Help Browser
Ver seccin 1.7 de este apunte.
2.2.5.Current Directory Browser
Las operaciones con archivos en Matlab usan el directorio corriente (current directory) y el camino de
bsqueda (search path) como puntos de referencia. cualquier archivo que se desea ejecutar debe estar en
el directorio corriente o en el camino de bsqueda. Una forma rapida para cambiar el directorio corriente
es usando el campo Current Directory en la barra de tareas del escritorio , ver la siguiente figura.
Para buscar , ver, abrir o hacer cambios en los archivos relacionados con Matlab se debe utilizar el
Current Directory Browser. Alternativamente tambin se pueden utilizar los comandos dir, cd y delete
desde la ventana de comandos, de todos modos es mas simple utilizar el browser por lo que se
recomienda tenerlo siempre abierto en el escritorio de trabajo, para ello ingrese en el men View en el
escritorio, seleccione Desktop Layout y seleccione Five Panel. el escritortorio de trabajo se configurara
de modo que se vean el Command Window, Command History, Launch Pad , Workspace y el Current
Directory Browser.
Search Path (Camino de bsqueda) : Cuando ejecuta una funcin o un archivo Matlab utiliza el camino
de bsqueda para encontrar los archivos M y otros relacionados con Matlab. Cualquier archivo que
se desee ejecutar debe estar en el directorio corriente o en un directorio que este incluido en el
camino de bsqueda. Durante la instalacin todos los archivos y funciones suministradas con Matlab
son incluidas en el camino de bsqueda.
Para ver cuales son los directorios predeterminados o cambiar el camino de bsqueda debe seleccionar
Set Path desde el men File en el escritorio de Matlab.
Alternativamente desde la ventana de comandos puede utilizar la funcin search para ver el camino de
bsqueda, la funcin addpath para agregar directorios al camino de bsqueda y rmpath para quitar
directorios del camino de bsqueda.
2.2.6.Workspace Browser
El workspace de Matlab consiste en un conjunto de variables (llamadas arrays) que son construidas y
almacenadas en memoria durante una sesion de Matlab. Las variables se agregan al workspace
mediante el uso de funciones, corriendo archivos M o cargando workspaces grabados en disco.
Para ver las variables del workspace as como tambin informacin de las mismas se puede utilizar el
Workspace Browser (perteneciente al escritorio de Matlab) o ejecutar las funciones who y whos desde la
lnea de comandos de la ventana de comandos.
Para borrar variables del workspace selecte la variable y luego seleccione Delete del men Edit.
Alternativamente utilice la funcin clear desde la lnea de comandos
El workspace no es mantenido luego de cerrar una sesin, para grabarlo a un archivo selecciona Save
Workspace As desde el men File. Alternativamente puede utilizar la funcin save desde la lnea de
comandos. De este modo se graba el Workspace a un archivo binario cuya extension es .mat. Hay
opciones para guardarlo de diferentes formatos.
2.2.7.Editor/Debugger
Esta herramienta se utiliza para crear o depurar archivos M, los cuales son programas que usted utiliza
para correr funciones Matlab. Este editor provee una interfaz grafica para edicin de texto bsica y a su
vez opciones de depuracin que le permite correr el programa paso a paso ,por ejemplo , y poder as
detectar un error de ejecucin o funcionamiento de un programa.
Se puede utilizar cualquier editor de texto para crear archivos M, de todos modos por simplicidad y
practicidad se recomienda utilizar el que viene con Matlab.
Una forma rpida de ver los contenidos de un archivo M es usando la funcin type desde la ventana de
comandos, entonces el listado del programa aparecer en la ventana de comandos para su inspeccin.
La interfaz grafica se ve de la siguiente manera:
2.3.Ejecucin de Funciones
2.3.1.Ejecucin de Funciones e ingreso de variables
Las funciones o comandos de Matlab se ejecutan en la ventana de comandos, una vez abierta esta ultima
el prompt >> aparecer para indicarle que esta lista para ejecutar comandos y funciones de Matlab.
.Para ingresar una variable al workspace , por ejemplo la siguiente lnea crea una matriz
A que se almacena durante la sesin en el workspace:
A = [1 2 3; 4 5 6; 7 8 10]
Luego de ingresar todo el texto presionamos Enter y el Matlab devuelve :
A=
1 2 3
4 5 6
7 8 10
.Para ejecutar una funcin , en la lnea de comandos se debe escribir el nombra de la funcin junto con
los argumentos que esta necesite y presionar Enter , entonces Matlab presentara el resultado de dicha
ejecucin .Por ejemplo el comando:
magic(2)
retorna como resultado luego de presionar Enter
ans =
1 3
4 2
Si se necesita ingresar mltiples lneas de comando antes de ejecutar de debe usar Shift+Enter despus
de cada lnea de comando hasta la ultima y luego presionar Enter para ejecutar todas las lneas de
comando
Si el prompt en la ventana de comandos es K>> indica que estamos en modo Depuracin.
Para obtener mas informacin acerca de todas las funciones que provee Matlab debe abrir el Help
John
85 90 95
Ann
90 92 98
Martin 100 95 97
Rob
77
86 93
En el Import wizard se vera de la siguiente manera :
En la figura se debe notar como se auto detect el separador de columnas que en este caso es Tab,
tambin se puede ver que se crearon tres tipos de datos : tipo data, conteniendo los datos numricos ,
textdata conteniendo todo el texto encontrado y rowheader conteniendo los nombres de la columna
izquierda de data.
Para seleccionar la variable a importar debe clickear en Next en el cuadro anterior y para elegir la
variable en el siguiente cuadro de dialogo debe seleccionar en cuadro de seleccin junto a la
variable.
En la siguiente tabla daremos un breve resumen de los tipos de datos y las funciones que se utilizan para
importarlos.
Funcin
Tipo de dato
textread
Alfabetico y
Numrico
Numrico
Numrico
csvread
dlmread
fscanf
load
Afbabetico y
Numrico
Numrico
Se puede utilizar el help en la lnea de comandos para ver detalles de las funciones mencionadas
anteriormente.
Extensin del
Archivo
.wav
.avi
dlmwrite
fprintf
save
Delimitadores
solamente espacios
Cualquier caracter
Cualquier caracter
Tab y espacio
Notas
Se puede utilizar en pequeos arreglos. requiere
la edicin de los datos para quitar caracteres
extraos
Fcil y flexible de usar
Rutinas de entrada salida de bajo nivel. se
utiliza en conjunto con fopen y fclose
Los valores de salida son de alta precisin
2.5.4 Exportacin de Datos Binarios: Nuevamente al igual que la importacin el mtodo mas
fcil es utilizando el Import Wizard. De igual manera podemos exportar desde la ventana de
comandos. La siguiente Tabla es una gua rpida de las funciones utilizadas. Para detalles de uso use
el comando help "nombrefuncion" en la ventana de comandos.
Formato del
Dato
Audio
Audio y
Video
Intercalado
Archivos de
imagen
Extensin del
Archivo
.wav
.avi
archivos M
Hoja de
Calculo
.xls
.wkl
2.6.Excel Link
Excel Link es un Software que integra Microsoft Excel y Matlab en un entorno computacional
Windows. Conectando Excel con Matlab se puede acceder al potente procesamiento numrico y
grafico de Matlab desde una planilla de calculo. A su vez Excel permite el intercambio de datos entre los
dos ambientes. Desde el punto de vista de importacin y exportacin de datos es una herramienta que
permite obtener y enviar datos del Excel a Matlab y viceversa , pero adems provee funciones que
permiten ejecutar acciones sobre dichos datos y acceder a facilidades de calculo complejo y graficas
especializadas del Matlab , resultando una configuracin de trabajo donde el Excel es la interfaz grafica
para los datos y Matlab el motor de calculo. La siguiente grafica permite entender como es el
intercambio de informacin entre los dos ambientes.
Excel Link comunica los espacios de trabajo del Matlab y de Excel a travs de un restringido y simple
conjunto de funciones bsicas. Se pueden ejecutar la funciones Excel Link desde la Hoja de calculo o
desde macros sin tener que dejar el ambiente de Excel . Solo con 11 funciones la potencia de Excel link
reside en su simplicidad.
2.6.2.Funciones.
.Funciones de manejo de enlace. son las funciones que permiten inicializar y cerrar Excel Link y
Matlab:
matlabinit
Inicializa el Excel Link y arranca el proceso de Matlab
MLAutoStart
Inicia el proceso de Matlab automticamente
MLClose
Termina el proceso de Matlab
MLOpen
Inicia el proceso de Matlab
.Funciones de manejo de datos.
MLAppendMatrix
MLDeleteMatrix
MLEvalString
MLGetMatrix
MLGetVar
MLPutMatrix
MLPutVar
2.6.3.Tipos de Datos
Excel Link solamente maneja arreglos numricos bidimensionales ,arreglos de caracteres de una
dimensin y arreglos de celdas bidimensionales conteniendo solamente cadenas de caracteres.
no trabaja con arreglos multidimensionales, estructuras o arreglos de celdas excepto aquellas que
contienen solamente cadenas de caracteres.
Ejercicios
1. Con la funcin wavread importar el archivo chimes.waw y convertirlo a una matriz del workspace.
Separar esta matriz en 2 vectores columnas (canal izq. y derecho ) , graficarlos con la funcin plot,
y luego grabar los canales independientes con la funcin wavwrite .
xlsread y convertirla a una matriz en el
2.Crear una tabla numrica en Excel , leerla con la funcin
workspace . Editarla con el editor de arreglos y grabarla con el comando save.
3. Crear con el Notepad una tabla que tenga 3 columnas , Nombre, Apellido y Nota, ingresarle 5 a 10
entradas diferentes y con la funcin textread crear las variables Nombre ,Apellido y Nota en el
workspace conteniendo las entradas de dicha tabla.
3.2.Nmeros y Representaciones
Matlab usa la notacin decimal convencional con la opcin de un signo + o - delante del numero para
indicar si es positivo o negativo.
Todos los nmeros son almacenados internamente usando el formato largo del estndar de punto
flotante de la IEEE. Los nmeros de punto flotante tienen la precisin finita de los 16 dgitos decimales
y un rango de 10-108 a 10+308.
Hay tres tipos de nmeros utilizados en Matlab : Enteros, Reales y Complejos.
Los enteros son ingresados sin el punto decimal por ejemplo: x=10 ser grabada a como un nmero
entero. Sin embargo si nuestra variable fuera x=10.01 es grabada como un nmero real.
Un nmero complejo en Matlab es representado en forma rectangular es decir su parte real e imaginaria
por separado .La parte imaginaria se puede representar ya sea con la letra i o j. Por ejemplo si escribimos
i en la ventana de comandos como resultado obtendremos
ans =
0 + 1.0000i
Recordemos que la letra i que acompaa al numero indica que este est a 90 grados respecto del
anterior.
Adems de los tipos de nmeros mencionados anteriormente Matlab posee tres variables para
representar lo que se denomina nonumeros. Estas variables son:
.-Inf (Representacin del infinito negativo)
. Inf (Representacin del infinito positivo)
.NaN (Significa que no es un numero y se asigna a resultados de operaciones como 0.0/0.0 o Inf x Inf)
Nota: Para cambiar el formato de los nmeros en la ventana de comandos se debe ingresar en el men
File y entrar a Preferences para hacer el cambio. La configuracin por defecto es llamada short lo que
implica que se vern cuatro dgitos despus del punto decimal. Los cambios tambin se pueden realizar
desde la ventana de comandos , por ejemplo si escribimos en la lnea de format long los nmeros
pasaran a representarse con 14 decimales.
Suma
Resta
Divisin
Multiplicacin
Divisin Izquierda ( ver calculo con Matrices)
Potencia
Traspuesta compleja conjugada
Orden de evaluacin de la expresin
Divisin Matricial o divisin derecha. B/A es lo mismo que realizar B* inv(A). Por ejemplo B/A
para las mismas matrices anteriores:
C=B/A
C=
0.5000 1.0000
0.5000 1.0000
Divisin de Arreglos. Es la divisin elemento a elemento B(i,j) /A(i,j).A y B deben ser del mismo
tamao a menos que uno de ellos sea un escalar. Por ejemplo
C=B./A
C=
1.5000 1.5000
1.5000 1.5000
Divisin Izquierda de Matrices. La operacin B\A es la misma operacin que inv(B)*A. Si B es una
matriz de n x n elementos y A un vector columna con n elementos entonces X=B\A es la solucin de la
ecuacin BX=A.
Divisin izquierda de arreglos B.\A es la operacin A(i,j).\ B(i,j).Veamos el siguiente ejemplo
C=B.\A
C=
0.6667 0.6667
0.6667 0.6667
Potencia de Matrices. La potencia es computada por sucesivas repeticiones de la multiplicacin por si
misma es decir A^p es multiplicar AxAxA... p veces donde p es un entero . Si potencia p a la cual se
Potencia de Arreglos. Es la operacin A.^B donde los elementos A(i,j) son elevados a la potencia de los
elementos B(i,j). En este caso utilizaremos otra matriz B para que quede de manifiesto la operacin .
Entonces
B=
1 2
3 4
C=A.^B
C=
2 4
8 16
Traspuesta de una Matriz. B' es la traspuesta lineal algebraica de B. Para matrices complejas esta
operacin realiza la traspuesta conjugada. Veamos los siguientes ejemplos :
C=B'
C=
1 3
2 4
Definimos una matriz B compleja
B=
1.0000 + 1.0000i 2.0000 + 2.0000i
3.0000 - 3.0000i 4.0000 - 4.0000i
C=B'
C=
1.0000 - 1.0000i 3.0000 + 3.0000i
2.0000 - 2.0000i 4.0000 + 4.0000i
Traspuesta de arreglos. Es la operacin B.', traspone el arreglo. Para el caso de elementos complejos no
realiza la conjugacin. Por ejemplo:
C=B.'
C=
1.0000 + 1.0000i 3.0000 - 3.0000i
2.0000 + 2.0000i 4.0000 - 4.0000i
Vemos que no realiza conjugacin , es decir el signo de la parte imaginaria no cambia.
Nota: Todas estas operaciones tienen su respectivas funciones de archivo M talque se pueden tambin
ejecutar de la siguiente manera en la lnea de comandos.
Operacin
A+B
Funcin M Equivalente
plus(A,B)
+A
A-B
-A
A*B
A.*B
A/B
A./B
A\B
A.\B
A^B
A.^B
A'
A.'
uplus(A)
minus(A,B)
uminus(A)
mtimes(A,B)
times(A,B)
mrdivide(A,B)
rdivide(A,B)
mldivide(A,B)
ldivide(A,B)
mpower(A,B)
power(A,B)
ctranspose(A)
transpose(A)
Como respuesta a las operaciones descriptas anteriormente pueden aparecer los siguientes mensajes de
advertencia en la lnea de comandos :
.Si en una divisin de matrices la matriz cuadrada A es singular
Warning: Matrix is singular to working precision.
.Si una divisin tiene el divisor igual a cero
Warning: Divide by zero.
.Si se encuentra la inversa de una matriz pero no es confiable
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = xxx
De una division matricial si una matriz no cuadrada es deficiente en su rango
Warning: Rank deficient, rank = xxx tol = xxx
Si una divisin de matrices retorna una matriz con todos sus elementos de valor Inf, la divisin de esta
ultima dar como resultados Inf y NaN donde lo crea conveniente.
Adems Matlab tambin provee cuatro funciones para generar matrices bsicas:
zeros : Genera una matriz con todos sus elementos igual a cero.
ones: Genera una matriz con todo sus elementos igual a uno.
rand: Genera una matriz con valores aleatorios uniformemente distribuidos.
randn: Genera una matriz con valores aleatorios normalmente distribuidos.
Por ejemplo:
Z = zeros(2,4) ( los nmeros dentro del parntesis indican la cantidad de filas y columnas
respectivamente).
Z=
0 0 0 0
0 0 0 0
F = 5*ones(3,3)
F=
5 5 5
5 5 5
5 5 5
R = randn(4,4)
R=
1.0668 0.2944
0.0593 -1.3362
-0.0956 0.7143
-0.8323 1.6236
-0.6918 -1.4410
0.8580 0.5711
1.2540 -0.3999
-1.5937 0.6900
Otra forma de ingresar una matriz es utilizando el comando load, este comando lee archivos binarios
conteniendo matrices generadas en una sesin anterior de Matlab o lee archivos de texto conteniendo
datos numricos. El texto en el archivo debe estar organizado como una tabla de nmeros separados por
espacios en blancos , con una fila por lnea e igual cantidad de elementos por columna.
Por ejemplo fuera de Matlab con cualquier editor de texto escribimos el siguiente texto y lo guardamos
16.0 3.0 2.0 13.0
5.0 10.0 11.0 8.0
9.0 6.0 7.0 12.0
4.0 15.0 14.0 1.0
y lo salvamos con el nombre matri.dat luego con el comando load leemos el archivo y crea una variable
con el nombre matri conteniendo dicha matriz.
Tambin se pueden crear matrices utilizando archivos M, los cuales son archivos de texto conteniendo
cdigo de Matlab. Se graba archivo con un nombre con terminacin .m y luego al ejecutar el nombre del
archivo en la lnea de comandos crea la variable guardada en el archivo.
Nota: Un tipo de vector de mucha utilidad es aquel cuyos elementos estn regularmente separados,
siendo muy utilizados por ejemplo lazos for, generacin de bases de tiempo , ndices de arreglos y
escalas de grficos. El operador que Matlab utiliza para generar este tipo de vectores es ( : ) . Veamos
algunos ejemplos:
.Dados dos escalares j y k la operacin :
j:k es lo mismo que generar un vector que siga la siguiente regla [j,j+1,...,k] .Por ejemplo j=3, k=6
j:k da como resultado el siguiente vector
ans =
3 4 5 6
si j es mayor que k da una matriz vaca como resultado.
.Dados los escalares j, k, e i la operacin :
j:i:k es lo mismo que generar el siguiente vector [j,j+i,j+2i, ...,k] .Por ejemplo j=3, i=2 y k =12 da como
resultado el siguiente vector
ans =
3 5 7 9 11
si ahora j=0, k=1 e i=0.1 la operacin j:i:k da como resultado el siguiente vector
ans=
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000
0.7000 0.8000 0.9000 1.0000
Nota: Tanto par la concatenacin vertical como horizontal existen funciones que se pueden ejecutar
desde la lnea de comandos . Las mismas son:
.horzcat(A,B,C...)
.vertcat (A,B,C...)
3.7. Operaciones con filas y columnas
El operador ( : ) es el utilizado para seleccionar filas , columnas y/o elementos de vectores, matrices y
arreglos de dimensiones mayores.
Utilizaremos la matriz
A=
1 2 3
4 5 6
7 8 9
para ejemplificar las siguientes operaciones:
La operacin A(:,j) indica la j-esima columna de A. Por ejemplo para j=2 en la matriz A:
ans =
2
5
8
La operacin A(i,:) indica la i-esima fila de A . Por ejemplo para i=1 en la matriz A:
ans =
1 2 3
La operacin A(:,:) es los mismo que rescribir A.
La operacin A(j:k) equivale a A(j), A(j+1),...,A(k) . Por ejemplo para la matriz A y j=1 y k=2 :
ans =
1 4
La operacin A(:,j:k) equivale a A(:,j), A(:,j+1),...,A(:,k): Para A , j=1 y k=2:
ans =
1 2
4 5
7 8
La operacin A(:,:,k) es para arreglos tri-dimensinales.
La operacin A(:) ordena todos los elementos de la matriz en una simple columna. Para A ser:
ans =
1
4
7
2
5
8
3
6
9
siguiendo la convencin de las operaciones anteriormente descritas se pueden eliminar filas o columnas
utilizando un par de corchetes vacos. Veamos un ejemplo:
Si queremos eliminar la segunda columna de A, podemos escribir:
A(:,2)=[] resultando en
A=
1 3
4 6
7 9
Lo mismo para las filas, en ese caso la sintaxis es A(2,:)=[], si se elimina un solo elemento de la
matriz da como resultado un error ya que la matriz deja de ser una matriz.
Columns 27 through 32
99 116 101 114 101 115
Tambin se puede pasar un arreglo de caracteres ASCII al formato de cadena de caracteres .Siguiendo
con el ejemplo anterior el siguiente comando
str=char(cadeascii)
da como resultado
str =
esto es una cadena de caracteres
Para comparar si dos cadenas de caracteres son iguales tenemos una funcin que se llama strcmp
el resultado de esta evaluacin ser verdadera o falsa. Por ejemplo :
cade=strcmp(str,string)
cade =
1
Tambin al igual que las matrices y vectores los arreglos de vectores se pueden concatenar, la funcin
que realiza esta tarea es strcat. Poe ejemplo:
strcat(str,string)
ans =
esto es una cadena de caracteresesto es una cadena de caracteres
Nota: La concatenacin de caracteres no agrega espacios en blanco por lo tanto cuando tenga que usar
esta funcin recuerde agregar espacios en blanco . Estos ltimos tambin se pueden agregar por
concatenacin
Por ultimo destacaremos dos funciones tiles en la evaluacin de caracteres. La funcin isletter
comprueba si un caracter pertenece al alfabeto o es otro caracter ASCII. Por ejemplo
isletter('\')
ans =
0
isletter('n')
ans =
1
La otra funcin es isspace que entrega como resultado un vector con valor cero donde el caracter no es
un espacio y valor uno cuando el caracter es un espacio. Por ejemplo:
isspace(str)
ans =
Columns 1 through 13
0 0 0 0 1 0
Columns 14 through 26
0 0 0 0 0 1
Columns 27 through 32
0 0 0 0 0 0
Ejercicios
1. Dados los vectores a=[1 2 3] y b=[1 2 3]' generar un vector c columna y un vector d fila
concatenando a y b.
2. Dadas la matrices A=[1 1 ; 1 1] y B=[2 2 ; 2 2] generar por concatenacin de las mismas la matriz
C=[1 1 2 2 ; 1 1 2 2; 2 2 1 1; 2 2 1 1].
3. Dada las matriz A=[1 2 ;3 4] y utilizando el operador traspuesta y el de concatenacin generar la
matriz B=[1 2 1 3; 3 4 2 4 ; 1 3 1 2; 2 4 3 4].
4. Dado el vector a=[1 2 3 4 5] , utilizado la potencia de arreglos (array) y concatenacin generar una
matriz C de dimensiones 5x4 cuyas columnas sean los nmeros del vector a elevados a la 1era, 2da,
3ra y 4ta potencia.
5. Dada la matriz A=[1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16] utilizando la notacin A(i,j) realizar la
suma de los elementos de la diagonal principal. Verificar el resultado con la funcin trace.
6. Para la matriz del ejercicio anterior eliminar la fila 2 y 3 utilizando el operador [] luego utilizando el
concatenacin y el operador ( : ) volverlas a agregar.
eq
ne
lt
gt
le
ge
- Equal
- Not equal
- Less than
- Greater than
- Less than or equal
- Greater than or equal
==
~=
<
>
<=
>=
Por ejemplo eq(A,B) es lo mismo que escribir A==B. Para obtener informacin de la sintaxis de esta
funciones simplemente escriba help seguido del nombre de la funcin desde la lnea de comandos.
4.2.Operadores Lgicos
Matlab tiene disponible tres operadores lgicos, & ,| y ~ . Cada operador lgico tiene un conjunto
especifico de reglas que determina el resultado de una expresin lgica.
Las operaciones que describen los smbolos anteriores son:
.& representa la operacin AND ,es decir el resultado es cierto si ambos operandos son lgicamente
cierto. En trminos numricos un operando es cierto si es distinto de cero. Por ejemplo la operacin
logia AND entre los dos vectores siguientes:
u = [1 0 2 3 0 5];
v = [5 6 1 0 0 7];
u&v
ans =
1 0 1 0 0 1
.| representa la operacin lgica OR , es decir el resultado es lgicamente cierto si uno de los operandos
es lgicamente cierto. El resultado ser falso ( 0 ) si ambos operandos son cero. Por ejemplo la
operacin OR con los vectores anteriores dar como resultado:
u|v
ans =
1 1 1 1 0 1
.~ representa la operacin Not (negacin) , niega el operando. Produce un resultado cierto si el
operando es falso y falso si el operando es cierto. Por ejemplo veamos la negacin del vector u:
~u
ans =
0 1 0 0 1 0
Los operadores lgicos al igual que los de relacin comparan los elementos correspondientes de arreglos
con iguales dimensiones. Para vectores y arreglos ambos operandos deben ser del mismo tamao al
menos que uno de ellos sea un escalar. Para este caso Matlab evala el escalar comparndolos con cada
uno de los elementos del arreglo. Donde la evaluacin resulte verdadera el resultado ser uno y donde
sea falsa resultara cero.
Adems de los smbolos para utilizar la operaciones lgicas Matlab provee las siguientes funciones que
pueden ser ejecutadas desde la lnea de comandos
and
- Logical AND
or
- Logical OR
not
- Logical NOT
Por ejemplo la negacin del vector u se puede escribir de la siguiente manera not(u) que es lo mismo
que ~u .
Aparte de los tres operadores lgicos bsicos Matlab tiene funciones lgicas especificas , como por
ejemplo:
.xor . Esta funcin realiza la operacin OR exclusiva entre los operandos, retorna verdadero (1) si uno
de los operandos es verdadero y el otro es falso. En trminos numricos retorna 1 si uno de los
operandos. Por ejemplo :
a = 1;
b = 1;
xor(a,b)
ans =
0
.all . Esta funcin retorna verdadero (1) si todos los elementos de un vector no son cero. En el caso de
matrices opera sobre cada columna de la misma
Por ejemplo:
A = [0 1 2;3 5 0]
A=
0 1 2
3 5 0
all(A)
ans =
0 1 0
.any . Retorna 1 si alguna elemento del argumento es verdadero o no cero. Como la funcin all opera
sobre las columnas de una matriz.
Por ejemplo:
v = [5 0 8];
any(v)
ans = 1
Otras funciones lgicas de Matlab son isnan, isinf y find. La primera (isnan) retorna un 1 si encuentra
un operando con valor NaNs, la segunda (isinf) retorna un 1 si el operando tiene valor Inf y por ltimo la
funcin find determina el ndice del elemento del arreglo o matriz que cumple una condicin logia dada.
Es muy til para crear mascaras y matrices de ndices. En la forma mas general esta funcin retorna un
vector de ndices. Este vector puede ser utilizado para indexar arreglos de cualquier tamao. Por
ejemplo:
A = magic(4)
da como resultado la siguiente matriz
A=
16
5
9
4
2
11
7
14
3 13
10 8
6 12
15 1
luego para generar un vector con los datos que necesitamos utilizamos i de la siguiente manera
resul=A(i)
resul =
0.6154 0.9218 0.1763 0.9355
Esta ltima operacin se conoce como el direccionamiento lgico .
if
a>1
a=b
elseif a>2
a=c
elseif a>3
a=d
else
a=z
end
La sentencia a=z se ejecutara si y solo si las anteriores expresiones evaluadas en if y los elseifs son
falsas.
2.Switch-case:
Switch ejecuta ciertas sentencias basado en el valor de una variable o expresin. Su forma bsica es :
switch expresin(escalar o cadena)
case valor1
sentencias
case valor2
sentencias
.
.
.
otherwise
sentencias
end
El funcionamiento este constructor es el siguiente: La palabra switch es seguida por una expresin o
variable a ser evaluada. Luego puede seguir cualquier numero de grupos de sentencias case. Cada grupo
consiste de la palabra case seguida de un valor con el cual se compara la expresin de la lnea switch.
Si la expresin es verdadera se ejecutan las sentencias luego del case y termina en end , caso contrario
pasa a la lnea del siguiente case si lo hubiera para su evaluacin. Si ninguna de la evaluaciones case es
verdadera todo el constructor switch-case no realiza nada. Al constructor se le puede agregar al final de
todos los case la palabra clave otherwise y luego sentencias a ejecutar, estas sentencias se ejecutar si y
solo si ninguna de las evaluaciones case es verdadera.
Switch trabaja comparando la expresin de entrada con cada valor case. Para expresiones numricas una
sentencia case es verdadera si (valor == expresin) es verdadera. Para el caso de cadenas de caracteres
una sentencia case es verdadera si strcmp(valor ==expresin) es verdadera, strcmp es una funcin
provista por Matlab que realiza la comparacin de cadenas de caracteres.
El siguiente ejemplo muestra el funcionamiento del constructor switch-case:
x='perro'
switch x
case 'dog'
disp('el perro es ingles')
case 'perro'
disp('el perro es espaol')
otherwise
disp('de donde es?')
end
Nota: si la expresin a evaluar en el case es una cadena de caracteres esta debe ir entre comillas para que
el constructor la entienda como tal. ver el ejemplo anterior.
Nota:A diferencia de la programacin en lenguaje C ,Matlab no ejecuta el siguiente case si el primero es
verdadero. Por eso no utiliza las sentencias break.
A su vez puede evaluar mltiples condiciones en una simple lnea encapsulando el case un arreglo.
Veamos el siguiente ejemplo:
switch var
case 1
disp('1')
case {2,3,4}
disp('2 or 3 or 4')
case 5
disp('5')
otherwise
disp('something else')
end
3.Lazos for
El lazo for ejecuta una sentencia o grupo de sentencias un predeterminado numero de veces.
Su sintaxis es
for index = start:increment:end
statements
end
El incremento predeterminado es uno . Se puede especificar cualquier incremento , incluyendo
incrementos negativos. Para ndices positivos la ejecucin finaliza cuando el valor del ndice excede el
valor final , para incrementos negativos la ejecucin termina cuando el ndice es menor que el valor
final.
Por ejemplo este lazo se ejecuta cinco veces
for i = 2:6
x(i) = 2*x(i-1);
end
Se pueden anidar mltiples lazos. Por ejemplo:
for i = 1:m
for j = 1:n
A(i,j) = 1/(i + j - 1);
end
end
Nota: Cuando anidan lazos debe existir un end por cada for. La ejecucin se puede acelerar
remplazando los lazos for con cdigo vectorizado. Vectorizando el cdigo de los archivos -m se
logra mayor velocidad de procesamiento. donde otros lenguajes usan lazos For o Do, Matlab
puede utilizar operaciones con vectores o matrices. Un simple ejemplo puede ser la creacin de
una tabla de logaritmos
x = .01;
for k = 1:1001
y(k) = log10(x);
x = x + .01;
% en esta lnea radica la mayor diferencia de procesamiento
end
Mientras que la versin vectorizada del mismo cdigo se vera de la siguiente manera
x = .01:.01:10;
y = log10(x);
Otro ejemplo seria la generacin de una matriz cuyos elementos estn determinados por la ecuacion
A(j,k)= sin(j)*cos(k)
Para generar esta matriz mediante lazos escribimos el siguiente codigo.
A=zeros(10) %genera una ,matriz vacia de 10 x 10
for j =1:10
for k=1:10
A(j,k)=sin(j)*cos(k)
end
end
La versin vectorizada de este cdigo seria:
k=1:10;
A=sin(k) ' *cos(K)
Como recomendacin entonces, cuando la velocidad de procesamiento de datos es importante se
deberan vectorizar los algoritmos para evitar lazos for.
Una propiedad muy importante de Matlab es que se pueden utilizar arreglos como ndices de lazos for.
Por ejemplo si tenemos un arreglo A de m x n . La sentencia
for i = A
sentencia
end
hace i igual al vector A(:,k) . Para la primera iteracin del lazo k es igual a 1; para la segunda k es igual
a 2 y as seguir hasta que k iguale a n. Es decir que lazo itera un numero de veces igual a la cantidad de
columnas de A . Para cada iteracin i es un vector conteniendo las columnas de A.
Por ejemplo el siguiente constructor de lazo
A=[1 2 3; 4 5 6; 7 8 9]
for i=A
x=i
end
da como resultado
x=
1
4
7
x=
2
5
8
x=
3
6
9
4.Lazos while
El lazo while ejecuta una sentencia o grupos de sentencias repetidamente mientras la expresin de
control sea verdadera. Su sintaxis es
while expression
statements
end
Si la expresin evala una matriz todos los elementos de esta deben ser cero para que la ejecucin
contine, un solo elemento de la misma que sea falso detiene la ejecucin. Para convertir una matriz a
un valor escalar que sirva de control utilizar las funciones any y all.
En general los lazos while son utilizados cuando el programador no conoce la cantidad de repeticiones a
priori.
Por ejemplo necesitamos halla el numero entero n para el cual n! (n factorial) es un nmero de 100
dgitos
n = 1;
while prod(1:n) < 1e100
n = n + 1;
end
Se puede salir de un lazo while en cualquier momento utilizando la sentencia break.
5.Continue
La sentencia continue pasa el control a la prxima iteracin de lazo for o while en el cual aparezca.
Salteando cualquier sentencia remanente en el cuerpo del lazo. Para el caso de lazos anidados pasa el
control a la prxima iteracin del lazo for o while al cual pertenece.
El siguiente ejemplo la sentencia continue pasa el control al lazo while si se cumple la expresin del if.
fid = fopen('magic.m','r');
count = 0;
while ~feof(fid)
line = fgetl(fid);
if isempty(line) | strncmp(line,'%',1)
continue
end
count = count + 1;
end
disp(sprintf('%d lines',count));
6.Break
La sentencia break termina la ejecucin de un lazo for o while. Cuando una sentencia break es
encontrada, la ejecucin continua con la prxima instruccin fuera del lazo. En el caso de lazos anidados
la sentencia break sale del lazo mas interno y continua la ejecucin del lazo que lo contiene
El siguiente ejemplo muestra un lazo while que lee el contenido de un archivo fft.m y lo pasa a un
arreglo . La sentencia break es utilizada para salir del lazo while cuando la primer lnea vaca sea
encontrada.
fid = fopen('fft.m','r');
s = '';
while ~feof(fid)
line = fgetl(fid);
if isempty(line)
break
end
s = strvcat(s,line);
end
disp(s)
7. Try -catch
La forma general de una sentencia try-catch es de la siguiente manera:
try,
statement,
...,
statement,
catch,
statement,
...,
statement,
end
en esta secuencia las instrucciones entre la sentencia try y catch se ejecutan hasta que ocurre un error .
Una vez que ocurre esto se ejecutan las sentencias que le siguen al catch. Matlab provee la funcin
lasterr que le permite ver la causa del error . si un error ocurre entre la sentencia catch y end Matlab
termina la ejecucin .
8.Return
Return termina la ejecucin en curso de comandos y devuelve el control la funcin que lo invoco o al
teclado. Normalmente una funcin realiza sus tareas y devuelve el control una vez que alcanza la
sentencia end. se pude intercalar en cualquier momento una sentencia return para devolver el control de
quien llamo a la funcin
4.5. Programacion en Matlab
La programacin en Matlab se realiza de dos formas bsicas mediante los archivos M. Una forma de
programacin se llama script es la mas bsica y consiste en generar una secuencia de comandos ,a
ejecutar en forma secuencial, mediante un editor de texto y luego grabarla en formato .m .La otra forma
se llama function o m-function y tambien es un secuencia de comandos generada con un editor de texto
pero esta ultima acepta argumentos de entrada y devuelve resultados.
Entonces sabemos que hay dos tipos de archivos M el script M-File y el Function M-File .
script
No acepta argumentos de entrada o retorna
argumentos de salida
Opera sobre los datos del workspace
til para realizar una serie de pasos de ejecucin
que se necesitan realizar repetidamente
function
Puede aceptar argumentos de entrada y retornar
argumentos de salida
Las variables internas son locales a la funcin
Util para extender y ampliar su aplicacin
mediante el lenguaje Matlab
4.5.1.Que es un archivo M?
En el siguiente cdigo vemos las partes bsicas de un archivo M tipo funcin de manera de
4.5.2. Script.
Es la forma mas simple de programacin en Matlab ya que no tiene argumentos de entrada o de salida.
Es til para automatizar tareas repetitivas de comandos . Los scripts operan sobre datos existentes en el
workspace o tambin pueden crear las variables sobre la cual operan. Cualquier variable que un script
crea queda remanente en el workspace despus que el script a finalizado de manera que pueden ser
utilizados para posteriores procesamientos.
Veamos un ejemplo simple de un script:
Este calcula el rho para varias funciones trigonometricas y luego crea una serie de grficos polares
% An M-file script to produce % Comment lines
% "flower petal" plots
theta = -pi:0.01:pi;
% Computations
rho(1,:) = 2*sin(5*theta).^2;
rho(2,:) = cos(10*theta).^3;
rho(3,:) = sin(theta).^2;
rho(4,:) = 5*cos(3.5*theta).^3;
for i = 1:4
polar(theta,rho(i,:))
% Graphics output
pause
end
Para convertir este archivo de texto en un script de matlab lo debemos grabar con extensin .m , por
ejemplo elegimos salvarlo como petal.m este archivo ahora es un script. Luego si desde la lnea de
comando ejecutamos el comando petal Matlab ejecutara las sentencias dentro del script.
Una vez que termina la ejecucin las variables (i, theta y rho) permanecen en el workspace. Para ver
estas ultima se abre la ventana del workspace o se escribe el comando whos en la lnea de comando.
4.5.3.Funcin
Como ya dijimos la funciones se diferencian de los scripts en que esta pueden aceptar y entregar
argumentos y opera sobre variables dentro de su propio workspace separado del workspace que se
accede desde la lnea de comandos. Veremos ahora en mas detalle como esta conformada una funcin.
La lnea de definicin de funcin le informa a matlab que el archivo M abierto contiene una funcin y
especifica la secuencia de llamada de los argumentos de la funcin.
Todas la funciones de Matlab tienen una lnea de definicin de funcin que sigue el siguiente patrn.
Si la funcin tiene mltiples valores de salida , se deben encerrar la lista de argumentos entre corchetes.
Los argumentos de entrada deben ser encerrados entre parntesis. Se deben utilizar comas para separar
los argumentos. Veamos un ejemplo:
function [x,y,z] = sphere(theta,phi,rho)
Si no hubiera salida dejamos el argumento sin especificar o en blanco encerrndolo entre []. Por ejemplo
veamos las dos siguientes lneas:
function printresults(x)
function [] = printresults(x)
Las variables que se pasan a la funcin no necesariamente tienen que tener el mismo nombre que en la
definicin de la funcin.
Cuando se ejecuta el comando lookfor y en nombre de la funcin matlab muestra la lnea H1 de la
funcin. Si ejecuta help aparecer la lnea H1 y todas las otras lneas de comentarios (precedidas del
signo %) que estn entre la lnea H1 y la primer lnea de cdigo. Las lneas de comentario que estn
dentro del cuerpo de la funcin no sern mostradas por el comando help.
El cuerpo de la funcin contiene todo el cdigo de la funcin Matlab . Puede consistir de llamadas a
funciones, constructores ,asignaciones, clculos , comentarios y lneas en blanco.
Por ejemplo el siguiente es el cuerpo de una funcin que calcula el promedio de un vector.
[m,n] = size(x);
if (~((m == 1) | (n == 1)) | (m == 1 & n == 1)) % Flow control
error('Input must be a vector') % Error message display
end
y = sum(x)/length(x);
% Computation and assignment
Los nombres que se les pueden asignar a las funciones en Matlab tienen las mismas restricciones que los
nombres de la variables. Deben comenzar con una letra y pueden seguir con todo tipo de smbolos.
El nombre del archivo de texto que contiene la funcin de Matlab debe ser el nombre de la funcin
seguido de la extensin .m . Por ejemplo si la funcin anterior se llama average el archivo donde se
guarda es average.m. Si el nombre del archivo y el de la definicin de la funcin son diferentes matlab
ignora este ultimo y utiliza en la lnea de comandos del nombre de archivo.
De todos modos aunque el nombre de la funcin y del archivo que la contiene no necesariamente tienen
que ser el mismo se recomienda usar el mismo para ambos.
privado, un directorio accesible solo accesible a archivos M que estn en el directorio por encima de
este.
Verifica si el nombre de la funcin esta en la senda de bsqueda del Matlab. Matlab utiliza el primer
archivo con el nombre especificado.
Si se duplican nombres de funciones Matlab ejecuta la primera que encuentra.
Cuando se llama una funcin ya sea desde la lnea de comandos o desde otro archivo M, Matlab
convierte la funcin en un seudo cdigo y lo mantiene en memoria hasta que se ejecute un comando de
clear function o se salga de matlab. Esto evita tener que convertir una funcin cada vez que se llame.
Se puede utilizar la funcion clear de la siguiente manera para quitar funciones del workspace
Sintaxis
clear function_name
Quita una funcin especifica de workspace
clear functions
Quita todas las funciones m compiladas
clear all
Quita todas las variables y funciones del workspaces
Desde la perspectiva del programador Matlab aparece como que pasa todos los argumentos de las
funciones por valor. Sin embargo actualmente para hacer mas eficiente el uso de memoria Matlab solo
pasa por valor aquellos argumentos que la funcin modifica. Si la funciona no modifica el argumento y
solo lo usa para computacin Matlab pasa el argumento por referencia
Workspaces de las funciones. Cada funcin tiene un rea de memoria separada del workspace base de
Matlab. Este rea es llamada el funcin workspace con cada funcion teniendo su propio contexto de
workspace
Las nicas variables a las que se puede acceder en Matlab son aquellas que se encuentren
dentro del contexto que las llamo. Sin embargo se pueden definir a las variables como globales
permitiendo que estas puedan ser obtenidas de otros workspaces.
Verificacion del numero de argumentos de una funcion. Las funciones nargin y nargout permiten
determinar el numero de argumentos de entrada y salida respectivamente de una funcin. Entonces es
muy til para ejecutar programas que realizan diferentes tares de acuerdo a la cantidad de argumento de
entrada o salida de un funcin. Por ejemplo veamos la siguiente funcion:
function c = testarg1(a,b)
if (nargin == 1)
c = a.^2;
elseif (nargin == 2)
c = a + b;
end
Si el argumento de entrada es uno solo lo eleva al cuadrado, pero si el argumento es doble los suma
Nota: Existen otro tipo de variables en Matlaba llamadas variables persistentes. Este tipo de variable no
cambian de valor de una llamada de una funciona otra. Son utilizadas solamente entre funciones y se
mantienen en memoria hasta que se ejecute un comando clear. Matlab provee funciones para evitar que
las variables sen borradas del workspace, estas son mlock, munlock y mislocked.
4.7. Tipos de Datos en Matlab
En Matlab hay 14 tipos de datos . Cada uno de estos tipos de datos tiene la forma de un arreglo. el
arreglo tiene la forma mnima de 0x0 y puede crecer hasta cualquier tamao. Los arreglos de dos
dimensiones son llamados generalmente matrices.
Todos los tipos de datos fundamentales son mostrados en letra minscula en el siguiente diagrama.
Size
1x13
Bytes Class
26 char array
Se puede ver que una cadena de caracteres le asigna 2 bytes por caracteres de almacenamiento interno.
Para verificar si una funcin es de tipo char utilizamos la funcin class de la siguiente manera:
class(name)
ans =
char
Cuando se crean arreglos de caracteres bidimensionales, debemos asegurarnos que cada columna tenga
el mismo largo. El siguiente ejemplo seria una entrada legal.
name = ['Thomas R. Lee' ; 'Sr. Developer']
name =
Thomas R. Lee
Sr. Developer
Cuando se crean arreglo bidimensionales de caracteres con diferentes largos se pueden rellenar los mas
cortos con espacio en blanco para forzar a las filas tener el mismo largo.
Una forma simple de generar cadenas de caracteres es utilizando la funcin char , esta automticamente
realiza la complementacin de las cadenas con espacios en blanco .Por ejemplo si nuestra cadena fuera:
name = ['Thomas R. Lee '; 'Senior Developer'];
Para generar automticamente dos cadenas del mismo largo escribimos la siguiente linea de comando:
name = char('Thomas R. Lee','Senior Developer')
Si ejecutamos la funcin whos veremos que ambas cadenas tienen el mismo largo
name
2x16
64 char array.
.arreglos de celdas de caracteres (strings). A menudo es conveniente guardar los grupos de cadenas en
arreglos
de celdas en lugar de arreglos de caracteres estndar . Esto evita el engorros trabajo de tener que
convertir todas las cadenas al mismo largo . Evitando as un uso ineficiente de memoria . Matlab provee
la funcin cellstr que convierte un arreglo de caracteres en un arreglo de celdas. Veamos el siguiente
ejemplo:
data = ['Allison Jones';'Development ';'Phoenix
'];
Como podemos ver cada cadena esta acomodada en largo con espacios en blanco, luego de ejecutar
cellstr el resultado que obtenemos es el siguiente:
celldata = cellstr(data)
celldata =
'Allison Jones'
'Development'
'Phoenix'
La funcin iscellstr determina si el argumento es un arreglo de celdas de caracteres. Retorna un uno en
el caso de ser un arreglo de celdas
iscellstr(celldata)
ans =
1
Si queremos verificar el largo de un elemento de arreglo de celdas utilizamos la misma funcin length
que utilizamos para vectores. Por ejemplo :
length(celldata{3})
ans =
7
.Arreglo de celdas. Un arreglo de celdas es un arreglo Matlab cuyas celdas son contenedores de datos
que pueden soportar otro tipo de datos en Matlab. Por ejemplo un arreglo de celdas puede contener una
matriz de nmeros reales, un arreglo de caracteres y un vector de valores complejos. Veamos la
siguiente grafica para clarificar los conceptos.
El ejemplo anterior se refiere a un arreglo de celdas de dos dimensiones. Tambin estos pueden ser
multidimensionales
Un arreglo de celdas se puede crear de dos formas diferentes:
1).Usando sentencias de asignacin
2).Direccionando las celdas utilizando funciones especificas y cargando datos en las mismas.
1a)En el primer caso se le asignan datos a las celdas de dos formas diferentes el primero es el indexado
de
celda . Se declara la celda a la que se le asignara el valor utilizando. Luego el valor es asignado
encerrando el contenido que ira a la celda entre {} .Por ejemplo para crea un arreglo de 2x2
A(1,1) = {[1 4 3; 0 5 8; 7 2 9]};
A(1,2) = {'Anne Smith'};
A(2,1) = {3+7i};
A(2,2) = {-pi:pi/10:pi};
La respuesta a un comando whos ser:
whos A
Name
Size
Bytes Class
A
2x2
644 cell array
Grand total is 45 elements using 644 bytes
1b).En el segundo caso se encierra el numero de celda entre {} y en el lado derecho de la igualdad se
especifica el contenido de la celda en la forma normal en que el dato es utilizado en la ventana de
comandos. Este segundo mtodo se llama indexado de contenido. Veamos un ejemplo de la sintaxis
utilizada
A{1,1} = [1 4 3; 0 5 8; 7 2 9];
A{1,2} = 'Anne Smith';
A{2,1} = 3+7i;
A{2,2} = -pi:pi/10:pi;
La respuesta a un comando whos ser la misma que para el caso anterior.
Si se asigna datos a una celda que esta fuera de las dimensiones originales del arreglo Matlab
automticamente expande para incluir la celda que el usuario especifica. Aquellas celdas adicionales que
se agreguen como consecuencia de lo anterior quedaran vacas. Veamos un ejemplo con nuestro arreglo
A de 2x2, si realizamos la siguiente asignacin
A(3,3) = {5};
El arreglo de celdas pasa a tener la siguiente configuracin que muestra la figura
Los {} son los constructores de celdas , tal como [] los son para los arreglos numricos . Por lo tanto
estos se comportan de modo similar a los anteriores , por lo tanto podemos tambin inicicalizar un
arreglo de celdas de la siguiente manera
C = {[1 2], [3 4]; [5 6], [7 8]};
En este caso dentro de los{} se utilizan comas o espacios para separar por columna y el ; para separar
por fila por lo tanto la declaracin anterior dara como resultado el arreglo de la siguiente figura:
2) El segundo mtodo para declarar un arreglo de celdas es utilizando la funcin cell .Esta funcin
permite crear arreglos vacos para luego ingresarle los valores. Por ejemplo :
B = cell(2,3);
Crea en arreglo vacio de dimensiones 2x2, luego mediante el mtodo de asignacin de celdas llenamos
cada una individualmente.
B(1,3) = {1:3};
Se pueden obtener los datos del arreglo de celdas mediante dos metodos:
.Accediendo al contenido de las celdas usando indexado de contenido
.Accediendo a un subconjunto de celdas utilizando indexado de cela
En el primer caso consideremos por ejemplo el siguiente arreglo de celdas N de dimensiones 2x2
N{1,1} = [1 2; 4 5];
N{1,2} = 'Name';
N{2,1} = 2-4i;
N{2,2} = 7;
mediante este tipo de acceso especificamos la variable que va a recibir el contenido de la celda y en el
lado derecho de la igualdad encerramos entre {} la celda de la cual queremos obtener el valor. Por
ejemplo para el arreglo N
c = N{1,2}
c=
Name
esto indica que se esta asignando el contenido de la celda y no la celda en si misma.
En el segundo caso , el indexado de celdas, se utiliza para asignar un conjunto de celdas a otras variables
y de este modo crear un nuevo arreglo. Se debe utilizar el operador (:) para acceder a un subconjunto de
celdas en un arreglo . Por ejemplo veamos la siguiente figura:
Para borrar celdas se utiliza el mismo mecanismo que para borrar columnas o filas de una matriz
excepto que aqu estamos eliminando celda completas. entonces para borrar una celda se direcciona la
misma y se le asigna el valor nulo mediante []. Por ejemplo veamos como es la sintaxis:
A(cell_subscripts) = []
.Estructuras. Las estructuras en Matlab son arreglos formados por contenedores de datos llamados
campos. El campo de una estructura puede contener cualquier tipo de dato. Por ejemplo un campo puede
contener un nombre, otro un numero y otro puede contener una matriz con los resultados de exmenes
mdicos. Las estructuras tambin pueden ser multidimensionales. Veamos la figura para aclarar este
concepto de estructura
contiene mas de un elemento , Matlab no muestra el contenido individual de los campos cuando se
escribe el nombre de la estructura en la lnea de comandos .en su lugar aparece un sumario con
informacin del arreglo de estructuras. Por ejemplo para nuestro caso escribir patient
patient
da como resultado
patient =
1x2 struct array with fields:
name
billing
test
Se puede utilizar la funcin fieldnames para obtener informacin de los campos que conforman una
estructura
A medida que el arreglo crece Matlab llena los campos que no se especifique con matrices vacas de
manera que : Todas las estructuras dentro de un arreglo tienen la misma dimensin y todos los campos
tienen el mismo nombre de campo.
Por ejemplo si ingresamos un nuevo paciente con los siguientes datos
patient(3).name = 'Alan Johnson'
es decir se ingresa solamente el nombre el arreglo se expande de la siguiente manera: queda con un
tamao [1 3] con los campo test y billing vacion para el paciente 3
2)Tambin se puede generar un arreglo de estructuras utilizando la funcin struct provista por Matlab.
La sintaxis basica es
str_array = struct('field1',val1,'field2',val2, ...)
Donde 'field' indica el nombre que recibir el campo y 'val' el correspondiente valor que se le asignara.
Un campo puede tener un valor simple o puede ser cualquier tipo de dato soportado por Matlab , por
ejemplo un matriz
Se pueden utilizar diferentes mtodos para generar arreglos de estructuras. Estos difieren en la forma en
que los campos de la estructura son inicializados.
Podemos acceder a un subconjunto de arreglo utilizando subindices .Por ejemplo creamos un arreglo
llamado mypatients de modo que contenga los pacientes 1 y 2 deal arreglo anterior
mypatients = patient(1:2)
1x2 struct array with fields:
name
billing
test
Entonces el primer paciente de mi estructura es el mismo que el arreglo original. Por lo tanto si
ejecutamos
mypatients(1)
ans =
name: 'John Doe'
billing: 127
test: [3x3 double]
Para acceder a un campo en particular de esta estructura se debe escribir el nombre de la estructura
seguido de un punto (.) y luego el nombre del campo que se quiere ver. Por ejemplo:
str = patient(2).name
str =
Ann Lane
Para acceder a determinados elementos dentro de un campo utilizamos el siguiente indexado. Dado que
el campo test es una matriz accederemos a un valor de la misma . Por ejemplo:
test2b = patient(3).test(2,2)
test2b =
153
El mismo mtodo de indexado se utiliza para asignar valores a los campos de las estructuras
patient(3).test(2,2) = 7;
Otro aspecto interesante de estos arreglos en Matlab es que se pueden extraer los valores de un campo de
varias estructuras. Por ejemplo la siguiente lnea crea un vector de 1x3 conteniendo los campos billing
de las tres estructuras que componen el arreglo.
bills = [patient.billing]
bills =
127.0000 28.5000 504.7000
Tambin se puede crear un arreglo que contenga los campos test de los do primeros pacientes. por
ejemplo:
tests = {patient(1:2).test}
tests =
[3x3 double]
[3x3 double]
Nota: Se puede agregar un campo nuevo a la estructura en cualquier momento. Por ejemplo la siguiente
instruccin agrega un nuevo campo a patient
patient(2).ssn = '000-00-0000';
Otra funcin de utilidad es rmfield que elimina un campo de una estructura. Por ejemplo la siguiente
instruccin
patient = rmfield(patient,'name');
elimina el campo name del arreglo de estructuras patient.
Ejercicios
1) Escriba un funcin Matlab [int,frac]=infr(x) que tome un arreglo x de nmeros no negativos y
retorne los arreglos int y frac correspondientes a la parte entera y la parte fraccional respectivamente
de todos los nmeros de x.
2). Dado un arreglo X y un entero positivo n crear un arreglo A cuyos elementos sean los elementos de
arreglo X repetidos n veces. Realizar una funcin A=repli(X,n) que realice esta operacin.
3).Escriba una funcin [nonz,media]=matriz(A) que tome los valores distintos de cero de la matriz a y
los entregue como resultado en un vector nonz y que calcule el valor medio de dicho vector y lo
entregue en el escalar media.
4.)Escriba una funcin dms(x) que tome el numero x no negativo que representa un Angulo en grados y
los traduzca y presente en pantalla en formato grados/min/seg
5). Escriba una funcin t=allodd(A) que tome un arreglo A y retorne 1 si todos sus valores son impares.
Utilice la funcin rem para verificar la paridad.
6). Dados dos arreglos A y B no necesariamente de la misma dimensin escribir una funcin Matlab que
genere un tercer arreglo intercalando los dos anteriores. Por ejemplo si A=[1 2 3] y B=[1 2 3] C sera
C=[1 1 2 2 3 3]
Descripcin
Grafica de dos dimensiones con escalas lineales
en ambos ejes
Grafica en tres dimensiones con escala lineal en
ambos ejes
Grafica con escala logartmica en ambos ejes
Grafica con el eje x en escala logartmica y eje y
escala lineal
Grafica con el eje y en escala logartmica y eje x
en escala lineal
Grafica con etiquetas en el lado derecho e
izquierdo del eje y
Se pueden graficar varias funciones en una sola llamada a la funcin plot .Matlab automticamente
cambia de color cada una de las graficas correspondientes a distintas funciones. Por ejemplo el siguiente
enunciado grafica tres funciones seno de y versus tiempo t. Como en el ejemplo anterior el vector t es
generado de la siguiente manera:
t = 0:pi/100:2*pi;
y2 = sin(t-0.25);
y3 = sin(t-0.5);
plot(t,y,t,y2,t,y3)
El resultado ser la siguiente grafica:
Tambin es posible, adems de especificar el estilo de lnea, el color de las mismas y el tipo de marca
para identificar el dato. La sintaxis es la siguiente:
plot(x,y,'color_style_marker')
color_style_marker es una cadena de caracteres que puede tener desde uno a cuatro caracteres
encerrados en comillas simples identificando estos el color, el tipo de lneas y el tipo de marca.
Las letras que identifican los colores son 'c', 'm', 'y', 'r', 'g', 'b', 'w', y 'k' que corresponde al cyan ,
magenta,yellow,red, green , blue, white y black.
Los caracteres utilizados para determinar los tipos estilos de lneas son: '-'para slida, '--' para cortada,
':' para punteado, '-.'para cortado y punteado a la vez y 'none' sin lnea.
Los marcadores son de dos clases: comunes '+' , 'o' , '*' y los tipo lleno , 's' para un cuadrado, 'd ' para un
diamante, ' ^' para un triangulo , 'v ' un triangulo hacia abajo , '>' triangulo derecho, '< ' triangulo
izquierdo , 'p' una estrelle de cinco puntas , 'h' una estrella de seis puntas y none para indicar ninguna
marca .
Adems del color y tipo de lnea y marcador Matlab tambin permite controlar el ancho de la lnea asi
como tambien el tamao, color de fondo y color de borde del marcador.
La manera de especificar estas caractersticas es nuevamente a travs del argumento de la funcin plot.
Las palabras claves (strings) que identifican las propiedades a modificar son las siguientes:
LineWidth - especifica el ancho de la lnea en unidades de puntos
MarkerEdgeColor - especifica el color del marcador o el color del borde para marcadores llenos
( circulo, cuadrado, diamante, pentagrama , hexagrama y los cuatro tipos de tringulos)
MarkerFaceColor - especifica el color de relleno para marcadores llenos.
MarkerSize - especifica el tamao del marcador en unidades de punto
Por ejemplo:
x = -pi:pi/10:pi;
y = tan(sin(x)) - sin(tan(x));
plot(x,y,'--rs','LineWidth',2,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','g',...
'MarkerSize',10)
Produce un grafico con las siguientes caractersticas:
'--rs' indica lnea cortada color roja con marcadores cuadrado
'LineWidth',2 indica una lnea de ancho equivalente a dos puntos
'MarkerEdgeColor','k' indica el borde de los marcadores color negro
'MarkerFaceColor','g' el fondo de los marcadores es rellenado color verde
'MarkerSize',10 el tamao de los marcadores es de 10 puntos
x = 0:pi/15:4*pi;
y = exp(2*cos(x));
plot(x,y,'r+')
Tambin se pueden graficar marcas y las lneas continuas a la vez, el siguiente cdigo realiza esto
agregando la definicin de lnea continua en el argumento de la funcin plot.
x = 0:pi/15:4*pi;
y = exp(2*cos(x));
plot(x,y,'-r',x,y,'ok')
La funcin plot tambin permite graficar una matriz versus un vector. Los argumentos entonces se
ingresan de la siguiente manera , plot(x,Y) . Si los argumentos de la funcin son dos matrices grafica las
columnas de una matriz versus las columnas de la otra.
Se puede utilizar la funcin plotyy para aplicar escalas logartmica y lineal para comparar dos conjuntos
de datos que tengan diferentes rangos de valores.
Por ejemplo:
t = 0:900; A = 1000; a = 0.005; b = 0.005;
z1 = A*exp(-a*t);
z2 = sin(b*t);
[haxes,hline1,hline2] = plotyy(t,z1,t,z2,'semilogy','plot');
Este ejemplo guarda los punteros de lnea y ejes para luego modificarlos de la siguiente manera:
Primero: etiquetamos el eje y izquierdo de la siguiente manera
axes(haxes(1))
ylabel('Semilog Plot')
luego etiquetamos el segundo eje
axes(haxes(2))
ylabel('Linear Plot')
En estas dos ultimas funciones la funcin axes opera sobre el eje que apunta el vector haxes
Luego de modo similar trabajamos sobre los estilos de lnea, modificaremos para este ejemplo la grafica
cuyo puntero a la grafica es hline2
set(hline2,'LineStyle','--')
La grafica resultante es la siguiente:
.axes: es una funcin de bajo nivel para crear objetos grficos 'ejes'
axes crea un nuevo objeto 'eje' en la figura corriente usando valores predeterminados
axes('PropertyName',PropertyValue,...) crea un objeto 'eje' con los valores especificados en
la propiedad especificada en el argumento de la funcin. Aquella propiedad que no se
especifique Matlab le asigna el valor predeterminado.
h = axes(...),retorna un manejador h del objeto 'eje' creado.
axes(h) convierte los ejes manejados por h en los ejes corrientes.
.get: esta funcin se utiliza para obtener las propiedades de un objeto.
get(h) retorna todas las propiedades y sus valores corrientes del objeto identificado por h
get(h,'Property name') retorna el valor de la propiedad pasada en el argumento del objeto
apuntado por h.
a=get(h) retorna una estructura cuyos nombres de campo son los nombres de las propiedades
del objeto apuntado por h. Si no fuera especificado el argumento de salida Matlab muestra los
resultados en pantalla.
.set: configura las propiedadeas de un objeto.
set(H,'PropertyName',PropertyValue,...)configura lo propiedad especificada en el argumento
con el valor pasado en el argumento.
set(H,a) configura una propiedad determinada del objeto identificado por H. a es un arreglo
de estructuras cuyos campos son los nombres de las propiedades del objeto.
set(H,pn,pv,...) configura las propiedades especificadas en el arreglo pn con los valores
determinados por el arreglo pv
.cga: obtiene el puntero a los ejes corrientes.
h=cga retorna el puntero a los ejes corrientes de la figura corriente. Si no existieran los eje
Matlab los crea.
Vale aclarar que estas ultimas funciones trabajan en conjunto con gcf y cgo Get Current Figure
Get Current Objet que son las encargadas de obtener el puntero al objeto deseado. Veamos el
siguiente ejemplo para entender el uso de los punteros a los objetos y los manejos de las
propiedades.
c=randn(1,10)
crea un vector aleatorio
plot(c)
grafica el vector
h=gcf
obtiene un puntero a la figura corriente
Las sentencias anteriores permiten acceder a las propiedades de la figura propiamente dicha. Ahora
con el comando gca podemos acceder y modificar las propiedades de los ejes corrientes usando esta
funcin del mismo modo que gcf. Siguiendo con el ejemplo anterior ejecutaremos las siguientes
sentencias
h=gca
obtenemos un puntero a los ejes corrientes
set(h,'xgrid','on','ygrid','on','linewidth',6) modificamos las propiedades de los ejes
set(get(h,'XLabel'),'String','Values of X') esta linea agrega texto a la etiqueta x
Si ahora quisiramos cambiar los valores ya sea de la escala x o y (2D) de manera de representar
una distribucin mas adecuada de los valores de la escala lo podemos realizar de la siguiente
manera:
Se puede cambiar a trabes de las propiedades de los ejes llamadas XTick e YTick. Esta define los
valores de la escala ingresndolos como un vector de valores creciente e equidistantes.
Por ejemplo en la grafica anterior sin cambiar en la escala que estamos trabajando podemos cambiar
la distribucin de la escala de la siguiente forma:
set(gca,'ytick',[2 2.1 2.2 2.3 2.4 2.5])
{Nota: cga es la funcin que accede a la propiedad 'ytick' de los 'current axes'}
la grafica se reconfigurara de la siguiente manera
Ejemplo: La siguiente grafica muestra un ciclo de la funcin seno. Las siguientes sentencias nos
permiten ingresar en la grafica los valores significativos en el eje x
x = -pi:.1:pi;
y = sin(x);
plot(x,y)
set(gca,'XTick',-pi:pi/2:pi)
set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'})
Las siguientes funciones nos permiten ingresar una flecha que indica un valor
determinado en la curva
text(-pi/4,sin(-pi/4),'\leftarrow sin(-\pi\div4)',...
'HorizontalAlignment','left')
1)Usando la funcin title desde la lnea de comandos. Este comando permite ingresar el texto del
ttulo en el mismo momento que se crea el grafico
Por ejemplo para la siguiente figura
title('Lotka-Volterra Predator-Prey Population Model'),...
'FontWeight','bold')
5.4.2.Legendas
Las legendas identificas cada conjunto de datos presentados en una grafica. En la legenda Matlab
incluye una del tipo de lnea o marcador que representa el dato. Matlab tambin incluye etiquetas de
texto para identificar cada conjunto de datos.
Matlab posiciona automticamente el texto de las etiquetas. Todo carcter que sea precedido de \ es
interpretado como texto, refirindonos al ejemplo anterior \pi no coloca el valor numrico de pi sino
su representacin en caracter especial.
2)La otra forma de ingresar una anotacin de texto es desde la lnea de comandos con la funcin text.
Esta funcin ingresa el texto y la posicin del mismo en la grafica de acuerdo a las valores que se le
hallan pasado en su argumento. Por ejemplo:
Tambin se puede indicar que el texto se ubique en un valor especifico de la grafica, (un valor de la
text(pi,sin(pi),'\leftarrowsin(t) = 0',...
'FontSize',16)
text(5*pi/4,sin(5*pi/4),'sin(t) = -.707\rightarrow',...
'HorizontalAlignment','right',...
'FontSize',16)
Las siguientes lneas cumplen similares funciones, con lo cual la grafica quedara de la siguiente
manera:
Una propiedad interesante de Matlab es que permite ingresar en el campo de texto. Por ejemplo cada
fila del arreglo de caracteres Personaldata contiene informacin acerca de una persona.
PersonalData = ['Jack Straw ';'489 Main St.';'Wichita KN '];
Para poder mostrar estos datos como anotaciones de texto lo hacemos indexando el arreglo de la
siguiente manera:
text(x1,y1,['Name: ',PersonalData(1,:)])
text(x2,y2,['Address: ',PersonalData(2,:)])
text(x3,y3,['City and State: ',PersonalData(3,:)])
Se puede tambin utilizar una variable numrica y mediante la funcin num2str convertirla a texto
para luego agregarla en la anotacin. Por ejemplo:
x = 21;
['Today is the ',num2str(x),'st day.']
concatenamos la cadena de caracteres
Today is the 21st day.
resultado de la concatenacin
text(xcoord,ycoord,['Today is the ',num2str(x),'st day.']) se utiliza la variable para hacer una
anotacin.
5.4.6.Estadstica de la Grafica
Dentro del men Tools (Herramientas) Matlab tiene un opcin denominada Data Statistics, la misma
es una herramienta que permite agregar la grafica de valores estadsticos (media, desvi estndar,
etc) del dato seleccionado. Por ejemplo la siguiente grafica muestra los datos de crecimiento de la
poblacin en un periodo de tiempo determinado:
En color verde en esta grafica puede verse el valor medio de los datos representados por las cruces
azules, este valor medio se agrego a la representacin seleccionando las casilla del siguiente cuadro
de dialogo. Note que se pueden seleccionar estos valores estadsticos con respecto a ambos ejes, y y
x.
2)Exportacin.
La exportacin de figuras se utiliza para grabar la figura en algn formato predeterminado para
luego poder importarla desde algn otro programa, lo mas comn para ser utilizadas en un editor de
texto.
.Menu Export: Para exportar una figura a alguno de los formatos estndar de la industria
seleccionamos el men file de la figura y elegimos Export lo cual abre el cuadro de dialogo Export ,
luego usamos el botn Save para guardar grafico en el formato seleccionado en el cuadro Guardar
Como.
Los formatos mas comunes de exportacin son: BMP (bitmap), EMF( Enhaced Metafile),
EPS(Postcript), TIFF, JPG, etc.
.Lnea de Comandos : podemos exportar una figura con la funcin print, imprimiendo la grafica a un
archivo utilizando el formato que le especifiquemos, o utilizando la funcin save en combinacin
con cgf (get Current Figure). Veamos los siguientes dos ejemplos realizan la misma tarea:
H=gcf;
saveas(H,'figurin.emf');
5.6.Graficas en 3D
Matlab provee varia funciones para graficar datos u objetos tridimensionales.
plot3
para graficar curvas en el espacio
mesh
para graficar superficies mesh
surf
para graficar superficies
contour
para graficar contornos
Tambin podemos nombrar sphere y cylinder que sirven para graficar superficies. Para obtener
ayuda rapida escribimos en la linea de comandos help graph3d
5.6.1.Creacin de graficas en 3D
La siguiente tabla muestra los pasos tpicos a realizar para crear una grafica en 3D.
Paso
generacin de los datos
seleccin de la regin de la figura donde se
graficara
llamada a la funcin graficadora en 3D
Cdigo Tipico
Z = peaks(20);
figure(1)
subplot(2,1,2)
h = surf(Z);
colormap hot
shading interp
set(h,'EdgeColor','k')
light('Position',[-2,2,20])
lighting phong
material([0.4,0.6,0.5,30])
set(h,'FaceColor',[0.7 0.7 0],...
'BackFaceLighting','lit')
agregar iluminacion
impresion
view([30,25])
set(gca,'CameraViewAngleMode','Manual')
axis([5 15 5 15 -8 8])
set(gca'ZTickLabel','Negative||Positive')
set(gca,'PlotBoxAspectRatio',[2.5 2.5 1])
xlabel('X Axis')
ylabel('Y Axis')
zlabel('Function Value')
title('Peaks')
set(gcf,'PaperPositionMode','auto')
print -dps2
Si los argumentos de la funcion plot son son matrices las lineas de plot se realizan evaluando
columna a columna, es decir la columna1 de X contra la columna1 de Y y Z y asi sucesivamente se
arma la grafica.
Por ejemplo:
[X,Y] = meshgrid([-2:0.1:2]);
Z = X.*exp(-X.^2-Y.^2);
plot3(X,Y,Z)
grid on
la grafica resultante es