Manual de Programación en Matlab
Manual de Programación en Matlab
APUNTES DE MATLAB
ÍNDICE
1. Introducción………………………………………………………………………………… 4
2. Inicializando Matlab………………………………………………………………………. 5
2.1. Toolbar Window……………………………………………………………………… 5
2.2. Command Window…………………………………………………………………… 8
2.3. Workspace…………………………………………………………………………….. 8
2.4. Command History……………………………………………………………………. 10
3. El comando HELP…………………………………………………………………………. 11
4. El espacio de trabajo de Matlab…………………………………………………………. 14
5. Matemática simple………………………………………………………………………… 16
5.1. Operadores aritméticos……………………………………………………………… 16
5.2. Operadores relacionales…………………………………………………………….. 17
5.3. Operadores lógicos…………………………………………………………………... 18
5.4. Funciones trigonométricas e hiperbólicas………………………………………... 19
5.5. Funciones varias……………………………………………………………………… 19
5.6. Despliegue de formatos numéricos………………………………………………… 23
5.7. Variables………………………………………………………………………………. 26
5.8. Números complejos…………………………………………………………………... 28
5.9. Ejemplos………………………………………………………………………………... 29
6. Operaciones con matrices y vectores…………………………………………………… 32
6.1. Definición de matrices………………………………………………………………. 32
6.2. Operaciones con matrices…………………………………………………………... 33
6.3. Funciones que actuan sobre vectores……………………………………………… 37
6.4. Tipos de matrices predefinidos……………………………………………………... 40
6.5. Formación de una matriz a partir de otras……..………………………………... 48
7. Gráficas en dos dimensiones……………………………………………………………... 53
7.1. Función plot…………………………………………………………………………… 55
7.2. Tipos de líneas y marcadores en la función plot…………………………………. 58
7.3. Añadir líneas a una gráfica ya existente………………………………………….. 59
7.4. Comando subplot…………………………………………………………………….. 59
7.5. Control de los ejes……………………………………………………………………. 60
7.6. Manejo de las ventanas de gráficos……………………………………………….. 62
7.7. Otras funciones gráficas en dos dimensiones…………………………………….. 63
7.8. Ejemplos……………………………………………………………………………….. 73
8. Gráficas en tres dimensiones……………………………………………………………. 76
8.1. Dibujo de líneas: función plot3…………………………………………………….. 76
8.2. Dibujo de mallas: Funciones meshgrid, mesh y surf……………………………. 77
8.3. Dibujo de líneas de contorno: Funciones contour y contour3…………………. 78
8.4. Mapas de colores…………………………………………………………………….. 83
8.5. Elementos generales: ejes, puntos de vista, líneas ocultas……………………... 92
9. Estadística…………………………………………………………………………………... 93
9.1. Generación de números aleatorios………………………………………………… 95
9.2. Medidas de tendencia central………………………………………………………. 96
9.3. Medidas de dispersión……………………………………………………………….. 97
9.4. Funciones varias……………………………………………………………………… 99
-2-
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
-3-
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
1. Introducción
The Math Works es la empresa líder en desarrollo y suministro de software para
computación técnica y el diseño basado en modelos. Fue fundada en 1984 en Natick,
Massachussets, donde tiene su cede, con oficinas que la representan alrededor del
mundo. Es esta empresa la responsable del desarrollo de un programa de matemáticas
conocido como Matlab, creado en el mismo año de su fundación, el cual está
actualmente disponible para las plataformas Unix, Windows y Mac. El nombre Matlab
es la abreviatura de Matrix Laboratory (laboratorio de matrices).
-4-
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
2. Inicializando Matlab
Para empezar a trabajar en Matlab se puede iniciar como cualquier otra
aplicación de Windows, haciendo click dos veces en el icono correspondiente o por
medio del menú de Inicio).
Toolbar
Window
Workspace
Command
Window
Command
History
Barra de
estado
Se conoce como Toolbar Window a esta ventana ya que contiene las barras de
herramientas básicas, que son de gran ayuda en el uso de este programa. La barra de
herramientas (Figura 2.1.1) proporciona un acceso directo a las funciones más comunes
de Matlab y se enumeran a continuación en el mismo orden en el que se presentan los
accesos directos:
-5-
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
-6-
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
-7-
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
2.3. Workspace
-8-
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Al hace doble clic sobre alguno de los elementos de la lista aparece otra ventana
(Figura 2.3.2), que muestra valor que tiene asignado dicho elemento. En esta ventana
puede aparecer más de un elemento, junto con su valor, mostrándose cada uno en una
pestaña diferente dentro de la misma ventana, y para alternar entre ellos basta con
seleccionar la pestaña del elemento que se desea observar.
-9-
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
En esta ventana también es posible editar los elementos que se han seleccionado,
haciendo doble clic en el valor a modificar e introduciendo el nuevo valor.
Para mostrar o esconder dicha ventana, se sigue un proceso similar al que se usa
con el Workspace. Primero, abrimos el menú View en la barra de herramientas y se
selecciona la opción Command History. Una vez hecho eso, aparecerá una ventana
como la que se muestra en la Figura 2.4.1.
- 10 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
3. El comando HELP
Matlab dispone de un excelente Help con el que se puede encontrar la información
que se desee. En primer lugar, es posible recurrir al Help desde la línea de comandos.
Basta con escribir en la línea de comandos help seguido del comando que se desea
consultar, por ejemplo:
» help mesh
De aquí se observa que Matlab despliega una lista de funciones que pueden
realizarse con este comando, así como la sintaxis requerida para que dicho comando
ejecute una u otra función. Además, muestra una lista de temas relacionados a dicho
comando.
- 11 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Help Navigator
Display Pane
- 12 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Cargar otras páginas.: utilice las flechas en la parte superior para moverse
dentro del documento, o utilice los botones de atrás y adelante en
la barra de herramientas para cargar páginas previamente vistas.
Bookmark pages: se refiere a marcar las páginas como favoritas al presionar
el botón Add to Favorites.
Impresión de páginas: esto se hace oprimiendo el boton de imprimir ubicado
en la barra de herramientas.
Find a term in the page: al escribir un término en éste apartado y oprimir el
botón Go se hace una búsqueda de éste en el documento
mostrado actualmente
[Link]
- 13 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Matlab puede llamar a una gran variedad de funciones, tanto propias como
programadas por los usuarios. A veces puede incluso haber funciones distintas que
tienen el mismo nombre. Interesa saber cuáles son las reglas que determinan qué
función o qué fichero *.m es el que se va a ejecutar cuando su nombre aparezca en una
línea de comandos del programa. Esto queda determinado por la ruta de búsqueda
(search path) que el programa utiliza cuando encuentra el nombre de una función.
El search path de Matlab es una lista de directorios que se puede ver y modificar a
partir de la línea de comandos, o utilizando el Path Browser. El comando path hace que
se escriba el search path de Matlab (el resultado depende de en qué directorio está
instalado Matlab):
» path
MATLABPATH
c:\Matlab\toolbox\local
c:\Matlab\toolbox\Matlab\datafun
c:\Matlab\toolbox\Matlab\elfun...
Matlab dispone de un editor que permite tanto crear y modificar estos archivos,
como ejecutarlos paso a paso para ver si contienen errores (proceso de Debug o
depuración). En la ventana principal del Editor/Debugger se puede teclear un archivo-
M llamado archivo.m, que contiene comandos.
- 14 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
>> who
K P R a b c d den num s
>> whos
- 15 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
5. Matemática simple
Por ahora nos enfocaremos a los operadores aritméticos matriciales, es decir los
operadores que se rigen por el álgebra lineal, para después enfocarnos a los operadores
de arreglos.
- 16 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
* Multiplicación n
c i, j A i, k B k , j
k 1
Los operadores relacionales son >, <=, >=, ==, y ~=. Los operadores
relacionales realizan comparaciones elemento por elemento entre dos arreglos. En este
caso el resultado será un arreglo lógico del mismo tamaño con elementos dispuestos
como verdadero (1) o falso (0). Estos operadores utilizan únicamente la parte real de los
operandos para la comparación.
Por ejemplo, consideremos el caso en el que uno de los operandos es un escalar
y el otro es una matriz, de tal forma que al hacer la comparación:
1 2 3
X 5; X 4 5 6
7 8 9
1 1 1
1 1 0
0 0 0
- 17 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Símbolo Operador
< menor que
> mayor que
<= menor o igual que
>= mayor o igual que
== igual que
~= distinto que
Existen en Matlab operadores del tipo lógico que entregan, al igual que los
realcionales, un arreglo lógico en el que se representa al verdadero como 1 y al falso
como 0. estos operadores representan las operaciones lógicas de AND, OR y NOT.
Tambien se incluye la operación lógica de OR exclusiva (XOR) mediante la función
xor(A,B). Las operaciones lógicas en Matlab se reresentan como:
Ahora incluiremos las tablas de verdad para cada una de las operaciones con el
fin de explicar un poco mejor el funcionamiento de cada operador:
Por otro lado tenemos los operadores lógicos de corto circuito se utilizan cuando
se comparan dos expresiones lógicas. De tal modo, que para utilizarlas debemos seguir
la sintaxis:
Donde cada expresión se evalúa para un valor escalar. El hecho de que sean
operadores de corto circuito implica que el segundo operando es evaluado únicamente
en el caso de que el resultado no quede completamente determinado por el primero.
- 18 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Función operación
sin(x) Seno de X
cos(x) Coseno de X
tan(x) Tangente de X
asin(x) Angulo cuyo seno es X
acos(x) Angulo cuyo coseno es X
atan(x) Angulo cuya tangente es X contenido en
el intervalo [-/2 , /2]
atan2(x) Angulo cuya tangente es X contenido en
el intervalo [-, ]
sinh(x) Seno hiperbólico de X
cosh(x) Coseno hiperbólico de X
tanh(x) Tangente hiperbólica de X
asin(x) Angulo cuyo seno hiperbólico es X
acosh(x) Angulo cuyo coseno hiperbólico es X
atanx(x) Angulo cuya tangente hiperbólica es X
Función Operación
Logaritmo natural de x
Log(x)
Esta función encuentra el logaritmo natural de todos los elementos
contenidos en el vector x. En el caso en que x contenga valores negativos,
el resultado de esta operación será un número complejo
Logaritmo base 10
log10(x)
Esta función entrega el logaritmo base 10 de todos los elementos
contenidos en el vector x. De igual forma, si el vector contiene valores
negativos, la función entrega por resultado números complejos
- 19 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Función Operación
Logaritmo base 2
Función exponencial
Exp(x) Ésta es la función exponencial como tal, donde se eleva al valor e a todos
los valores del vector x. En el caso en que el vector sea un vector
complejo, al aplicar esta función se entregara la forma de euler del número
complejo. Esto es:
Raíz cuadrada
sqrt(x) Para esta función, Matlab entrega la raíz cuadrada de todos los valores
contenidos en el vector x.
En el caso en que los valores contenidos en el vector sean negativos, la
función entregará como resultado un número complejo.
sqrtm(x) X=SQRT(A) es la raíz cuadrada principal de una matriz A. Esto es, que X
es la unica raíz cuadrada para la cual cada eigenvalor no tiene parte real.
En el caso en que A tenga algun eigenvalor son parte real negativa,
entonces se produce un resultado complejo. Si A es una matríz singular, es
posible que no tenga una raíz cuadrada.
Función signo
SIGN(X) = X ./ ABS(X).
- 20 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Función Operación
Redondeo
round(x)
Mediante esta función es posible redondear todos los elementos de x hacia
el entero que se encuentre más cercano.
floor(x) El uso de esta función provoca que todos los elementos de x sean
redondeados hacia el entero más cercano que se encuentre hacia menos
infinito. La función que desempeña resulta muy similar a la que realiza la
función fix
- 21 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Función Operación
Valor absoluto
real(x) Reales
imag(x) Imaginario
Valor absoluto
Fase
angle(x)
Entrega los valores de los ángulos, en radianes, de la matriz cuyos
elementos son complejos.
- 22 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Los tipos de formatos que permita Matlab se presentan en la siguiente tabla. Las
palabras reservadas contenidos en el campo tipos son los que sustituyen el espacio
“tipo” en la sintaxis anterior.
- 23 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
3.14
>> pi
compact Suprime el exceso de líneas que se utilizan para ans =
mostrar cada dato en la pantalla 3.1416
>> 2*pi
Los resultados se muestran en forma
Hex hexagesimal ans =
401921fb54442d18
>> pi
Muestra un número con 15 cifras significativas
long ans =
3.14159265358979
>> pi
Muestra los números con 15 cifras decimales
Long e significativas ans =
3.141592653589793e+000
>> pi
Muestra los mejores 15 dígitos, ya sea enteros o
Long g decimales ans =
3.14159265358979
>> pi
Agrega líneas de espaciamiento entre las salidas
loose ans =
3.14159265358979
>> pi
Muestra la razón de enteros pequeños
Rat ans =
355/113
>> pi
Muestra 5 cifras
short ans =
3.1416
- 24 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
3.1416e+000
>> pi
Los mejores 5 dígitos enteros o decimales
short g ans =
3.1416
Matlab aplica un factor de escala general a las matrices cuando los elementos
más grandes o más pequeños son superiores o inferiores respectivamente a una
determinada cantidad (103 y 10-3). Hay que añadir que Matlab trata de mantener el
formato de los números que han sido definidos como enteros (sin punto decimal).
Matlab mantiene una forma especial para los números muy grandes (más
grandes que los que es capaz de representar), que son considerados como infinito. Por
ejemplo:
>> 1/0
Warning: Divide by zero.
ans =
Inf
Matlab tiene también una representación especial para los resultados que no
están definidos como números. Por ejemplo:
>> 0/0
Warning: Divide by zero.
ans =
NaN
>> Inf/Inf
ans =
NaN
- 25 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
5.7. Variables
Una variable es un nombre que se da a una entidad numérica, que puede ser una
matriz, un vector o un escalar. El valor de esa variable, e incluso el tipo de entidad
numérica que representa, puede cambiar a lo largo de una sesión de Matlab o a lo largo
de la ejecución de un programa. La forma más normal de cambiar el valor de una
variable es colocándola a la izquierda del operador de asignación (=).
Una expresión de Matlab puede tener las dos formas siguientes: primero,
asignando su resultado a una variable: variable = expresión, y segundo, evaluando
simplemente el resultado del siguiente modo: expresión, en cuyo caso el resultado se
asigna automáticamente a una variable interna de Matlab llamada ans (de answer) que
almacena el último resultado obtenido.
Se considera por defecto que una expresión termina cuando se pulsa enter. Si se
desea que una expresión continúe en la línea siguiente, hay que introducir tres puntos
(...) antes de pulsar enter. También se pueden incluir varias expresiones en una misma
línea separándolas por comas o punto y coma. Si una expresión termina en punto y
coma su resultado se calcula, pero no se escribe en pantalla. Esta posibilidad evita la
escritura de resultados intermedios, así como la impresión de grandes cantidades de
números cuando se trabaja con matrices de gran tamaño.
Un comando útil en el uso de variables es el comando clear, el cual tiene varias formas
posibles:
- 26 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
- 27 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
A=
1.0000 + 2.0000i 2.0000 + 3.0000i
-1.0000 + 1.0000i 2.0000 - 3.0000i
» A = [1 2; -1 2] + [2 3; 1 -3]*i
A=
1.0000 + 2.0000i 2.0000 + 3.0000i
-1.0000 + 1.0000i 2.0000 - 3.0000i
Puede verse que es posible definir las partes reales e imaginarias por separado.
En este caso sí es necesario utilizar el operador (*), según se muestra en el ejemplo
anterior.
» complex(1,2)
ans =
1.0000 + 2.0000i
- 28 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Ahora que sabemos como introducir números complejos de forma que Matlab
sea capaz de interpretarlos, es necesario conocer ciertas funciones que nos permitan
operar con ellos. De esta forma se incluye la siguiente tabla donde se encuentran los
operadores básicos para los números complejo:
Operador Función
Y a2 b 2
5.9. Ejemplos
>> 4*25-4+10/6
ans =
- 29 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
97.6667
>> 4*25-(4+10)/6
ans =
97.6667
>> (4*25-4+10)/6
ans =
17.6667
ans =
29.3961
Para las funciones trigonométricas, Matlab trabaja en radianes, por lo que 90°
debe escribirse como pi/2:
>> sin(90)
ans =
0.8940
>> sin(pi/2)
ans =
1
>> sin(pi)
ans =
1.2246e-016
>> x=sin(pi);
>> round(x)
ans =
0
>> 1+2i
ans =
1.0 + 2.0000i
2.0
>> y=1+2i
- 30 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
y=
1.0000 + 2.0000i
>> real(y)
ans =
1
>> imag(y)
ans =
2
>> angle(y)
ans =
1.1071
>> atan(0.27)
ans =
0.2637
>> z=atan(0.27);
>> fix(z)
ans =
0
>> round(z)
ans =
0
>> log(z)
ans =
-1.3329
>> log10(z)
ans =
-0.5789
- 31 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
>> A=[1 2 3; 4 5 6; 7 8 9]
A=
1 2 3
4 5 6
7 8 9
B=
11 4 55
Por otro lado, en ocaciones es conveniente definir al vector como una sola
columna. Para obtener este formato basta con separar los números con un punto y
coma:
- 32 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Y=
10
20
30
- 33 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
.* Producto elemento a
elemento En este caso las matrices deben de tener el mismo
tamaño a menos que una de ellas sea un escalar.
- 34 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
>> A=[1 2 3; 4 5 6; 7 8 9]
A=
1 2 3
4 5 6
7 8 9
>> B=[3 4 6; 8 2 4; 1 5 7]
B=
3 4 6
8 2 4
1 5 7
>> A'
ans =
1 4 7
2 5 8
3 6 9
>> C=2
C=
>> A^2
ans =
30 36 42
66 81 96
102 126 150
>> C^A
ans =
1.0e+004 *
- 35 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
>> A/B
ans =
>> A\B
ans =
1.0e+017 *
>> A.*B
ans =
3 8 18
32 10 24
7 40 63
>> A./B
ans =
>> A.\B
ans =
>> A.^B
ans =
1 16 729
65536 25 1296
7 32768 4782969
- 36 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
>> A.'
ans =
1 4 7
2 5 8
3 6 9
>>D=[ 2 3 4 5 6 7 8 9 ]
D=
2 3 4 5 6 7 8 9
- 37 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
- 38 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
- 39 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Eye
Existen diversas formas en las que es posible utilizar esta función, todas ellas
con la finalidad de crear una matriz identidad, es decir, cuya diagonal este conformada
por unos y el resto de la matriz sea cero. De esta forma tenemos:
eye(n): se obtiene una matriz identidad cuadrada de nxn elementos. Por ejemplo:
>> eye(5)
ans =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
eye(m,n) o eye([m,n]): genera una matriz de mxn elementos cuya diagonal esta
formada por unos, esto es:
eye(size(A)): crea una matriz identidad cuadrada que tiene el mismo tamaño que
la matriz A, así:
>> A=[1,2,3;4,5,6]
A=
1 2 3
4 5 6
>> eye(size(A))
ans =
1 0 0
0 1 0
Cabe remarcar que esta función tiene ciertas limitantes. La matriz identidad no
esta definida para matrices de orden superior. Por esta razón, asignaciones como
eye([m,n,p]) no están definidas y resultan en un error.
Zeros
- 40 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
que pueden ser utilizadas dependiendo del tipo de matriz que se desee generar. Así
tenemos:
zeros(n): esta instrucción entrega como resultado una matriz cuadrada de nxn
con la restricción de que n sea un escalar:
>> zeros(3)
ans =
0 0 0
0 0 0
0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
ans(:,:,2) = ans(:,:,2) =
0 0 0 0 0 0
0 0 0 0 0 0
ans(:,:,3) = ans(:,:,3) =
0 0 0 0 0 0
0 0 0 0 0 0
ans(:,:,4) = ans(:,:,4) =
0 0 0 0 0 0
0 0 0 0 0 0
>> zeros(size(A))
ans =
- 41 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
0 0 0
0 0 0
Ones
La función ones genera una matriz de unos dependiendo de las dimensiones que
se le introduzcan como argumento a dicha función. Sus variantes son muy parecidas a
las de la función zeros obteniendo resultados similares con la diferencia de que todos los
elementos de la matriz generada son unos. De esta forma tenemos:
>> ones(3)
ans =
1 1 1
1 1 1
1 1 1
>> ones(size(A))
ans =
1 1 1
1 1 1
- 42 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
1 1 1 1 1 1
1 1 1 1 1 1
ans(:,:,2) = ans(:,:,2) =
1 1 1 1 1 1
1 1 1 1 1 1
ans(:,:,3) = ans(:,:,3) =
1 1 1 1 1 1
1 1 1 1 1 1
ans(:,:,4) = ans(:,:,4) =
1 1 1 1 1 1
1 1 1 1 1 1
Linspace
>> linspace(3,4,5)
ans =
Logspace
- 43 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
cuando se generan vectores de frecuencia. Del mismo modo que linspace, esta función
presenta las siguientes variantes:
>> logspace(2,3,6)
ans =
1.0e+003 *
Rand
rand(n): genera una matriz de dimensiones nxn cuyos valores son números
aleatorios siempre y cuando el valor de n sea un escalar.
>> rand(3)
ans =
- 44 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
rand(m,n,p,…) o rand([m n p…]): genera una matriz de orden superior con las
dimensiones m, n, p, … cuyos elementos son números aleatorios.
ans(:,:,2) = ans(:,:,2) =
ans(:,:,3) = ans(:,:,3) =
ans(:,:,4) = ans(:,:,4) =
rand(size(A)): genera una matriz de números aleatorios del mismo tamaño que la
matriz A. Utilizando la misma matriz A que en los casos anteriores tenemos:
>> rand(size(A))
ans =
rand: esta instrucción por sí misma entrega un escalar cuyo valor cambia de
forma aleatoria cada vez que se llama a la función.
Randn
- 45 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
randn(n): entrega una matriz de dimensiones nxn donde los valores de dicha
matriz son números aleatorios normalmente distribuidos. En este caso n debe ser un
escalar.
>> randn(3)
ans =
ans = ans =
>> randn(size(A))
ans =
randn: entrega un escalar cuyo valor cambia cada vez que se ejecuta el comando
- 46 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
ans(:,:,1) = ans(:,:,1) =
ans(:,:,2) = ans(:,:,2) =
ans(:,:,3) = ans(:,:,3) =
ans(:,:,4) =
ans(:,:,4) =
-0.1567 0.2573 1.4151
-1.8740 0.8956 0.5779 -1.6041 -1.0565 -0.8051
0.4282 0.7310 0.0403
Magic
>> B=magic(3)
B=
8 1 6
3 5 7
4 9 2
- 47 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
15 15 15 15
15
15
>> sum(diag(B))
ans =
15
Existen otras funciones para crear matrices de tipos particulares. Con Help /
Help Window se puede obtener información sobre todas las funciones disponibles en
Matlab, que aparecen agrupadas por directorios.
Size
La función size obtiene el tamaño de una matriz sin importar las dimensiones
que esta tenga. Así, utilizando esta función se pueden generar matrices de la siguiente
manera:
size(x): entrega como resultado un vector cuyos elementos son las dimensiones
de la matriz que le sirve como argumento.
A=
1 2 3
4 5 6
>> d=size(A)
d=
- 48 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
2 3
>> [m,n]=size(A)
m=
2
n=
3
De esta forma, conociendo las dimensiones de otra matriz se puede generar otra
matriz que tenga las mismas dimensiones, por ejemplo, mediante el uso de las funciones
que se estudiaron a lo largo de la sección anterior (ones, zeros,…).
Length
>> length(A)
ans =
Diag
La función diag entrega como resultado el vector columna que contiene los
valores de la diagonal de la matriz que le sirve de argumento. De esta forma al aplicarlo
sobre la matriz A de los casos anteriores:
>> diag(A)
ans =
1
5
En este caso, al aplicar sobre el resultado anterior la función diag es posible
generar una matriz cuadrada que contenga en su diagonal a la diagonal de la matriz
original y ceros en todos los elementos restantes.
Esto es:
>> diag(diag(A))
ans =
- 49 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
1 0
0 5
Triu
El uso del comando triu entrega una matriz cuyos elementos contienen al
triángulo superior de la matriz que le sirve de argumento. Esto es:
>> triu(A)
ans =
1 2 3
0 5 6
>> triu(A,2)
ans =
0 0 3
0 0 0
Tril
Esta función es equivalente a la función triu con la diferencia de que en este caso
la matriz se forma con el triángulo inferior.
>> tril(A)
ans =
1 0 0
4 5 0
Del mismo modo que la función anterior, la función tril permite seleccionar una
diagonal diferente de la diagonal principal. Esto es:
>> tril(A,1)
ans =
1 2 0
4 5 6
En ambos casos, si el valor de la diagonal seleccionada es cero entonces tomará
a la diagonal principal para generar el triángulo dependiendo del caso.
- 50 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Rot90
Esta función se utiliza para girar 90° la matriz original en sentido antihorario. De
esta forma, la función presenta dos variantes:
>> rot90(A)
ans =
3 6
2 5
1 4
>> rot90(A,2)
ans =
6 5 4
3 2 1
Flipud
La función flipud entrega a la matriz que le sirve como argumento pero con sus
renglones invertidos de arriba para abajo con respecto a un eje horizontal. De esta
forma, si la matriz es un vector columna, entonces la función entrega un vector de la
misma longitud pero con sus elementos invertidos. En el caso en que sea un vector
renglón entrega al mismo vector. Utilizando a la matriz A como en casos anteriores:
>> flipud(A)
ans =
4 5 6
1 2 3
Fliplr
>> fliplr(A)
ans =
- 51 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
3 2 1
6 5 4
Reshape
>> reshape(A,3,2)
ans =
1 5
4 3
2 6
- 52 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Matlab utiliza un tipo especial de ventanas para realizar las operaciones gráficas.
Ciertos comandos abren una ventana nueva y otros dibujan sobre la ventana activa, bien
sustituyendo lo que hay en ella, o bien añadiendo nuevos elementos gráficos a un dibujo
anterior.
De esta forma, Matlab dispone de cuatro funciones básicas para crear gráficos.
Estas funciones se diferencian principalmente por el tipo de escala que utilizan en los
ejes de abscisas y de ordenadas. Estas cuatro funciones son las siguientes:
Función Descripción
Existen además otras funciones orientadas a añadir títulos al gráfico, a cada uno
de los ejes, a dibujar una cuadrícula auxiliar, a introducir texto, etc. Estas funciones son
utilizadas con la finalidad de editar los gráficos y hacerlos más entendibles dependiendo
del fin que tengan. Las funciones más usuales son:
Función Descripción
Función Descripción
- 53 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
comando:
text(x,y,‟etiqueta‟)
gtext Esta función permite colocar un texto en un grafico una vez que se ha
seleccionado su ubicación dentro del gráfico utilizando el Mouse.
Permite colocar una legenda que identifica a cada uno de los elementos
legend que se han dibujado dentro del gráfico. Este comando permite su uso en un
grafico que contiene n elementos, de la forma:
Legend(„titulo1‟,‟titulo2‟,‟titulo3‟,…)
grid El uso de este comando agrega al gráfico una cuadrícula que permite
una visualización más exacta de los elementos incluidos dentro del gráfico
Hay funciones como plot que por defecto crean una nueva figura, y otras
funciones como grid que se aplican a la ventana activa modificándola, y sólo crean una
ventana nueva cuando no existe ninguna ya creada. Más adelante se verá que con la
función hold pueden añadirse gráficos a una figura ya existente respetando su
contenido.
Cabe aclarar que en la tabla anterior únicamente se han descrito básicamente las
funciones dado que algunas de ellas tienen variantes que se recomienda que el lector
investigue por su cuenta dependiendo de la necesidad que tenga.
- 54 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Una segunda forma de utilizar la función plot() es con dos vectores como
argumentos. En este caso los elementos del segundo vector se representan en ordenadas
frente a los valores del primero, que se representan en abscisas. La función plot()
permite también dibujar múltiples curvas introduciendo varias parejas de vectores como
argumentos. En este caso, cada uno de los segundos vectores se dibujan en ordenadas
como función de los valores del primer vector de la pareja, que se representan en
abscisas.
Ahora se va a ver lo que pasa con los vectores complejos. Si se pasan a plot
varios vectores complejos como argumentos, Matlab simplemente representa las partes
reales y desprecia las partes imaginarias. Sin embargo, un único argumento complejo
hace que se represente la parte real en abscisas, frente a la parte imaginaria en
ordenadas. Como ya se ha dicho, si se incluye más de un vector complejo como
argumento, se ignoran las partes imaginarias. Si se quiere dibujar varios vectores
complejos, hay que separar explícitamente las partes reales e imaginarias de cada
vector.
El comando plot puede utilizarse también con matrices como argumentos. Por
ejemplo:
Función Descripción
Plot(real(A),imag(A))
- 55 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
A continuación, se incluyen algunos ejemplos del uso del comando plot en sus
variantes, junto con el código fuente que genera los gráficos obtenidos.
>> x=0:0.1:2*pi;
>> y=sin(x);
>> plot(y)
>> x=0:0.1:2*pi;
>> y=sin(x);
>> plot(x,y)
- 56 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
>> x=0:0.1:2*pi;
>> y=sin(x);
>> z=cos(x);
>> plot(x,y,x,z)
- 57 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
usuario le sea más sencillo identificar una línea de otra. Esto se logra utilizando al
comando de como plot(x,y,s), donde s es una cadena de caracteres compuesta de un
elemento de cualquiera de las siguiente tres columnas:
De esta forma, tomado como ejemplo las funciones tomadas para el ejemplo
anterior, podemos generar el siguiente grafico aplicando un cambio de línea y marcador.
Figura 7.2.1 – gráfica del seno y coseno con diferente tipo de línea y marcador
>> x=0:0.1:2*pi;
>> y=sin(x);
- 58 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
>> z=cos(x);
>> plot(x,y,'m.-',x,z,'g+')
Función Descripción
hold off Reinicia las propiedades de los gráficos a sus valores de inicio
antes de que se dibujen nuevas líneas
Cabe remarcar que aun que el estado en el que se encuentre el gráfico sea de
hold on, en algunos casos al momento de adicionar una nueva línea al gráfico puede
cambiar las propiedades de los ejes. Por ejemplo, al adicionar una línea pueden
incrementarse los límites de los ejes si los datos a graficar lo requieren.
Del mismo modo que para el comando plot, se puede añadir títulos a cada
subplot, así como rótulos para los ejes. Se puede intentar también cambiar los tipos de
línea. Para volver a la opción por defecto basta teclear el comando subplot(1,1,1).
Función Descripción
- 59 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Función Descripción
axis([xmin xmax ymin ymax]) Establece los límites para los ejes x y y actuales
- 60 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Existen otras variantes del comando axis que no se han incluido a lo largo de
esta sección, y que pueden ser consultados en la ayuda de Matlab mediante el comando
help.
- 61 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
originalmente. De esta forma, la función figure tiene algunas variantes que se incluyen a
continuación.
Función Descripción
Función Descripción
- 62 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Bar
La función bar dibuja una barra para cada elemento a graficar. En el caso de que
se esté graficando una matriz, el comando produce un grupo de barras producidos por
los elementos en cada renglón. El eje x tiene una escala que va de 1 hasta la longitud del
vector a graficar, si este es el caso, y de 1 hasta el número de renglones de la matriz
cuando se pretenda graficar una.
Para esta función existen algunas variantes. Una de las más representativas es
barh que crea barras horizontales para cada valor a graficar. A continuación se incluye
un ejemplo de los resultados esperados en el uso de estos dos comandos.
>> x=0:10;
>> y=2*x.^2;
>> bar(x,y)
>> x=0:10;
>> y=2*x.^2;
>> barh(x,y)
- 63 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Bar3
Del mismo modo que la función anterior, esta función presenta una variante
conocida como bar3h que de igual forma muestra barras horizontales en la gráfica. Este
tipo de gráficas se ejemplifican a continuación.
x=0:10;
y=2*x.^2;
bar3(x,y)
- 64 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
x=0:10;
y=2*x.^2;
bar3h(x,y)
- 65 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Pie
El uso de este comando genera una gráfica de pastel generada a partir de los
datos contenidos en un arreglo de datos. Cada elemento en el arreglo es representado
por un porcentaje de un círculo que finalmente se asemejan a las rebanadas de un pastel.
x=1:10;
y=2*x.^2;
pie(x,y)
Area
El uso del comando area genera una gráfica similar a la que se genera mediante
el uso del comando plot con la diferencia de que el comando area rellena el área bajo la
curva a graficar. En el caso en que se trate de un vector este se grafica como tal, en el
caso de que se trate de una matriz, el comando graficará la suma de cada columna.
x=1:10;
y=2*x.^2;
area(x,y)
- 66 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
x=1:10;
y=2*x.^2;
stairs(x,y)
- 67 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Errorbar
En el caso de la función errorbar se grafican a los elementos junto con una barra
de error para cada elemento. La barra de error es en si la distancia entre una curva
superiri y una inferior, por lo que cada barra es simétrica y de tamaño 2*E, donde E es
el error. En la siguiente grafica se muestra un ejemplo del resultado esperado del uso de
la función.
x=1:10;
y=2*x.^2;
e=100*rand(size(y))
errorbar(x,y,e)
Compass
Z = eig(randn(10,10));
compass(Z)
- 68 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Feather
theta = (-[Link])*pi/180;
r = 2*ones(size(theta));
[u,v] = pol2cart(theta,r);
feather(u,v);
- 69 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Rose
theta = 2*pi*rand(1,50);
rose(theta)
Quiver
[X,Y] = meshgrid(-2:.2:2);
Z = X.*exp(-X.^2 - Y.^2);
[DX,DY] = gradient(Z,.2,.2);
contour(X,Y,Z)
hold on
quiver(X,Y,DX,DY)
colormap hsv
grid off
hold off
- 70 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Stem
x=1:10;
y=2*x.^2;
stem(y)
- 71 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Polar
theta=-2*pi:0.1:2*pi;
rho=sin(theta);
polar(theta,abs(rho));
Hist
La función hist muestra una distribución de los valores de los datos conocida
como histograma. Los histogramas se utilizan para representar tablas de frecuencias con
datos agrupados en intervalos. Si los intervalos son todos iguales, cada uno de ellos es la
base de un rectángulo cuya altura es proporcional a la frecuencia de aparición de un
dato en la muestra a graficar.
- 72 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
x=1:100;
y=randn(size(x));
hist(y)
7.8. Ejemplos
x=-4:0.01:4;
y=sin(x);
plot(x,y,'r--');
grid on;
title('Función seno(x)');
- 73 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
- 74 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
x=[-4*pi:pi/20:4*pi];
plot(x,sin(x),'r',x,cos(x),'g');
title('Función seno(x) -en rojo- y función coseno(x) -en verde-');
xlabel('ángulo en radianes'), figure(gcf);
ylabel('valor de la función trigonométrica'), figure(gcf);
axis([-12,12,-1.5,1.5]), figure(gcf);
axis('on'), grid, figure(gcf);
- 75 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
plot3(x,y,z): este comando dibuja una línea que une los puntos (x(1), y(1), z(1)),
(x(2), y(2), z(2)), etc. y la proyecta sobre un plano para poderla representar en la
pantalla. Este comando permite la graficación tanto de vectores como de matrices
siempre y cuando estas sean del mismo tamaño con el fin de generar tercias de
coordenadas para ubicar un punto.
t = 0:pi/50:10*pi;
figure
plot3(sin(t)-9,cos(t),t)
grid on
- 76 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
t = 0:pi/50:10*pi;
plot3(sin(t)-9,cos(t),t,'rx')
grid on
Sean x e y dos vectores que contienen las coordenadas en una y otra dirección de
la retícula (grid) sobre la que se va a dibujar la función. Después hay que crear dos
matrices X (cuyas filas son copias de x) y Y (cuyas columnas son copias de y). Estas
matrices se crean con la función meshgrid. Estas matrices representan respectivamente
las coordenadas x e y de todos los puntos de la retícula. La matriz de valores Z se
calcula a partir de las matrices de coordenadas X e Y. Cabe remarcar que la función
admite crear tres matrices, pero que no se utilizarán a lo largo de esta sección.
Finalmente hay que dibujar esta matriz Z con la función mesh, cuyos elementos
son función elemento a elemento de los elementos de X e Y. La función mesh dibuja en
perspectiva una función en base a una retícula de líneas de colores, rodeando
cuadriláteros del color de fondo, con eliminación de líneas ocultas.
Más adelante se verá cómo controlar estos colores que aparecen. Con el
comando surf(W) en vez de líneas aparece una superficie faceteada, también con
- 77 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
eliminación de líneas ocultas. El color de las facetas depende también del valor de la
función.
De esta forma, las funciones mesh y surf están encargadas de crear los datos
para generar un grafico en tres dimensiones.
[X,Y] = meshgrid(-2:.2:2,-2:.2:3);
Z = X.*exp(-X.^2-Y.^2);
contour(Z);
[X,Y] = meshgrid(-2:.2:2,-2:.2:3);
- 78 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Z = X.*exp(-X.^2-Y.^2);
n=20;
contour(Z,n);
[X,Y] = meshgrid(-2:.2:2,-2:.2:3);
Z = X.*exp(-X.^2-Y.^2);
n=randn(70,1);
contour(Z,n);
- 79 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
[X,Y] = meshgrid(-2:.2:2,-2:.2:3);
Z = X.*exp(-X.^2-Y.^2);
n=randn(70,1);
contour(X,Y,Z);
[X,Y] = meshgrid(-2:.2:2,-2:.2:3);
Z = X.*exp(-X.^2-Y.^2);
[C,h]=contour(X,Y,Z);
clabel(C,h)
- 80 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
[X,Y] = meshgrid([-1.5:.01:1.5]);
Z = X.*exp(-X.^2-Y.^2);
contour3(Z);
- 81 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
[X,Y] = meshgrid([-1.5:.01:1.5]);
Z = X.*exp(-X.^2-Y.^2);
contour3(Z,20);
[X,Y] = meshgrid([-1.5:.01:1.5]);
Z = X.*exp(-X.^2-Y.^2);
contour3(X,Y,Z,20);
- 82 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Existe otra función que permite generar curvas de nivel con la diferencia de que
muestra a la gráfica rellena en vez de solamente mostrar las líneas que delimitan las
curvas de nivel. Esta función es conturf que presenta exactamente las mismas variables
que las que se presentaron anteriormente.
[X,Y] = meshgrid([-1.5:.01:1.5]);
Z = X.*exp(-X.^2-Y.^2);
contourf(Z,20);
Un mapa de colores se define como una matriz de tamaño mx3, donde cada uno
de sus elementos contiene un valor entre 0 y 1, que representa la intensidad de uno de
los colores fundamentales: R (red o rojo), G (green o verde) y B (blue o azul). La
longitud por defecto de los mapas de colores de Matlab es 64, es decir, cada mapa de
color contiene 64 colores. De esta forma, cualquier elemento contenido dentro de dicha
matriz que este por fuera del intervalo [0,1] causará un error en la ejecución del
comando. Algunos mapas de colores están predefinidos en Matlab. Un mapa de color
puede estableciendo invocando al comando colormap de la siguiente forma:
Colormap(mapa de color)
Así, los nombres del mapa de color que se aceptan como parámetros de este
comando son los siguientes:
- 83 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
[X,Y] = meshgrid([-2:.02:1.8]);
Z =exp(-X.^2-Y.^2);
bar(Z);
colormap(bone)
- 84 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
[X,Y] = meshgrid([-2:.02:1.8]);
Z =exp(-X.^2-Y.^2);
bar(Z);
colormap(cool)
- 85 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
cooper: genera una variación suave en la gama que va del negro al cobre.
[X,Y] = meshgrid([-2:.02:1.8]);
Z =exp(-X.^2-Y.^2);
bar(Z);
colormap(copper)
flag: consiste en variaciones de rojo, blanco, azul y negro. Este mapa de color
cambia de color con cada incremento.
[X,Y] = meshgrid([-2:.02:1.8]);
Z =exp(-X.^2-Y.^2);
bar(Z);
colormap(flag)
- 86 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
gray: entrega un mapa de color formado por una escala de grises lineal
[X,Y] = meshgrid([-2:.02:1.8]);
Z =exp(-X.^2-Y.^2);
bar(Z);
colormap(gray)
hot: genera un mapa de color que varía suavemente desde el negro pasando por
el rojo, el naranja, el amarillo hasta llegar al blanco
[X,Y] = meshgrid([-2:.02:1.8]);
Z =exp(-X.^2-Y.^2);
bar(Z);
colormap(hot)
- 87 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
hsv: genera un matiz de colores saturados que inicia con el rojo, pasa por el
amarillo, el verde, el cian, el azul y el magenta regresando finalmente al rojo. Este
resulta especialmente util cuando se desea desplegar funciones periódicas.
[X,Y] = meshgrid([-2:.02:1.8]);
Z =exp(-X.^2-Y.^2);
bar(Z);
colormap(hsv)
[X,Y] = meshgrid([-2:.02:1.8]);
Z =exp(-X.^2-Y.^2);
bar(Z);
colormap(jet)
- 88 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
[X,Y] = meshgrid([-2:.02:1.8]);
Z =exp(-X.^2-Y.^2);
bar(Z);
colormap(lines)
pink: contiene un mapa de color que varía en colores rosa pastel. Este mapa de
color provee las tonalidades sepia en fotografías blanco y negro.
[X,Y] = meshgrid([-2:.02:1.8]);
Z =exp(-X.^2-Y.^2);
bar(Z);
colormap(pink)
- 89 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
prism: genera un mapa de color que repite los colores rojo, naranja, amarillo,
verde, azul, y violeta
[X,Y] = meshgrid([-2:.02:1.8]);
Z =exp(-X.^2-Y.^2);
bar(Z);
colormap(prism)
[X,Y] = meshgrid([-2:.02:1.8]);
Z =exp(-X.^2-Y.^2);
bar(Z);
colormap(spring)
- 90 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
[X,Y] = meshgrid([-2:.02:1.8]);
Z =exp(-X.^2-Y.^2);
bar(Z);
colormap(summer)
Winter: genera un mapa de color que consiste e colores que se degradan del azul
al verde.
[X,Y] = meshgrid([-2:.02:1.8]);
Z =exp(-X.^2-Y.^2);
bar(Z);
colormap(winter)
- 91 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Función Descripción
En los gráficos tridimensionales existen funciones para controlar los ejes, por
ejemplo:
axis([xmin,xmax,ymin,ymax,zmin,zmax])
- 92 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
9. Estadística
Matlab cuenta con funciones de estadística conocida como Statistics Toolbox
que contiene las funciones básicas a nivel de ingeniería y estadística científica. Las
funciones de estadística construyen bloques adecuados para su uso con otras
herramientas analíticas. De esta forma, Statistics Toolbox soporta una amplia gama de
tareas de estadística comunes que van desde la generación de números aleatorios hasta
el diseño de experimentos y procesos de control. El Statistics Toolbox tiene más de 200
M-files, proporcionando ayuda en las siguientes áreas de interés:
Distribuciones de probabilidad
Estadística descriptiva
Una muestra puede estar compuesta de miles, incluso millones de valores. Por
ello, existe lo que se conoce como estadística descriptiva que es una forma de reducir la
muestra en un menor número de valores que contengan la información mas relevante
del fenómeno a estudiar.
- 93 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Modelos lineales
y X
Que es la forma general de una recta. Matlab utiliza esta forma general del
modelo lineal para resolver una gran variedad de regresiones específicas y en problemas
de análisis de varianza conocidos como ANOVA. En el caso del análisis de la covarianza
existe lo que se conoce como ANOCOVA. Ambas funciones se encuentran contenidas
en el Statistics Toolbox entre otras que generan modelos lineales.
Pruebas de hipótesis
Gráficas estadísticas
- Box plots: son gráficas que describen las muestras de datos. Resulta
útiles en comparaciones gráficas de las medias de varias muestras.
- 94 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
>> seed=2;
>> rand(seed)
ans =
0.9501 0.6068
0.2311 0.4860
De esta forma, es posible generar números aleatorios para cada distribución. Esta
función proporciona un número aleatorio o una matriz de números aleatorios,
dependiendo de los argumentos que se especifiquen en la función. Por ejemplo, veamos
la manera de generar números aleatorios para la distribución beta. Se muestran cuatro
enunciados para obtener números aleatorios: el primero regresa un solo número
aleatorio, el segundo regresa una matriz de números aleatorios de 2x2, y el tercero y
cuarto regresan matrices de 2x3:
>> a=1; b=2; c = [.1 .5; 1 2]; d = [.25 .75; 5 10]; m = [2 3];
>> nrow=2; ncol=3;
>> r1=betarnd(a,b)
r1 =
0.0518
>> r2=betarnd(c,d)
r2 =
0.2016 0.0004
0.0372 0.4247
>> r3=betarnd(a,b,m)
r3 =
0.5666 0.1973 0.1975
0.2075 0.0370 0.4222
- 95 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
>> r4=betarnd(a,b,nrow,ncol)
r4 =
0.1624 0.4580 0.0848
0.0629 0.2750 0.1344
>> geomean(a)
ans =
0.6766 0.5486 0.4151
>> geomean(b)
ans =
0.2238
>> harmmean(a)
ans =
0.6439 0.5248 0.3603
>> harmmean(b)
ans =
0.0560
- 96 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
n
m n
1
x
i 1 i
mean: calcula la media de una muestra. Este comando se comporta igual que los
anteriores en cuanto al tipo de parámetro introducido, esto es entregando un solo valor
en el caso de n vector, y un vector renglón en el caso de una matriz. Retomando el
ejemplo anterior tenemos:
>> mean(a)
ans =
0.7079 0.5770 0.4666
>> mean(b)
ans =
0.5130
1 n
xj xij
n i 1
median: este comando calcula el valor de la mediana, la cual esta definida como
el 50% de la muestra. La mediana es un estimado robusto del centro de los datos de la
muestra. Del mismo modo que los anteriores, en el caso de tener un vector, entregará la
mediana de sus elementos. En cuanto a una matriz, entregará un vector renglón que
contiene la mediana de cada columna de la matriz. Retomando el ejemplo anterior
tenemos:
>> median(a)
ans =
0.7468 0.4660 0.5252
>> median(b)
ans =
0.6813
- 97 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Matlab cuenta con algunas funciones que permiten encontrar estas medidas de
dispersión. Dichas funciones se encuentran contenidas en el Statistics Toolbox. Algunas
de estas funciones son:
>> mad(a)
ans =
0.2100 0.2946 0.1383 0.2695
>> mad(b)
ans =
0.3333
>> range(a)
ans =
0.7190 0.8728 0.3767 0.7455
>> range(b)
ans =
0.9256
- 98 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
>> std(a)
ans =
0.2987 0.3879 0.1747 0.3335
>> std(b)
ans =
0.3791
>> var(a)
ans =
0.0892 0.1505 0.0305 0.1112
>> var(b)
ans =
0.1437
>> cov(a)
ans =
0.0374 0.0264 -0.0127 0.0422
0.0264 0.1602 -0.0069 -0.0100
-0.0127 -0.0069 0.0373 0.0394
0.0422 -0.0100 0.0394 0.1484
>> cov(b)
ans =
0.0519
- 99 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
>> corrcoef(a)
ans =
1.0000 0.3417 -0.3405 0.5661
0.3417 1.0000 -0.0890 -0.0650
-0.3405 -0.0890 1.0000 0.5296
0.5661 -0.0650 0.5296 1.0000
>> corrcoef(b)
ans =
1
cumprod: entrega como resultado el producto acumulativo de un arreglo. Si se
trata de un vector, el comando entrega un vector que contiene el producto acumulativo
de los elementos contenidos en el vector. En el caso de una matriz, entrega una matriz
del mismo tamaño que contiene los productos acumulativos de cada columna de la
matriz. Tomando como ejemplo las siguientes matrices:
A=
1 2 3
4 5 6
7 8 9
B=
1 2 3 4 5 6 7 8 9
Tenemos:
>> cumprod(A)
ans =
1 2 3
4 10 18
28 80 162
>> cumprod(B)
ans =
1 2 6 24 120 720 5040 40320 362880
- 100 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
>> cumsum(A)
ans =
1 2 3
5 7 9
12 15 18
>> cumsum(B)
ans =
1 3 6 10 15 21 28 36 45
En el caso en que se tenga una matriz, el comando entrega las diferencias por
renglón:
[X(2:m,:)-X(1:m-1,:)]
>> diff(A)
ans =
3 3 3
3 3 3
>> diff(B)
ans =
1 1 1 1 1 1 1 1
>> prod(A)
ans =
28 80 162
- 101 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
>> prod(B)
ans =
362880
A=
11 24 33
4 15 68
1 3 2
B=
1 3 2 4 9 5 8 6 7
Tenemos:
>> sort(A)
ans =
1 3 2
4 15 33
11 24 68
>> sort(B)
ans =
1 2 3 4 5 6 7 8 9
- 102 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Nuevo
Abrir
Guardar
Ejecutar
Espacio
de
edición
Esta ventana cuenta con botones que permiten un rápido acceso a las funciones
más utilizadas como guardar o ejecutar. Estos botones se muestran de igual forma en la
figura 10.1.1. Otra forma de ejecutar un programa es mediante el uso de la tecla F5. Una
vez que se ha ejecutado el programa, si existen errores, el programa no se ejecutará y los
errores aparecerán en la línea de comandos, marcados en rojo. Matlab tiene la
particularidad de indicar el error así como la línea de comando que lo genera.
» x=1:10
x=
1 2 3 4 5 6 7 8 9 10
- 103 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
En cierta forma se puede decir que el operador (:) representa un rango: en este
caso, los números enteros entre el 1 y el 10. Por defecto el incremento es 1, pero este
operador puede también utilizarse con otros valores enteros y reales, positivos o
negativos. En este caso el incremento va entre el valor inferior y el superior, en las
formas que se muestran a continuación:
» x=[Link]
x=
13579
» x=1:1.5:10
x=
1.0000 2.5000 4.0000 5.5000 7.0000 8.5000 10.0000
» x=10:-1:1
x=
10 9 8 7 6 5 4 3 2 1
for i=1:n
sentencias
end
De esta forma, las sentencias contenidas dentro del ciclo son repetidas n veces,
almacenando cada vez un nievo valor en la variable i (variable de bucle),
incrementándola de 1 en 1. sin embargo, el incremento que se maneja en el ciclo puede
variar. En el siguiente ejemplo se presenta un caso más general para la variable del
bucle, esto es siguiendo la forma:
Así, el bucle se ejecuta por primera vez con i=valor inicial, y luego i varía
dependiendo del incremento que se este manejando hasta llegar al valor final. Cabe
remarcar que dicho incremento puede ser positivo o negativo, incrementando o
decrementando el valor de la variable de bucle con respecto a su valor inicial.
for i=n:-0.2:1
sentencias
end
- 104 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
for i=1:m
for j=1:n
sentencias
end
end
Una última forma de interés del bucle for es en la que se utiliza una matriz para
variar el valor de la variable de bucle:
for i=A
sentencias
end
while condición
sentencias
end
donde condición puede ser una expresión vectorial o matricial. Las sentencias se
siguen ejecutando mientras haya elementos distintos de cero en condición, es decir,
mientras haya algún o algunos elementos true. El bucle se termina cuando todos los
elementos de condición son false (es decir, cero).
Del mismo modo que el comando for, es posible anidar ciclos while dentro de
otros ciclos while, así como es posible combinar ambos ciclos anidándolos unos en
otros.
- 105 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
if condición
sentencias
end
if condición1
bloque1
elseif condición2
bloque2
elseif condición3
bloque3
else % opción por defecto cuando no se cumplan las condiciones 1,2,3
bloque4
end
En este caso, la opción por defecto else puede ser omitida: si no está presente no
se hace nada en caso de que no se cumpla ninguna de las condiciones.
Una observación muy importante: la condición del if puede ser una condición
matricial, del tipo A==B, donde A y B son matrices del mismo tamaño. Para que se
considere que la condición se cumple, es necesario que sean iguales dos a dos todos los
elementos de las matrices A y B. Basta que haya dos elementos diferentes para que las
matrices no sean iguales, y por tanto las sentencias del if no se ejecuten. Análogamente,
una condición en la forma A~=B exige que todos los elementos sean diferentes dos a
dos. Bastaría que hubiera dos elementos iguales para que la condición no se cumpliese.
- 106 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
De esta forma, el objeto más general, o mejor dicho el de jerarquía más alta, es
el objeto root o raiz. Como su nombre lo dice, este objeto es la raíz de todos los demás
y sólo puede haber un objeto root. Dicho objeto no se crea pero es posible establecer
algunas características que afectan en el despliegue de gráficos.
El objeto root puede contener una o más ventanas (figures), donde se despliegan
los gráficos. Matlab no limita el número de ventanas que se puedan crear, esto solo se
encuentra limitado por las capacidades de la máquina donde se este programando.
- 107 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Todas las ventanas creadas son subordinadas del objeto root así como todos los
objetos gráficos se encuentran subordinadas a la ventana. Todas las funciones que
generan gráficos crean una ventana de forma automática en caso de que esta no exista.
En el caso en que existan más de una ventana, una de ellas es designada como la
ventana actual o current figure, siendo esta ventana en donde se realizan todos los
gráficos.
Una ventana puede tener también objetos de control conocidos como uicontrol
que son los controles de la interfaz de usuario que ejecuta rutinas cada vez que el
usuarui activa un objeto. Existen diversos controles de este estilo tales como botones,
barras de desplazamiento, botones de selección o de opción, etc.
Dentro del mismo nivel de jerarquía que los controles uicontrol se encuentra lo
que se conoce como uimenu, que es un objeto que genera menus parecidos a los que se
utilizan en el ambiente Windows, ejecuntando rutinas cuando el usuario selecciona
algun elemento del menu.
A su vez cada una de las ventanas puede tener uno o más ejes de coordenadas
(axes) que definene una region en una ventana y orienta a sus subordinados dentro de
dicha región. Los subordinados de los ejes son las imágenes, la luz, la línea, los
parches, las superficies y los textos. En el caso en que exisan múltiples ejes entonces de
forma análoga a lo que sucede con las ventanas se designa a uno de ellos como eje
actual o current axes que es el que sirve como objetivo al momento de desplegar un
objeto gráfico somo los subordinados antes mencionados.
El objeto light o luz define las fuentes de luz que afectan a los objetos parche y
superficie contenidos en los ejes. Este objeto no es visible, pero puede configurarse
controlando el tipo de luz, la fuente, el color, la ubicación y otras propiedades comunes
en los objetos gráficos.
Los objetos line o linea son objetos gráficos primitivos utilizadoe en la mayoria
de las gráficas en dos y tres dimensiones. Los ejes coordenados son establecidos por los
objetos axes, que posicionan y orientan a la línea.
Por otro lado, el objeto patch es un polígono relleno con bordes. Un solo objeto
patch puede contener múltiples caras, cada una coloreada de forma independiente con
colores sólidos o interpolados. De esta forma, los comandos fill, fill3 y contour3 pueden
crear un objeto patch, el cual se orienta según los ejes coordenados establecidos por el
objeto axes.
- 108 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Los objetos text o texto son cadenas de caracteres, los cuales se ubican en
relación a los ejes coordenados. En general, un objeto texto puede crearse medainte los
comandos title, xlabel, ylabel, zlabel, y gtext.
11.2. Identificadores
Cada uno de los objetos de Matlab tiene un identificador único conocido como
handle o id. Entonces, en el caso en que se desee acceder a las propiedades de n objeto
en particular, es posible asignar el handle del objeto a una variable en el momento de la
creacción de dicho objeto para evitar la busqueda de dicho valor en otro momento. De
cualquier forma, siempre es posible obtener el handle para un objeto existente mediante
el uso de la función findobj.
Algunos gráficos tienen muchos objetos, en cuyo caso tienen múltiples handles.
El objeto root (pantalla) es siempre único y su identificador es el cero. El identificador
de las ventanas puede asignarse de dos formas, la primera es un entero que aparece en la
barra de nombre de dicha ventana. La segunda es un número fraccionario conocido
como de punto flotante requiriendo por tanto de la precisión interna de Matlab. Los
identificadores de otros elementos gráficos son números float, que pueden ser obtenidos
como valor de retorno y almacenados en variables de Matlab.
Matlab puede tener varias ventanas abiertas, pero siempre hay una y sólo una
que es la ventana activa. A su vez una ventana puede tener varios ejes (axes), pero sólo
unos son los ejes activos y son el objetivo para crear a sus “hijos” o los elementos que le
son inferiores en jerarquía. Matlab dibuja en los ejes activos de la ventana activa. Por
tanto el objeto activo es el último objeto creado o que ha sido seleccionado por el
mouse.
Los identificadores de la ventana activa, de los ejes activos y del objeto activo
se pueden obtener respectivamente con los comandos gcf (get current figure), gca (get
current axes) y gco (get current object):
get(0,'CurrentFigure')
Esto es en el caso en que no se desee crear una ventana nueva dado que ya existe
una.
- 109 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
gca: devuelve el handle de los ejes activos para la ventana actual. En el caso en
que dichos ejes no existan, Matlab los crea y entrega su handle. De igual forma,en el
casoen que no se desea que se creen nuevos ejes, es posible utilizar la sintaxis:
get(gcf,'CurrentAxes')
Matlab dispone de funciones gráficas de alto y bajo nivel. Son funciones de alto
nivel las funciones plot, plot3, mesh, surf, fill, fill3, etc., utilizadas previamente. Cada
una de estas funciones llama a una o más funciones de bajo nivel. Las funciones de bajo
nivel crean cada uno de los 9 tipos de objetos disponibles y suelen tener el nombre del
objeto correspondiente: figure, axes, uicontrol, line, rectangle, patch, surface, image y
text.
Las funciones set y get sirven para consultar y cambiar el valor de las
propiedades de un objeto. La función set(id) lista en pantalla todas las propiedades del
objeto al que corresponde el handle (sólo los nombres, sin los valores de las
propiedades). La función get(id) produce un listado de las propiedades y de sus valores.
Las propiedades de un objeto pueden ser cambiadas o modificadas (salvo que sean read
only) con el comando set(id,‟propiedad‟,‟valor‟). Por ejemplo:
» set(li2,'color','r')
» fig = figure('color','w')
- 110 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Se puede utilizar la propiedad type para saber qué tipo de objeto (línea,
polígono, texto) corresponde a un determinado id. Esto es especialmente útil cuando el
id es un vector de valores correspondientes a objetos de distinto tipo:
» get(li2,'type')
» set(0,'DefaultFigureColor','w')
» set(0,'DefaultFigureColor','remove')
- 111 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Pop-up menus: este tipo de menu despliega una lista de opciones cuando
son seleccionados. Se utilizan para permitir al usuario seleccionar alguna
opción, ahorrando espacio en la ventana de objetos.
Push buttons: generan una acción cuando son presionados. Para activarlo
es necesario seleccionarlo mediante el mouse.
id_control = uicontrol(id_parent,...
‟Propiedad1‟,valor1,...
‟Propiedad2‟,valor2,...
... (otras propiedades)
‟callback‟,‟sentencias‟)
Las propiedades son las opciones del comando, que se explican en la sección
siguiente. Éstas tiene comillas simples (') a su izquierda y derecha, e irán seguidas de los
parámetros necesarios. En caso de que el conjunto de propiedades de un control exceda
una línea de código, es posible continuar en la línea siguiente, poniendo tres puntos
seguidos (…).
- 112 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Controla el color de fondo del objeto. Por defecto éste suele ser gris claro,
aunque puede tomar distintos valores: green, red, white, etc. Éstos irán definidos entre
comillas (por ejemplo 'green') o con un vector de tres elementos que indican las
componentes RGB (Red, Green, Blue).
Este comando especifica la acción a efectuar por Matlab al actuar sobre el control. Se
trata de una expresión, almacenada en una cadena de caracteres o en una función, que se
ejecutará al activar el control. Algunos controles tienen distintos tipos de callback según
el evento que reciban del usuario.
Este comando permite desactivar un control, de tal forma que una acción sobre
el mismo (por ejemplo, hacer click sobre el mismo) no produce ningún efecto. Los
valores que puede tomar esta variable son encendido (on) o apagado (off). Cuando un
control está desactivado suele mostrar un aspecto especial (una tonalidad más gris, por
ejemplo) que indica esta situación.
Esta opción determina la posición del título del control en el mismo (propiedad
string). Los valores que puede tomar son: left, center o right. En los botones y en otros
controles la opción por defecto es center.
Esta opción determina el máximo valor que puede tomar la propiedad value
cuando se utilizan cajas de textos, botones de opción o barras de desplazamiento. En
caso de botones tipo on/off, que solamente admiten las dos posiciones de abierto y
cerrado, esta variable corresponde al valor del mismo cuando está activado. El valor
mínimo (min) actúa de modo análogo.
Esta opción especifica el id del objeto padre, conocido así al objeto que se
encuantra por encima de otro en jerarquía. Éste debe ir siempre en primer lugar.
- 113 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Determina la posición y el tamaño del control dentro del objeto padre. Para ello
se define un vector de cuatro elementos, cuyos valores tienen el siguiente orden:
[izquierda, abajo, ancho, alto]. En este caso, izquierda y abajo son la distancia a la
esquina inferior izquierda de la figura y ancho y alto las dimensiones del control. Por
defecto se mide en pixeles, aunque con la propiedad units las unidades se pueden
cambiar.
Esta opción define el nombre que aparecerá en el control. Cuando el control sea
una opción de menú desplegable (popup menu), los nombres se sitúan en orden dentro
del string, separados por una barra vertical (|).
Unidades (units)
Valor (value)
Permite utilizar el valor que tiene el control en un momento dado. Según sea uno
u otro el programa ejecutará una acción. La variable value permite controlar dicho
valor. Esta propiedad es especialmente importante en las barras de desplazamiento
(sliders), pues son controles especialmente diseñados para que el usuario introduzca
valores. También en el control list, en donde el valor representa el número de orden que
en la lista de opciones ocupa el elemento elegido por el usuario.
Visible (visible)
- 114 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
x=-4:0.01:4;
y=sin(x);
figure
pbstart = uicontrol(gcf,'Style','push',...
'BackGroundColor',[ 1.000 1.000 0.502 ],...
'Position',[10 5 80 22],...
'String','Start Plot',...
'CallBack','plot(y)');
- 115 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
Por ejemplo, el siguiente conjunto de instrucciones crea una caja con dos opciones.
Ambas permiten el control de los ejes, de manera independiente, dentro de la función
plot:
- 116 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
- 117 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
- 118 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
De esta forma comprobamos que las acciones que se realizan mediante estos
botones son independientes entre sí, y que al tener más de un botón de este estilo resulta
posible seleccionar más de uno dentro de la lista.
- 119 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
„set(td_in,''Value'',0),set(gca,''TickDir'',''out'')']);
- 120 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
- 121 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
% Etiqueta de la barra
elv_label = uicontrol(fig,'Style','text','Pos',[60 40 65 20],…
'String','Elevación');
- 122 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
- 123 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
close all;
pantalla = get(0,'ScreenSize'); xw=pantalla(3); yw=pantalla(4);
fig=figure('Position',[xw/4 yw/4 xw/2 yw/2])
% Definir el menú pop-up
popcol = uicontrol(fig,'Style','popup',...
'String','magenta|rojo|amarillo|verde|cyan|azul|negro|blanco',...
'Position',[xw/16 yw/16 xw/12 yw/32],...
'CallBack',['cb_col = [''M'',''R'',''Y'',''G'',''C'',''B'',''K'',''W''];',...
'set(gcf,''Color'',cb_col(get(popcol,''Value'')))']);
- 124 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
- 125 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
- 126 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
fig=gcf; clf;
ft_dir = uicontrol(gcf,...
'Style','frame',...
'Position',[30 30 120 85]);
pbstart = uicontrol(gcf,...
'Style','push',...
'Position',[40 40 100 25],...
'String','Start Plot',...
'CallBack',['disp(''Start Plot'')']);
pbstart = uicontrol(gcf,...
'Style','push',...
'Position',[40 80 100 25],...
'String','Stop Plot',...
'CallBack','disp(''Stop Plot'')');
- 127 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
- 128 -
Apuntes de Matlab Departamento de Ingeniería en Telecomunicaciones
[Link]
- 129 -