Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. Introducción 6
1.1. Presentación del curso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2. Entorno Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3. Encuesta inicial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2. Entorno de trabajo 7
2.1. Matlab Desktop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3. Aritmética elemental 8
3.1. Edición en la lı́nea de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2. Aritmética elemental escalar (real y compleja) . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2.1. Operaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2.2. Números complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2.3. Constantes predefinidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2.4. Inf y NaN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5. Aritmética matricial 12
5.1. Vectores y matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.2. Operaciones matriciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.3. Funciones matriciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.4. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1
Índice general
7. Operadores lógicos 18
7.1. Operadores lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
7.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
10.Estructura de selección 24
10.1. Estructura if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
10.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
13.Funciones 30
13.1. Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
13.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
14.Programación modular 32
14.1. Programación modular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
14.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
17.Librerı́as generales 40
17.1. Librerı́as asociadas con la utilización de matrices y funciones . . . . . . . . . . . . . . . . . . 40
17.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
19.Dibujo de funciones 50
19.1. Comando fplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
19.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
26.Dibujo de mallados 69
26.1. Dibujo de mallados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
26.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
32.Debugger 80
32.1. Opciones del debugger de MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
32.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
33.Creación de librerı́as 83
33.1. Programación modular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
33.2. Ejercicio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Nota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
34.Estadı́stica Descriptiva 85
34.1. Lectura y escritura en formato tabular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
34.2. Tabulación de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
34.3. Medidas de localización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
34.4. Medidas de orden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
34.5. Medidas de dispersión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
34.6. Otras funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
34.7. Representaciones gráficas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
34.8. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
35.Modelos de Probabilidad 92
35.1. Modelos de probabilidad implementados en MATLAB . . . . . . . . . . . . . . . . . . . . . . 92
35.2. Función de Densidad/Probabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
35.3. Función de Distribución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
35.4. Inversa de la Función de Distribución (percentiles) . . . . . . . . . . . . . . . . . . . . . . . . 93
35.5. Números aleatorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
35.6. Media y varianza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
35.7. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Introducción
6
Hora 2
Entorno de trabajo
Command Window
−→ Ventana de comandos.
Command History
−→ Historial de comandos.
Current Directory
−→ Directorio actual.
2.2. Ejercicios
7
Hora 3
Aritmética elemental
. . . +[ENTER]
−→ Continuación de comando en la lı́nea siguiente.
clc
−→ Borra el contenido de la pantalla y coloca el cursor en la primera lı́nea.
[Esc]
−→ Borra la lı́nea.
%
−→ Todo lo que aparece detrás del sı́mbolo % y en la misma lı́nea se considera un comentario.
Ej.: % Esto es un comentario
,
−→ Separa instrucciones. Ej.: 2+3, cos(pi)
;
−→ Evita la salida de resultados por pantalla.
En, en
−→ Notación cientı́fica. Ej.: E4,E-8,e5
[Ctrl]+[c]
−→ Detiene la ejecución de cualquier comando o función.
3.2.1. Operaciones
+, −, ∗, /, \,ˆ
−→ Suma, resta, multiplicación, división, división inversa y potenciación (real o com-
pleja).
8
3 Aritmética elemental
Asignación
−→ Ej.: z=2-3i, z=-4+7j, z=2+2*i
pi
−→ Número π.
i, j
−→ Unidad imaginaria.
eps
−→ Épsilon de la máquina.
Inf, inf
−→ Representa el infinito.
NaN, nan
−→ “Not a Number” (indeterminación).
3.3. Ejercicios
iniciales + [TAB]
−→ MATLAB ofrece un sencillo asistente para recordar la sintaxis de sus fun-
ciones. Concretamente, la orden iniciales + [TAB] devuelve todas las funciones disponibles cuyo
nombre comienza con iniciales. Este procedimiento no es sensible a mayúsculas y minúsculas.
Ej.: Conto + [TAB]
format short e
−→ Formato corto con mantisa y exponente. Ej.: 7.6923e-002
format short g
−→ “Mejor” formato fijo o punto flotante con cinco dı́gitos. Ej.: 0.076923
format long
−→ Formato largo. Ej.: 0.07692307692308
format long e
−→ Formato largo con mantisa y exponente. Ej.: 7.692307692307693e-002
format long g
−→ “Mejor” formato fijo o punto flotante con quince dı́gitos. Ej.: 0.0769230769230769
format rat
−→ Formato racional. Ej.: 1/13
format compact
−→ Salida por pantalla de forma “compacta”, es decir, ocupando menos espacio.
10
4 Funciones matemáticas y formatos de salida
4.3. Ejercicios
1
√
1. Utiliza los diferentes formatos de salida presentados para escribir los siguientes números: 33 , 3, π 2 ,
(1 − i)0,5 .
2. Evalúa las siguientes funciones en los puntos indicados (utiliza la ayuda para encontrar la expresión
de cada función):
a) f (x) = cos x en x = π, π 2 , i, π · i
b) f (x) = log x en x = 10, i, 1 + i, 0
c) f (x) = log10 x en x = 102 , 0, eps, 1, −1
√
d ) f (x) = x en x = 16, −1, 1 + i
e) f (x) = sin x en x = π, 1 + i, inf
f ) f (x) = csc x en x = π/2, π, i
g) f (x) = csc x en x = π, π/2, i
h) f (x) = sin x/x en x = 0, eps, inf
3. Calcula log 3. Comprueba que en formato racional log 3 = 11996/3051. Realiza la diferencia log 3 −
11996/3051. ¿El resultado es cero? ¿Porqué?
4. MATLAB dispone de la función rand para generar números aleatoriamente en el intervalo (0,1) abierto.
a) Encuentra el nombre de una función que calcule el máximo de un conjunto de datos sabiendo que
empieza por max. Utiliza la ayuda para eliminar “candidatos”.
b) Combina la función rand con la obtenida en el apartado anterior para obtener el máximo de
100000 números previamente generados por ti al azar del intervalo (0,1).
c) ¿Es cierto realmente que los números generados son menores estrictamente que 1?
Aritmética matricial
Vector
−→ Los vectores se introducen entre corchetes y los elementos están separados por espacios
o comas. Ej.: [1 2 3]
Matriz
−→ Las matrices se introducen por filas. Los elementos de una misma fila están separados
por blancos o comas, mientras que las filas están separadas por pulsaciones de [ENTER] o por “;”. Ej.:
[1 2 3; 4 5 6; 7 8 9]
5.4. Ejercicios
12
5 Aritmética matricial
1 2 1 1 1 1 2
2. 1 2 1 + 1 1 15. 1 1 .ˆ (−1)
1 2 1 1 1 1 1
1 2 1 1 1 1 2 1
3. 1 2 1 ∗ 2 1 16. inv 2 1 1
1 2 1 1 1 1 1 1
1 2 1 2 1 1 1 2 1
4. 1 2 1 ∗ 2 1 1 17. 2 1 1 ˆ(−1)
1 2 1 1 1 1 1 1 1
1 2 1 2 1 1 0 1
5. 1 2 1 . ∗ 2 1 1 18. log 2 1
1 2 1 1 1 1 1 1
1 2 1 2 1
6. 2 1 1 ˆ2 19. 1/ 1 1
1 1 1 1 1
1 2 1 2 1
7. 2 1 1 .ˆ 2 20. 1 ./ 1 1
1 1 1 1 1
!
1 2 1 1
21. 1 ./
8. −1 1 ˆ2
0 1
1 1 ! !
eps 1 eps 1
22. sin ./
1 2 1 eps 1 eps
9. −1 1 .ˆ 2
! !
1 1 eps 1 eps 1
23. sin /
1 eps 1 eps
1 2 1 2
! !
10. 1 1 ˆ 1 1
eps 1 eps 1
1 1 1 1 24. sin \
1 eps 1 eps
1 2 1 2
! !
eps 1 eps 1
11. 1 1 .ˆ 1 1
25. sin .\
1 eps 1 eps
1 1 1 1
π
26. sin([1 π 2 ])
1 2
π
12. sqrt 1 1
27. cos([0 4 ; π 1])
1 1
28. log([1 2 3 ; 4 5 6 ; 7 8 9])
1 2
13. 1 1 .ˆ ( 21 )
1 1
1 2
14. 1 1 ˆ(−2)
1 1
magic(n)
−→ Matriz “mágica” de tamaño n × n.
linspace(x1, x2, n)
−→ Vector con n componentes equiespaciadas entre x1 y x2.
n:h:k
−→ Secuencia de números desde n hasta k con incremento h (el incremento puede ser
negativo).
n:k
−→ Secuencia de números desde n hasta k con incremento 1.
diag(vector)
−→ Matriz diagonal cuyos elementos diagonales son las componentes de vector.
Para guardar cualquier tipo de dato (número, vector, matriz, cadena de caracteres, etc.) es necesario
asignarle a una variable que lo almacena. De esta manera podremos utilizarlo cuantas veces queramos
a lo largo de la sesión de trabajo. Ej.: a=1; v=[1 2 3]; A=[1 2 3; 4 5 6; 7 8 9]; d=’Hola’
14
6 Generación automática de datos y asignación de variables
input
−→ Permite la introducción ‘interactiva’ de datos a través del teclado.
Ej.: X=input(’Introduce una matriz’)
6.3. Selección
Acceso a sus elementos
−→ Se accede a los elementos de una matriz poniendo los ı́ndices de refe-
rencia entre paréntesis, separados por coma. Se accede a los elementos de un vector poniendo el ı́ndice
de referencia entre paréntesis. Ej.: A(2,3), v(2), A(1:4,3)
[ ]
−→ Permite seleccionar varias filas o columnas. Ej.: A([1 3 5],2), A(3,[3 1])
:
−→ Selecciona filas o columnas completas.
Ej.: A(:,3), A(1:4,:), A(:,[2 4]), A(1:3,2:4), A(:)
who
−→ Visualiza las variables residentes en el espacio de trabajo.
whos
−→ Visualiza las variables residentes en el espacio de trabajo con información adicional
(tamaño, espacio fı́sico y tipo).
ans
−→ Almacena el resultado de la última operación.
Workspace
−→ Espacio de variables.
6.6. Ejercicios
2. Asigna a las variables v1, v2 y v3 los vectores (1, 2, 3), (−1, 0, −3) y (1, 1, 1, 1) ejecutando los siguientes
comandos:
2. v1 + v2 12. v1. ∗ v3
3. v1 + v3 13. v1.0 ∗ v2
4. 2 ∗ v1 14. v1 ∗ v2.0
3. A1 + A2 15. A = magic(3)
4. A2 ∗ A1 16. sum(A)
5. A1 ∗ A3 17. sum(At )
5. Realiza las siguientes operaciones sobre la matriz A = magic(10) y observa los resultados obtenidos:
1. A(1, 2 : 3)
2. A(2 : 4, 2)
3. A(1 : 3, 4 : 5)
4. A([1, 3, 5, 7, 9], [1, 3, 5, 7, 9])
5. A(4 : end, 1)
6. A(4 : end, 1 + 2 : 4)
7. A(4 : end, (1 + 2) : 4)
Operadores lógicos
&, |, ˜, xor
−→ Operadores lógicos “y”, “o”, “no”, “o excluyente”. Ej.: 0=false, 1=true
7.2. Ejercicios
18
7 Operadores lógicos
! ! !
1 2 0 0 1 0
3. Sean A = ,B= ,C= . Realiza las siguientes operaciones:
1 1 1 1 1 0
1. A + B 7. xor(A, B)
2. A + ˜B 8. A&B
3. A. ∗ B 9. A&B + C
• desde la ventana Command Window escribiendo el nombre del fichero (sin extensión), o bien
• desde la ventana Current Directory eligiendo la opción Run que aparece al hacer click con el botón
derecho del ratón sobre el fichero.
8.3. Ejercicios
1. Ejecuta el fichero Entorno01.m y corrige el error abriéndole desde el mensaje de error reseñado en la
ventana de comandos.
x=rand(3,1);
y=rand(3,1);
z=x+y.^2;
hist(z);
20
8 Editor de texto. Ficheros .m
Grabalos en un fichero .m .
3. Ejecuta Entorno03.m Busca los distintos espacios de variables en un problema con distintas funciones.
disp(A)
−→ Muestra tablas de caracteres por pantalla. Ej.:
A=[’hola ’,’adios’];
disp(A)
input
−→ Lectura de datos desde el teclado. Ej.:
z=input(’El valor de la variable z es:\n’)
save
−→ Copia variables del espacio de trabajo en un fichero. Ej.:
save % Copia en el fichero matlab.mat todas las variables del espacio de trabajo.
save datos % Copia en el fichero datos.mat todas las variables del espacio de trabajo.
save data.txt -ascii % Copia con formato ascii en el fichero data.txt todas las
% variables del espacio de trabajo.
save data.txt X Y -ascii % Copia con formato ascii en el fichero data.txt las
% variables X e Y del espacio de trabajo.
load
−→ Copia en el espacio de trabajo las variables o datos contenidos en un fichero. Ej.:
load % Copia en el espacio de trabajo las variables contenidas en el fichero
% matlab.mat
22
9 Lectura y escritura sin formato en fichero
diary
−→ Guarda en un fichero de texto la secuencia de comandos ejecutados a los largo de la sesión.
Ej.:
diary nombre.txt
.
.
.
diary off
9.2. Ejercicios
1. Guarda en el fichero de texto sesion.txt toda la secuencia de comandos que realices para resolver
este ejercicio.
2. Genera un vector v con los n primeros números múltiplos de tres (n debe introducirse por teclado).
5. Calcula v*8.
13. Observa la secuencia de comandos que has realizado durante la resolución de este ejercicio.
Estructura de selección
10.1. Estructura if
if condición lógica
..
. % secuencia de comandos
end
Ej.:
if condición lógica
..
. % secuencia de comandos
else
..
. % secuencia de comandos por defecto
end
Ej.:
24
10 Estructura de selección
Ej.:
10.2. Ejercicios
1. Edita un fichero de comandos que te permita calcular la media de un conjunto de datos almacenados
dentro de una matriz A.
2. Escribe un fichero de comandos que transforme pesetas en euros (1 euro =166.386 pesetas).
3. Escribe un fichero de comandos que calcule una matriz aleatoria n × n con números naturales entre 1
y 10.
4. Edita un fichero de comandos que permita seleccionar de un número natural de dos dı́gitos la cifra de
las unidades y la cifra de las decenas.
5. Escribe un fichero de comandos que te permita averiguar si un número n es divisible por 13.
6. Edita un fichero de comandos que elimine la primera columna de una matriz A cuando todos los
elementos de dicha columna sean cero.
8. Escribe un fichero de comandos que permita obtener el valor absoluto de un número almacenado en
la variable x.
9. Escribe un fichero de comandos para calcular los valores mı́nimo y máximo de tres números almace-
nados en un vector de dimensión tres llamado datos e introducidos con el comando input.
10. Construye un fichero de comandos que simule la extracción al azar de una carta en una baraja española.
Ejecuta dicho fichero dos veces. ¿Qué cartas obtienes?
n=1;
while prod(1:n)<1e100
n=n+1;
disp(’Nos llegamos en’),n
end
11.2. Ejercicios
1. Escribe un fichero de comandos para encontrar el menor entero no negativo n tal que 2n > 100π sin
utilizar la función logarı́tmica.
2. Edita un fichero de comandos que permita calcular el factorial de un número leido mediante el comando
input y guardado en la variable n.
3. Escribe un fichero de comandos que simule el experimento aleatorio consistente en extraer al azar
cartas de una baraja española hasta la aparición del primer as. Ejecuta el fichero de comandos una
vez y escribe la secuencia de resultados obtenidos.
5. Edita un fichero de comandos que simule un juego de dados entre dos jugadores en el que gana quien
primero llega a sumar 21 en sucesivas tiradas alternas entre ambos jugadores.
6. Modifica el fichero anterior para conocer si gana el jugador que comienza el juego. Repite 1000 veces
el juego y, a partir de los resultados obtenidos, decide si es mejor empezar el juego, o por el contrario,
es mejor que empiece el adversario.
7. Edita un fichero de comandos que simule el experimento aleatorio consistente en lanzar sucesivamente
un dado hasta obtener 10 doses. Ejecuta el fichero anterior e indica cuántas tiradas has necesitado y
en cuáles has obtenido un dos.
27
Hora 12
f or contador
..
. % secuencia de comandos
end
−→ El contador puede ser n = 1 : 1 : 10 ó n = [1 6 3,2 8]
Ej.:
for n=1:1:10 % Cuenta desde 1 hasta 10 de 1 en 1.
y(n)=n^2; % Declara un vector cuyas componentes son de la forma n^2.
x(n)=2*y(n); % Declara un vector cuyas componentes son de la forma 2*y_n.
end % Fin del bucle.
12.2. Ejercicios
1. Edita un fichero de comandos que permita calcular el factorial de un número guardado en la variable
n.
2. Escribe la tabla de multiplicar de un número entero positivo leı́do a través del teclado.
3. Escribe un fichero de comandos que calcule la suma de los n primeros números naturales.
4. Se definen los números triangulares como los obtenidos de sumar los números naturales sucesivos:
1, 2, 3, . . ., es decir, los primeros números triangulares son: 1, 3, 6, . . .. Escribir un programa que muestre
por pantalla los n primeros números triangulares.
5. Escribe un fichero de comandos que permita introducir a través del teclado un número natural n y
que muestre los n primeros números pares.
6. Escribe un fichero de comandos que permita introducir a través del teclado un número natural n y
que muestre los n primeros números impares.
28
12 Estructura iterativa for
Funciones
13.1. Funciones
1. Se guarda como un fichero de texto nombre.m cuyo nombre “suele” coincidir con el de la función.
2. Desde la propia función se puede hacer llamadas a otras funciones o incluso a ella misma (lo que se
conoce como recursividad).
3. Las variables usadas en cada función toman un valor local. Por tanto, una variable con el mismo
nombre en una función y en el programa principal mantiene el valor que tome en cada uno de los
contextos.
Ej.:
% Calcula una aproximacion al numero e utilizando el polinomio de Taylor.
m=input(’Da el numero de sumandos \n’);
x=0;
for n=1:1:m
x=x+1/mifactorial(n); % Llamada a nuestra funcion mifactorial
end
x
function [k]=mifactorial(n)
if (floor(n)==n)&(n>0)
k=1;
for m=2:1:n
k=k*m;
end
end
30
13 Funciones
13.2. Ejercicios
1. Programa una función llamada stat1 que calcule sobre un conjunto de datos almacenados en un vector
llamado datos su media y el número de datos.
2. Programa una función que calcule el máximo y el mı́nimo de dos números y utilı́zala para obtener el
máximo y el mı́nimo de tres números.
4. Crea una función con los programas realizados en los ejercicios 3, 4 y 10 de la hora estructura de
selección que simule el resultado obtenido al extraer n cartas de una baraja española. El argumento
de entrada es n y la salida debe ser un vector de la siguiente forma (As de copas, Sota de bastos,....).
Programación modular
Disponer de un catálogo de funciones preparadas para su utilización sobre cualquier otro programa.
Desarrollar programas incrementalmente. De esta forma siempre se construye sobre algo que ya ha
sido comprobado y que funciona. Si aparece algún error, lo más probable es que se deba a lo último
que se ha añadido, y su búsqueda está acotada y es mucho más sencilla.
Como recomendaciones generales para la programación sobre cualquier lenguaje debemos señalar:
1. Crear un programa principal que actúe como distribuidor del conjunto de funciones utilizadas.
2. Pensar bien las cosas (sobre una hoja de papel en blanco mejor que sobre la pantalla del PC) siempre
es rentable, porque disminuye el tiempo de depuración y eliminación de errores.
3. Escribir el código de un modo claro y ordenado, introduciendo comentarios, utilizando lı́neas en blanco
para separar distintas partes del programa, sangrando las lı́neas para ver claramente el rango de las
bifurcaciones y bucles, utilizando nombres de variables que recuerden el significado de la magnitud
que almacenan, etc.
Particularmente, para la programación con MATLAB, cabe señalar la importancia de “vectorizar” los
algoritmos de cálculo, es decir, de realizarlos con vectores y matrices y no con variables escalares dentro de
bucles.
14.2. Ejercicios
1. Elabora un programa que simule la hora de salida y la hora de llegada de un autobús de lı́nea de 40
plazas. El viaje sigue las siguientes pautas:
32
14.2 Programación modular
Se pide encontrar la hora de salida y la hora de llegada en 100 viajes. ¿Cuál es la hora media de llegada
del autobús en esos 100 viajes?
Indicaciones:
a) Construir una función n=numeroaleatorio(a,b) que devuelva un número aleatorio (no necesa-
riamente entero), n, entre a y b. Utiliza la función rand.
b) Construir una función t=subidaviajero que devuelva el tiempo que tarda en subir un viajero.
Utiliza la función numeroaleatorio.
c) Construir una función t=duracionviaje que devuelva el tiempo que el autobús tarda en recorrer
el trayecto. Utiliza la función numeroaleatorio.
2. Considera que el autobús del ejercicio anterior realiza cinco paradas intermedias. Además de las pautas
anteriores se añaden las siguientes:
El tiempo que el autobús emplea en recorrer el trayecto entre dos paradas consecutivas es un
número aleatorio entre 25 y 37 minutos.
En cada una de ellas se pueden bajar un número aleatorio de viajeros entre 0 y el número total
de los que permanecen en el autobús.
El tiempo de bajada de cada viajero del autobús es idéntico al de subida.
El autobús sólo tiene una puerta de bajada. De esta forma, el tiempo de bajada de cada viajero
es la suma del tiempo que tardan él y todos lo viajeros que bajan antes que él.
Aparece un tiempo adicional para recoger el equipaje, que es un número aleatorio inferior a 2
minutos 30 sg. para cada viajero.
El autobús sale de la parada cuando todos los viajeros han recogido su equipaje.
Se pide encontrar la hora de salida y la hora de llegada en 100 viajes. ¿Cuál es la hora media de llegada
del autobús en esos 100 viajes? ¿Cuál es el número medio de viajeros que se bajan en la segunda parada
en esos 100 viajes?
Indicaciones:
a) Modifica la función t=duracionviaje para que devuelva el tiempo que el autobús tarda en
recorrer cada tramo.
b) Construir una función t=numeroviajero(a) que devuelva el número de viajeros que bajan en
cada parada. Modifica la función numeroaleatorio para que devuelva un número natural entre 0
y a. Se debe tener en cuenta que el número de viajeros en el autobús disminuye en cada parada.
c) Construir una función t=bajadaviajero que devuelva el tiempo que tarda en bajar un viajero.
Utiliza la función numeroaleatorio.
d) Construir una función t=recogidaequipaje que devuelva el tiempo que un viajero tarda en
recoger el equipaje. Utiliza la función numeroaleatorio.
e) Para contabilizar el tiempo de salida utiliza un vector de dimensión el número de viajeros que
abandonan el autobús que almacenará el tiempo que tarda cada uno de ellos en abandonar la
parada (bajar del autobús + recoger el equipaje). El tiempo de salida es el máximo de estos
valores.
3. Considera que en el viaje del ejercicio anterior los viajeros no se encuentran en la parada a la hora de
salida. Además de las pautas anteriores se añaden las siguientes:
Se pide encontrar la hora de salida y la hora de llegada en 100 viajes. ¿Cuál es la hora media de llegada
del autobús en esos 100 viajes? ¿Cuál es el número medio de viajeros que se bajan en la segunda parada
en esos 100 viajes? ¿Cuál es el número medio de viajeros impuntuales en esos 100 viajes?
Indicaciones:
fclose(nombre)
−→ Cierra el fichero abierto cuyo identificador es nombre. En caso de que se produzca
algún error al cerrar el fichero MATLAB devolverá el valor −1 y si no es ası́ devolverá 0.
fprintf(nombre,format,datos)
−→ Escribe el valor de una o varias variables en el fichero con el iden-
tificador nombre abierto previamente. El fichero debe cerrarse al finalizar esta operación. El formato
de escritura de los datos se indica en el campo format utilizando parámetros como:
• % para formatos numéricos. Sus opciones son: d entero, f real, e exponencial, s cadena de carac-
teres, etc.
• \n provoca un salto de lı́nea.
Ej.:
t=0:1:10 % Crea un vector con los datos 0,1,2,3,...,10.
y=t.^2 % Crea un vector con los datos 0,1,4,9,...,100.
35
15 Escritura con formato en fichero
% el fichero.
15.2. Ejercicios
2. Utiliza fprintf para escribir en el fichero noexiste.txt (sin crearlo previamente) la cadena de ca-
racteres Prueba de escritura en el fichero noexiste.txt sin crearlo previamente. Una vez finalizada esta
operación observa el contenido de dicho fichero.
4. Utiliza fprintf para escribir en la primera lı́nea del fichero sucesion.txt (sin crearlo previamente)
la secuencia 1:1:10 (usa el formato ’%1d\t’). Una vez finalizada esta operación observa el contenido
de dicho fichero.
5. Utiliza fprintf para añadir al fichero sucesion.txt (sin borrar su contenido previo) la secuencia
11:1:20, de forma que cada uno de los números que la compone ocupe un renglón distinto (para ello
modifica el formato ’%1d\n’). Una vez finalizada esta operación observa el contenido de dicho fichero.
6. Utiliza fprintf para escribir en el fichero sucesion.txt (borrando su contenido previo) la matriz
rand(3,10). Los datos escritos deben conservar su estructura original (usa para ello el formato
’%1.4f %1.4f %1.4f\n’. Una vez finalizada esta operación observa el contenido de dicho fichero.
7. Genera una matriz mágica de tamaño 6 y escribe su contenido en un fichero de texto llamado
salida.txt.
8. Genera una matriz con 10 filas y 4 columnas formada por números aleatorios y escribe su contenido en
un fichero de texto llamado salida.txt. Utiliza para ello una cifra decimal en las columnas impares
y 4 cifras decimales en las columnas pares.
a) Solicita que el usuario introduzca por teclado una M, una R, o un cero si su escritor favorito es,
respectivamente, Miguel de Cervantes, Juan Ramón Jiménez o ninguno de los dos.
b) Escriba en el fichero escritor.dat:
“En un lugar de la Mancha...” si ha elegido a Cervantes.
“Platero es suave...” si prefiere a Juan Ramón Jiménez.
“A ti lo que te gustan son las Matemáticas”, en otro caso.
c) Escriba los valores generados y la media en un fichero llamado salida.txt, con formato ascii.
11. Crea una función para gestionar los salarios de una empresa. Para ello:
Ej.:
nombre=fopen(’parabola.dat’,’r’) % Abre el fichero llamado parabola.dat
% para leer de el (r)
16.2. Ejercicios
a) Genera los vectores w1 = (3, 5, 6, 7, 9) y w2 con los 3 primeros números múltiplos de 11.
b) Graba en el fichero datos.txt con formato ascii las variables w1 y w2 anteriores.
c) Borra el espacio de trabajo. Comprueba que lo has hecho.
38
16 Lectura de fichero con formato
2. Utiliza fscanf para leer y guardar las dos primeras columnas del fichero sucesion.txt. en la variable
U. Comprueba que la operación se ha realizado correctamente visualizando el contenido de U.
3. El fichero secuencia.dat contiene una sucesión de números enteros positivos o cero. Crea una función
que lea dicha secuencia, invierta los valores positivos y sustituya los ceros por la cadena no inversible.
Escribe los resultados obtenidos en el fichero secuencia.dat, debajo de la sucesión original.
4. El fichero quiniela.txt contiene los 15 resultados de una quiniela (1, X ó 2) almacenados a razón de
un signo por lı́nea y separados por retorno de carro. Elabora una función que lea dichos resultados,
contabilice el número n de empates, y escriba en el fichero resultados.dat y por pantalla el mensaje:
La quiniela arroja n empates.
5. Lee el fichero nombresnumeros.txt y sustituye la columna correspondiente al DNI por una columna
que contenga el NIF.
9. Considera la variable edad anterior y clasifica a sus individuos en “jóvenes” si tienen menos de 18 años
y en “adultos” si tienen más de 18 años. Almacena los resultados en la variable situacion.
10. Guarda las variables nombre, apellido, edad y situacion en el fichero listado.txt con el siguiente
formato:
Librerı́as generales
OPS: operadores.
union(A,B)
−→ A ∪ B. Se ordena el resultado. Ej.:
A=[1 2 4];B=[1 2 3];C=union(A,B)
C =
1 2 3 4
unique(A)
−→ Devuelve un vector cuyas componentes son las de A ordenadas y sin valores repetidos.
Ej.:
unique([3 4 1 4 -2])
ans =
-2 1 3 4
intersect(A,B)
−→ A ∩ B. Se ordena el resultado. Ej.:
A=[4 3 2 1];B=[2 2 3];C=intersect(A,B)
C =
2 3
setdiff(A,B)
−→ A − B. Se ordena el resultado. Ej.:
A=[1 2 4];B=[1 2 3];C=setdiff(A,B)
C =
4
setxor(A,B)
−→ A ∪ B − A ∩ B. Se ordena el resultado. Ej.:
A=[-5 6 2 1 4 6 1];B=[1 3 5 5 6];setxor(A,B)
ans =
-5 2 3 4 5
ismember(x,A)
−→ Función lógica que devuelve 1 si x ∈ A y 0 si x ∈
/ A. Ej.:
40
17 Librerı́as generales
length(A)
−→ Longitud del vector v. Ej.:
A=[1 2 3 4 5 6];length(A)
ans =
6
isempty(A)
−→ Función lógica que devuelve 1 si la matriz A es vacı́a y 0 si no lo es. Ej.:
A=[];isempty(A)
ans =
1
A=[1 2;3 4];isempty(A)
ans =
0
isequal(A,B)
−→ Función lógica que devuelve 1 si las matrices A y B son iguales y 0 si no lo son.
Ej.:
A=[1 2;3 4];B=[1 3;2 4];isequal(A,B)
ans =
0
A=[1 2;3 4];B=[1 2;3 4];isequal(A,B)
ans =
1
isnumeric(A)
−→ Función lógica que devuelve 1 si la variable A es numerica y 0 si no lo es. Ej.:
A=[1 2;3 4];B=’caracteres’;isnumeric(A),isnumeric(B)
ans =
1
ans =
0
islogical(A)
−→ Función lógica que devuelve 1 si la variable A es lógica y 0 si no lo es. Ej.:
islogical([1 0])
ans =
0
A=-2==1;islogical(A)
ans =
1
reshape(A,m,n)
−→ Crea una matriz de m filas y n columnas a partir de los elementos de A. Si A
es una matriz, sus elementos se distribuyen por columnas. Ej.:
A=[1 2 3;4 5 6]
A =
1 2 3
4 5 6
reshape(A,6,1),reshape(A,1,6)
ans =
1
4
2
5
3
6
ans =
1 4 2 5 3 6
reshape(A,3,2)
ans =
1 5
4 3
2 6
tril(A),triu(A)
−→ “Señalan” los elementos que forman las matrizes triangular inferior y superior
de A respectivamente haciendo cero el resto. Ej.:
A
A =
1 2 3
4 5 6
tril(A),triu(A)
ans =
1 0 0
4 5 0
ans =
1 2 3
0 5 6
fliplr(A),flipud(A)
−→ Reordena las componentes de la matriz A simetricamente en las columnas
(left-right) y en las filas (up-down) respectivamente. Ej.:
A=[1 2;3 4;5 6]
A =
1 2
3 4
5 6
fliplr(A),flipud(A)
ans =
2 1
4 3
6 5
ans =
5 6
3 4
1 2
rot90(A)
−→ Reordena las componentes de la matriz A mediante un giro de 90 grados en sentido
antihorario. Ej.:
A=[1 2;3 4;5 6],rot90(A)
A =
1 2
3 4
5 6
ans =
2 4 6
1 3 5
find(A)
−→ Localiza los elementos no nulos de A. Ej.:
A=[1 2;0 3;5 0],[I,J]=find(A)
A =
1 2
0 3
5 0
I =
1
3
1
2
J =
1
1
2
2
floor(x)
−→ Redondea las componentes de x hacia −∞. Ej.:
floor([-3.8,3.8])
ans =
-4 3
ceil(x)
−→ Redondea las componentes de x hacia ∞. Ej.:
ceil([-3.8,3.8])
ans =
-3 4
round(x)
−→ Redondea las componentes de x hacia el entero más proximo. Ej.:
round([-3.8,3.8])
ans =
-4 4
rem(x,y)
−→ Proporciona los restos que resultan al dividir las componentes de x entre las compo-
nentes correspondientes de y. Ej.:
rem([6,8,-8],[3,3,3])
ans =
0 2 -2
sign(A)
−→ Devuelve el signo de las componentes de A. Ej.:
sign([6,-8;1 2])
ans =
1 -1
1 1
factor(x)
−→ Realiza la factorización como producto de números primos del número x. Ej.:
factor(1356)
ans =
2 2 3 113
isprime(x)
−→ Función lógica que devuelve 1 en las componentes de x que son números primos y 0
en las que no lo son. Ej.:
isprime([1356,17])
ans =
0 1
primes(n)
−→ Devuelve un vector con los números primos menores o iguales que n. Ej.:
primes(17)
ans =
2 3 5 7 11 13 17
gcd(x,y),lcd(x,y)
−→ Obtiene el máximo común divisor y el mı́nimo común múltiplo de x, y respec-
tivamente. Cuando x, y son vectores los cálculos se hacen entre las componentes de x e y que ocupan
la misma posición. Ej.:
Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 44
17 Librerı́as generales
gcd([120,213],[64,10]),lcm([12,2],[10,3])
ans =
8 1
ans =
60 6
rats(x)
−→ Aproximación racional de las componentes de x. Ej.:
rats([12.23,pi])
ans =
1223/100 355/113
355/113
ans =
3.1416
perms(x)
−→ Obtiene todas las permutaciones posibles con las componentes de x. Ej.:
perms([1 2 3])
ans =
3 2 1
2 3 1
3 1 2
1 3 2
2 1 3
1 2 3
factorial(n)
−→ 1 · 2 · 3 · · · (n − 2)(n − 1)n Ej.:
factorial(5)
ans =
120
!
nchoosek n
−→ Número combinatorio Ej.:
k
nchoosek(6,4)
ans =
15
cart2sph(x)
−→ Transforma coordenadas cartesianas en coordenadas esféricas. Ej.:
[TH,PHI,R]=cart2sph([1,-4],[2,5],[3,2])
TH =
1.1071 2.2455
PHI =
0.9303 0.3027
R =
3.7417 6.7082
sph2cart(x)
−→ Transforma coordenadas esféricas en coordenadas cartesianas. Ej.:
[X, Y, Z]=sph2cart([1.1071,2.2455],[0.9303,0.3027],[3.7417,6.7082])
X =
1.0001 -3.9999
Y =
1.9999 5.0002
Z =
3.0001 1.9997
cart2pol(x)
−→ Transforma coordenadas cartesianas en coordenadas polares (cilı́ndricas). Ej.:
[TH,R,Z]=cart2pol([1,-4],[2,5],[3,2])
TH =
1.1071 2.2455
R =
2.2361 6.4031
Z =
3 2
pol2cart(x)
−→ Transforma coordenadas polares (plano) y cilı́ndricas (espacio) en coordendas carte-
sianas. Ej.:
[X,Y,Z]=pol2cart([1.1071,2.2455],[2.2361,6.4031],[3,2])
X =
1.0001 -3.9998
Y =
2.0000 5.0001
Z =
3 2
sortrows(A)
−→ Ordena las filas de la matriz A leyendo sus elementos de izquiera a derecha. Ej.:
magic(3),sortrows(magic(3))
ans =
8 1 6
3 5 7
4 9 2
ans =
3 5 7
4 9 2
8 1 6
A=[1 2 3 3; 1 2 3 1; 1 2 3 2],sortrows(A)
A =
1 2 3 3
1 2 3 1
1 2 3 2
ans =
1 2 3 1
1 2 3 2
1 2 3 3
sum(A)
−→ Suma las componentes de A por columnas. Ej.:
A=[1 2;3 4],sum(A)
A =
1 2
3 4
ans =
4 6
prod(A)
−→ Multiplica las componentes de A por columnas. Ej.:
A=[1 2;3 4],prod(A)
A =
1 2
3 4
ans =
3 8
17.2. Ejercicios
Comprueba los ejemplos introducidos en la sección anterior y explica los resultados obtenidos.
plot(x)
−→ Dibuja los pares de puntos (i, xi ) unidos por segmentos (xi representa las componentes del
vector x). Ej.:
x=[-4 -2 0 1 3 5]; [ENTER]
plot(x); [ENTER]
plot(x,y)
−→ Dibuja los pares de puntos (xi , yi ) unidos por segmentos (xi e yi representan las componentes
de los vectores x e y respectivamente). Ej.:
x=[-4 -2 0 1 3 5]; [ENTER]
y=[16 4 0 1 9 25]; [ENTER]
plot(x,y); [ENTER]
plot(z)
−→ Dibuja en el plano complejo los pares de puntos (Re(zi ), Im(zi )) unidos por segmentos (zi
representa las componentes del vector z). Ej.:
z=[1 2+i 3 2-i 3-2*i]; [ENTER]
plot(z); [ENTER]
plot(A)
−→ Para cada j dibuja los pares de puntos (i, aij ) unidos por segmentos (aij representa las
componentes de la matriz A) . En la misma gráfica, cada poligonal se dibuja con un color y con un tipo de
lı́nea diferente. Ej.:
A=[1 1 0.5; 2 4 -0.5; 3 9 0.5; 4 16 -0.5; 5 25 0.5]; [ENTER]
plot(A); [ENTER]
plot(x,A)
−→ Independientemente de que x sea un vector fila o columna, ejecuta plot(x,y) donde y
es una fila o columna de A. Para la elección de la fila y columna se tiene en cuenta la coincidencia de
dimensiones. En la misma gráfica, cada lı́nea se dibuja con un color y con un tipo de lı́nea diferente. Ej.:
x=[0 0.1 0.2 0.3 0.4]; [ENTER]
A=[1 1 0.5; 2 4 -0.5; 3 9 0.5; 4 16 -0.5; 5 25 0.5]; [ENTER]
plot(x,A); [ENTER]
48
18.2 Primeros gráficos bidimensionales I
plot(A,x)
−→ En las mismas condiciones que el caso anterior dibuja los pares ordenados siendo x el valor
de las ordenadas. Ej.:
x=0:0.1:2; [ENTER]
A=[sin(pi*x); 0.5+0.5*x]; [ENTER]
plot(A,x); [ENTER]
plot(A,B)
−→ Ejecuta plot(x,y), donde x es una columna de A e y es una columna de B. En la misma
gráfica, cada poligonal se dibuja con un color y con un tipo de lı́nea diferente.
18.2. Ejercicios
a) Simula n lanzamientos de una moneda mediante el comando rand (n es un valor que debe intro-
ducir el usuario como argumento de la función).
b) Guarde en el espacio de trabajo los resultados obtenidos en la variable datos.
c) Calcule con qué frecuencia va apareciendo el resultado cara en los sucesivos lanzamientos.
d) Represente graficamente dichas frecuencias frente al número de lanzamientos.
e) Muestre por pantalla la última frecuencia obtenida.
f) Envı́e al fichero de texto resultados.dat los resultados obtenidos en los n lanzamientos (emplea
las palabras cara y cruz).
Dibujo de funciones
fplot(’fcn’, lim)
−→ Dibuja el gráfico de la función especificada en la cadena fcn (puede ser un fichero de
comandos) en los intervalos de abcisas y ordenadas determinados por lim. Ej.:
fplot(’sin(x^2)’, [0 10]) [ENTER]
fplot(’sin(x^2)’, [0 10 -1.5 0.5]) [ENTER]
19.2. Ejercicios
2
1. f (x) = xe−x en [−2, 2].
√
2. f (x) = x2 − 1 en [−3, 3, −1, 3].
50
Hora 20
plot(x,y,cad)
−→ Dibuja la gráfica de abcisas x y ordenadas y con las opciones de estilo dadas por cad1
(MATLAB utiliza por defecto una lı́nea azul continua sin marcadores).
fplot(’fcn’, lim,cad)
−→ Dibuja la gráfica de la función fcn con el estilo de lı́neas cad.
plot(x1,y1,cad1, x2,y2,cad2,...)
−→ Dibuja la gráfica de abcisas x1 y ordenadas y1 con las opciones de
estilo dadas por cad1, la gráfica de abcisas x2 y ordenadas y2 con las opciones de estilo dadas por cad2 y
ası́ con el resto de ternas. Si se omiten las opciones de estilo, MATLAB escoge el color y estilo para cada
gráfico.
1 cad
es una variable carácter de a lo sumo tres parámetros elegidos de las siguientes columnas sin
importar el orden. Afecta a los estilos de lı́neas y colores.
1
Ver tabla
51
20.2 Modificadores de los gráficos bidimensionales
Ej.:
20.2. Ejercicios
1. Dibuja un cuadrado de vértices {(1, 1), (1, 4), (4, 4), (4, 1)} y sus diagonales. Emplea un estilo distinto
para cada uno de los lados y diagonales.
2. Una granja familiar crı́a conejos, terneros y cerdos. Los siguientes vectores describen el número de
unidades de cada cabaña nacidos durante cada uno de los meses de 1999 en la granja:
conejos = (1, 3, 7, 9, 11, 13, 15, 17, 20, 20, 22, 23)
terneros = (1, 2, 1, 4, 1, 1, 2, 1, 0, 1, 3, 2)
cerdos = (12, 10, 1, 8, 11, 11, 1, 4, 3, 1, 5, 7)
axis
−→ Devuelve los lı́mites del dibujo actual en un vector fila. Para gráficos de dos dimensiones tiene
los elementos [xmin xmax ymin ymax ] y para gráficos de tres dimensiones [xmin xmax ymin ymax zmin zmax ].
axis(v)
−→ Establece la escala de los ejes conforme al vector v que será [xmin xmax ymin ymax ] en dos
dimensiones o [xmin xmax ymin ymax zmin zmax ] en tres dimensiones.
axis(axis)
−→ Bloquea la escala actual cuando se añaden dibujos posteriores a uno que se ha mantenido
con el comando hold.
axis(cad)
−→ Establece la escala de los ejes con diferentes resultados dependiendo de la cadena cad
utilizada:
’square’ Modifica la ventana gráfica para hacer que la caja del dibujo sea cuadrada.
’normal’ Modifica la ventana gráfica para que la caja del dibujo vuelva al tamaño habitual.
grid on
−→ Dibuja una red en la ventana gráfica.
grid off
−→ Borra la red de la ventana gráfica. Ej.:
53
21 Control de gráficos bidimensionales
title(txt)
−→ Escribe la variable cadena txt centrada en la cabezera del gráfico (tı́tulo).
xlabel(txt), ylabel(txt)
−→ Escribe la variable cadena txt como una etiqueta junto al eje x e y respecti-
vamente.
text(x,y,txt)
−→ Escribe la variable cadena txt en la posición (x, y) de la ventana gráfica. Las coordenadas
x e y están proporcionadas en las mismas unidades en las que está dibujado el gráfico. Si x e y son vectores,
la variable cadena se escribe en todos los pares de puntos (xi , yi ). Si txt es un vector con varias cadenas con
el mismo número de filas que x e y, se escribe una de ellas en cada una de las posiciones. Se puede elegir el
tamaño y tipo de letra empleado.
gtext(txt)
−→ Escribe la variable cadena txt en la posición de la ventana gráfica que elija el usuario
mediante el ratón.
legend(st1,st2, ...)
−→ Escribe en un pequeño recuadro, las variables cadenas st1, st2, etc, al lado de los
estilos de linea utilizados en cada una de las gráficas. Este pequeño recuadro puede moverse mediante el
ratón.
legend(l1,st1, l2,st2, ...)
−→ Escribe una leyenda especificando los estilos de lı́nea.
legend off
−→ Elimina la leyenda del dibujo actual.
[x,y]=ginput
−→ Lee las coordenadas en las que se sitúa el ratón dentro de la ventana gráfica. Al ejecutar
este comando aparece un cursor que se maneja con el ratón (o con las teclas de desplazamiento vertical
y horizontal). Presionado una tecla o un botón del ratón se envı́an las coordenadas a MATLAB que las
almacena en los vectores x e y. El proceso termina cuando se presiona la tecla [RETURN].
[x,y]=ginput(n)
−→ Lee n coordenadas de la ventana gráfica.
waitforbuttonpress
−→ Detiene el dibujo de gráficos hasta que se presiona una tecla o un botón del ratón.
Ej.:
n=figure; % nueva ventana grafica;
disp(’Para dibujar una poligonal en la figura:’);
disp(’presiona el boton izqdo para empezar,’);
[x,y,t]=ginput(1);
plot(x,y,’o’)
xx=x;yy=y;
hold; axis([0 1 0 1]); % superponer el grafico y se establecen
% los ejes
while t~=3
[x,y,t]=ginput(1);
plot(x,y,’o’)
xx=[xx x];
yy=[yy y];
end
clf; line(xx,yy);
disp(’Aprieta en la figura cuando este terminado’)
waitforbuttonpress
delete(n);
21.2. Ejercicios
1. Dibuja en un mismo gráfico las funciones f1 (x) = x2 , f2 (x) = 1,1x2 y f3 (x) = 1,2x2 .
Utiliza para el eje y una escala adecuada que te permita distinguir las tres funciones anteriores.
Repite el apartado anterior usando para ello el comando zoom.
Identifica sobre la gráfica cada una de las funciones representadas de dos maneras distintas:
a) Añade al lado de cada curva una etiqueta que describa la función que representa.
b) Incorpora una leyenda que identifique la función con el tipo de lı́nea utilizada para su repre-
sentación.
function y=particle(n)
% Camino aleatorio. Una particula empieza en el origen, y se mueve
% aleatoriamente hacia otra direccion en cada paso.
clf;
plot(x,y);
hold on;
plot(x(1),y(1),’o’,x(n),y(n),’o’);
axs=axis;
scale=axs(2)-axs(1);
text(x(1)+scale/30,y(1),’Inicio’);
hold off;
xlabel(’x’);
3. Busca en la ayuda el comando fill y utilı́zalo para dibujar un triángulo de vértices {(0, 2), (1, 0), (−1, 0)}
coloreado en rojo y sobre él un cuadrado de vértices {(0, 0), (1, 1), (0, 1), (1, 0)}.
figure(n)
−→ Permite mostrar la ventana gráfica actual y crear nuevas ventanas gráficas.
clf
−→ Borra el contenido la última ventana gráfica utilizada.
delete(n)
−→ Cierra la ventana gráfica n.
hold on
−→ Permite superponer gráficos en una misma ventana hasta que se desactiva la opción con el
comando hold off.
hold off
−→ Desactiva la opción hold on.
ishold
−→ Es un comando lógico que devuelve 1 si para el actual gráfico está activada la opción hold on
ó 0 en caso contrario.
subplot(m,n,p)
−→ Divide la ventana gráfica en subventanas distribuidas en m filas y n columnas y hace
que la subventana p sea la actual. Las ventanas se numeran de izquierda a derecha y de arriba hacia abajo.
Ej.:
x=linspace(-10,10,1000); [ENTER]
y11=(-x).*sin(x); [ENTER]
y12=(-x).*cos(x)-sin(x); [ENTER]
y21=diff(y11)./(x(2)-x(1)); [ENTER]
y22=(y21-y12(1:999))./norm(y12); [ENTER]
subplot(2,2,1); plot(x,y11); [ENTER]
subplot(2,2,2); plot(x,y12); [ENTER]
subplot(2,2,3); plot(x(1:999),y21); [ENTER]
subplot(2,2,4); plot(x(1:999),y22); [ENTER]
zoom on
−→ Permite ampliar la ventana con el botón izquierdo del ratón y reducirla con el botón derecho.
También permite seleccionar el área que queremos ampliar.
57
22 Control de la ventana gráfica bidimensionales
zoom off
−→ Desactiva el comando anterior.
zoom out
−→ Recupera el tamaño inicial.
22.2. Ejercicios
1. Dibuja las funciones fk (x) = xk para k = 1, 2, 3, 4, 5, 6, 7 en siete gráficas distintas dentro de una
misma ventana con −5 ≤ x ≤ 5. Escribe sobre cada gráfica un tı́tulo que la identifique.
3. Con los datos del ejercicio 2 de la hora 20 Control de gráficos bidimensionales y empleando el comando
figure realiza cuatro gráficas en cuatro ventanas distintas para representar:
a) El número de terneros nacidos en la granja durante cada uno de los meses de 1999.
b) El número de conejos nacidos en la granja durante cada uno de los meses de 1999.
c) El número de cerdos nacidos en la granja durante cada uno de los meses de 1999.
d) El número total de animales nacidos en la granja durante cada uno de los meses de 1999.
Añade un tı́tulo y nombra los ejes convenientemente en cada uno de los gráficos indicados.
4. Repite el ejercicio anterior incluyendo los 4 gráficos representados en un misma ventana dividida en
cuatro zonas.
M=moviein(17);
x=[-2*pi:.1:2*pi]’;
for j=1:17
y=sin(x+j*pi/8);
plot(x,y);
M(:,j)=getframe;
end
movie(M,2,50)
polar(θ,r)
−→ Dibuja números complejos a partir de sus coordenadas polares. Los elementos del vector θ
son los ángulos en radianes, y los elementos del vector r son las distancias al origen.
pol2cart(θ,r)
−→ Convierte las coordenadas polares dadas por los vectores θ y r en coordenadas carte-
sianas. Ej.:
r = linspace(0,2); [ENTER]
theta = linspace(0,10*pi); [ENTER]
[x,y] = pol2cart(theta,r); [ENTER]
z = x+i*y; [ENTER]
plot(z); [ENTER]
cart2pol(x, y)
−→ Convierte las coordenadas cartesianas dadas por los vectores x e y en coordenadas
polares.
quiver(x,y)
−→ Dibuja una flecha para cada par de coordenadas (xi , yi ). Muestra el argumento y la
magnitud del número complejo que tiene ese par de coordenadas reales.
quiver(x,y,dx,dy)
−→ Dibuja una flecha para cada par de coordenadas (xi , yi ) con el argumento y magnitud
dados por (dxi , dyi ).
quiver(x,y, ...,s)
−→ El parámetro s indica la escala con la que se dibujan las flechas, que por defecto
toma el valor 1.
feather(Z)
−→ Dibuja flechas mostrando las magnitudes y argumentos de los elementos de la matriz
compleja Z. Estas flechas parten de puntos equidistantes del eje x.
compass(Z)
−→ Como feather pero en este caso todas las flechas tienen como origen el origen de coor-
denadas.
59
23 Gráficos con números complejos y en escalas logarı́tmicas
rose(v,n)
−→ Dibuja un histograma de ángulos, es decir, un histograma circular mostrando la frecuencia
de los ángulos dados en el vector v; utilizando n intervalos. En el caso de no especificar n, el valor por defecto
es 36. Ej.:
Z=[1+i 2-i 3-5*i; -4+3*i 5-5*i i ;-1-i 3+3*i -1]; [ENTER]
clf; [ENTER]
subplot(2,2,1); quiver(real(Z),imag(Z)); title(’quiver’); [ENTER]
subplot(2,2,2); feather(Z); title(’feather’); [ENTER]
subplot(2,2,3); compass(Z); title(’compass’); [ENTER]
subplot(2,2,4); rose(angle(Z(:))); title(’rose’); [ENTER]
semilogx(x,y)
−→ Utiliza coordenadas logarı́tmicas en el eje x. El resultado es el mismo que utilizar
plot(log10(x),y) pero no produce ningún error si tenemos que calcular log10 0.
semilogy(x,y)
−→ Actúa como el comando anterior, pero esta vez la escala logarı́tmica está en el eje y.
loglog(x,y)
−→ Dibuja ambos ejes en escala logarı́tmica. Ej.:
x=linspace(0,7); [ENTER]
y=exp(x); [ENTER]
subplot(2,1,1); plot(x,y); [ENTER]
subplot(2,1,2); semilogy(x,y); [ENTER]
23.3. Ejercicios
3. Dibuja los pentágonos cuyos vértices están sobre la circunferencia unidad en los ángulos θ = 2π 4π 6π 8π
5 , 5 , 5 , 5 ,
10π 3π 5π 7π 9π 11π
5 y en los ángulos θ = 5 , 5 , 5 , 5 , 5 . Traza los segmentos que unen cada vértice con el origen
de coordenadas.
Utiliza un histograma (función hist) para representar los datos almacenados en la variable
habitantes.
tblread(datos.txt)
−→ Lee los datos almacenados en el fichero datos.txt interpretando los nombres de
las variables (primera fila) y los nombres de los individuos (primera columna). Permite distintos caracteres
como delimitadores de campos (espacios en blanco, coma, punto y coma, etc.)
Ej.:
[datos, nombresvariables, nombresindividuos] = tblread(’Demog.tex’);
datos, nombresvariables, nombresindividuos
boxplot(A)
−→ Dibuja un boxplot con los datos almacenados en cada una de las columnas de A (uno por
columna). Ej.:
A=normrnd(0,1,10,2);boxplot(A)
lsline
−→ Añade a un scatterplot la recta que mejor ajusta los puntos representados en el sentido de
mı́nimos cuadrados. Ej.:
X=linspace(1,20,100);Y=3+(2.*X)+normrnd(0,3,1,100);plot(X,Y,’.’);
lsline;coef=polyfit(X,Y,1)
coef =
2.0053 2.9622
refline(m,c)
−→ Añade la recta y = mx + c a la figura activa. Sin argumentos equivale a lsline. Ej.:
X=linspace(1,20,100);Y=3+(2.*X)+normrnd(0,3,1,100);plot(X,Y,’r.’);
refline;
refline(4,5);
62
24 Librerı́as con funciones y gráficos estadı́sticos
tabulate(x)
−→ Obtiene la tabla de distribución de frecuencias de x. El argumento x debe ser un vector
de números naturales. Ej.:
r = unidrnd(10,5,1)
r =
5
4
4
9
8
tabulate(r)
Value Count Percent
1 0 0.00%
2 0 0.00%
3 0 0.00%
4 2 40.00%
5 1 20.00%
6 0 0.00%
7 0 0.00%
8 1 20.00%
9 1 20.00%
nanmin(A), nanmax(A)
−→ Calculan, respectivamente, el mı́nimo y el máximo de los datos que ocupan
cada una de las columnas (variables) de la matriz A. Los datos “missing” se omiten. Ej.:
r = unidrnd(10,5,2)
r =
9 8
9 10
1 7
8 8
9 4
nanmin(r),nanmax(r)
ans =
1 4
ans =
9 10
range(A)
−→ Calcula el rango de los datos que ocupan cada una de las columnas (variables) de la matriz
A. Ej.:
r = unidrnd(10,5,2)
r =
1 3
3 5
4 9
9 2
4 6
range(r)
ans =
8 7
median(A)
−→ Calcula la mediana de los datos que ocupan cada una de las columnas (variables) de la
matriz A. Ej.:
r = unidrnd(10,5,2)
r =
10 3
8 8
8 10
3 7
2 6
median(r)
ans =
8 7
iqr(A)
−→ Calcula el rango intercuartı́lico de los datos que ocupan cada una de las columnas (variables)
de la matriz A. Ej.:
r = unidrnd(10,5,2)
r =
5 10
3 2
1 1
3 4
2 7
iqr(r)
ans =
1.7500 6.0000
prdtile(A,p)
−→ Calcula los percentiles designados en p (en porcentaje) para cada una de las columnas
(variables) de A. El resultado es una matriz cuya fila i-ésima contiene los percentiles del p(i) % de cada una
de las columnas de A. Ej.:
r = unidrnd(10,5,2)
r =
6 8
5 7
9 1
9 2
5 5
prctile(r,[25;50;75])
ans =
5.0000 1.7500
6.0000 5.0000
9.0000 7.2500
cov(A)
−→ Calcula la matriz de covarianzas asociada con las columnas (variables) de A. Ej.:
X=unifrnd(2,10,1,100);Y=normrnd(0,3,1,100);
cov([X;Y]’)
ans =
4.9814 -0.5150
-0.5150 11.6290
corrcoef(A)
−→ Calcula la matriz de correlaciones asociada con las columnas (variables) de A. Ej.:
X=unifrnd(2,10,1,100);Y=2.*X+normrnd(0,2,1,100);
corrcoef([X;Y]’)
ans =
1.0000 0.9371
0.9371 1.0000
binopdf(x,n,p)
−→ Calcula las probabilidades de una distribución binomial de parámetros n y p en los
sucesos (componentes) de x. Ej.:
binopdf(0:6,6,0.75)
ans =
0.0002 0.0044 0.0330 0.1318 0.2966 0.3560 0.1780
binocdf(x,n,p)
−→ Evalua la función de distribución de una distribución binomial de parámetros n y p en
cada una de las componentes de x. Ej.:
binocdf(0:6,6,0.75)
ans =
0.0002 0.0046 0.0376 0.1694 0.4661 0.8220 1.0000
binoinv(x,n,p)
−→ Evalua la inversa de la función de distribución (percentiles) de una distribución bino-
mial de parámetros n y p en cada una de las componentes de x. Ej.:
binoinv(0:0.2:1,6,0.75)
ans =
0 4 4 5 5 6
binornd(n,p,m,k)
−→ Calcula una matriz m×k formada por números aleatorios generados a partir de una
distribución binomial de parámetros n y p. Ej.:
binornd(10,0.8,3,3)
ans =
8 10 6
6 9 10
7 9 9
binostat(n,p)
−→ Calcula la esperanza y la varianza de una distribución binomial de parámetros n y p.
Ej.:
[esperanza,varianza]=binostat(100,0.7)
esperanza =
70
varianza =
21.0000
exppdf(x,mu)
−→ Calcula la función de densidad de una distribución exponencial de parámetro (esper-
anza) mu en cada una de las componentes de x. Ej.:
y=exppdf(1:0.1:100,2);plot(1:0.1:100,y)
expcdf(x,mu)
−→ Evalua la función de distribución de una distribución exponencial de parámetro mu en
cada una de las componentes de x. Ej.:
expcdf(1:10,2)
ans =
Columns 1 through 7
0.3935 0.6321 0.7769 0.8647 0.9179 0.9502 0.9698
Columns 8 through 10
0.9817 0.9889 0.9933
expinv(x,mu)
−→ Evalua la inversa de la función de distribución (percentiles) de una distribución expo-
nencial de parámetro mu en cada una de las componentes de x. Ej.:
expinv(0:0.1:0.9,2)
ans =
Columns 1 through 7
0 0.2107 0.4463 0.7133 1.0217 1.3863 1.8326
Columns 8 through 10
2.4079 3.2189 4.6052
exprnd(mu,m,k)
−→ Calcula una matriz m×k formada por números aleatorios generados a partir de una
distribución exponencial de parámetro mu. Ej.:
exprnd(2,3,3)
ans =
0.1126 11.5185 3.4466
0.9779 0.4539 1.2720
0.4894 0.8869 3.0397
expstat(mu)
−→ Calcula la esperanza y la varianza de una distribución exponencial de parámetro mu.
Ej.:
[esperanza,varianza]=expstat(2)
esperanza =
2
varianza =
4
24.5. Ejercicios
1. Comprueba los ejemplos introducidos en la sección anterior y explica los resultados obtenidos.
2. Utiliza las funciones normpdf, normcdf norminv y normrnd para resolver las siguientes cuestiones:
a) Dibuja en un mismo gráfico las funciones de densidad correspondientes a las distribuciones nor-
males N (5, 1), N (5, 10) y N (10, 1).
b) Tabula la función de distribución de una distribución normal estándar para los valores z =
0, 0,01, 0,02, . . . , 3,98, 3,99, 4.
c) Tabula los percentiles de una distribución N (1, 3) correspondientes a las probabilidades p =
0,01, 0,1, 0,2, . . . , 0,9, 0,99.
d ) Genera un muestra de tamaño 100 de una distribución normal estándar y contabiliza mediante
un diagrama de caja los valores outliers obtenidos.
plot3(x1,y1,z1,cad)
−→ Dibuja un gráfico 3-D que pasa por las coordenadas de los vectores x1, y1, z1.
La selección del estilo de lı́nea es opcional y se elige con cad1 Ej.:
x=[245,972,167,165];y=[23,45,24,362];z=[1,2 3,4];
plot3(x,y,z,’ro--’);
plot3(X,Y,Z)
−→ Dibuja gráficos para cada columna de las matrices X, Y y Z, que deben tener el mismo
tamaño.
25.1. Ejercicios
1. Dibuja en el espacio tridimensional una circunferencia que esté contenida dentro del plano XY.
Sugerencia: trabaja en dos dimensiones y añade una tercera coordenada nula.
3. Genera 120 números aleatorios entre 0 y 100. Considera que los valores obtenidos simulan el número
de ganadores mensuales de premios millonarios durante los últimos 10 años. Asigna a cada dato el mes
y el año correspondiente y representa los valores obtenidos mediante un dibujo en tres dimensiones.
1
Ver tabla de la sección 20.1, página 51.
68
Hora 26
Dibujo de mallados
[U,V]=meshgrid(x,y)
−→ Comando que obtiene una red adecuada para dibujar gráficas tridimensionales
a partir de los vectores x e y. Ej.:
x=[1 2]; y=[3 4];
[x,y]=meshgrid(x,y)
[U,V,W]=meshgrid(x,y,z)
−→ Obtiene una red tridimensional.
mesh(Z)
−→ Dibuja la matriz Z como tercera coordenada sobre una red rectangular y conecta los puntos
adyacentes creando una superficie. Ej.:
subplot(2,1,1);
x=-1:.1:1;
y=x;
[x,y]=meshgrid(x,y);
z=x.^2+y.^2;
mesh(z);
subplot(2,1,2);
mesh(z);
hidden off;
mesh(U,V,Z)
−→ Dibuja la matriz Z sobre los nodos de la red formada por U y V. Ej.:
U=4:8;V=1:3;Z=3*ones(3,5);
mesh(U,V,Z);
surf(X,Y,Z)
−→ Dibuja la superficie especificada por X e Y, que toma los valores de Z. Si no se especifica
la red, se dibuja en una red uniforme.
[X,Y,Z]=cylinder(r,n)
−→ Devuelve las coordenadas correspondientes a la superficie de un cilindro o un
cono. Los radios del cilindro se toman del vector r, que contienen los radios en n puntos equidistantes en el
eje del cilindro. Si no se especifica n, se utiliza n = 20.
[X,Y,Z]=sphere(n)
−→ Devuelve n coordenadas igualmente espaciadas sobre una esfera unidad. Ej.:
69
26 Dibujo de mallados
[X,Y,Z]=sphere(20);
surf(X,Y,Z);
26.2. Ejercicios
2. Dibuja una superficie semejante a una chimenea de una central térmica (hiperboloide hiperbólico).
a) Guarda los datos simulados en una matriz 10×12 (logicamente, las filas hacen referencia al año
y las columnas al mes).
b) Utiliza el comando meshgrid y construye una red de referencia.
c) Emplea los comandos mesh y surf para obtener la representación gráfica solicitada.
axis
−→ Idéntico al utilizado con gráficos bidimensionales.
title, xlabel, ylabel, zlabel, text, gtext, legend, ginput, grid, . . .
−→ Idénticos a los utilizados con gráficos
bidimensionales (gtext y ginput sólo funcionan en determinadas versiones).
hidden on, hidden off
−→ Mantiene las lı́neas posteriores ocultas o no dependiendo que utilicemos on u
off.
hold, subplot, . . .
−→ Idénticos a los utilizados con gráficos bidimensionales (gtext y
view(v,h)
−→ Establece el punto de vista de la gráfica. El escalar v determina el ángulo azimutal y el
escalar h el ángulo de elevación.
[v,h]=view
−→ Devuelve el punto de vista actual mediante el ángulo azimutal y el ángulo de elevación.
view(r)
−→ Sitúa el punto de vista en la posición r=[x y z]. Ej.:
subplot(2,1,1);
X1=[0 1 0];Y1=[0 0 1]; Z1=[1 0 0];
X2=[0 0 0];Y2=[0 1 0]; Z2=[1 0 0];
X3=[0 1 0];Y3=[0 0 0]; Z3=[1 0 0];
X4=[1 0 0];Y4=[0 1 0]; Z4=[0 0 0];
fill3(X1,Y1,Z1,’r’,X2,Y2,Z2,’b’,X3,Y3,Z3,’g’,X4,Y4,Z4,’y’);
grid;
subplot(2,1,2);
fill3(X1,Y1,Z1,’r’,X2,Y2,Z2,’b’,X3,Y3,Z3,’g’,X4,Y4,Z4,’y’);
grid;
71
27 Control de la ventana y de los gráficos tridimensionales
view(196,30);
27.3. Ejercicios
Utiliza el comando gtext para aproximar las coordenadas del punto más alto.
a) Obtén 120 datos aleatorios como en el ejercicio 3 de la hora 25. Almacenalos en el vector v y en
una matriz A de tamaño 10×12.
b) Divide la pantalla gráfica en cuatro zonas mediante el comando subplot.
c) En la primera zona representa el resultado del ejercicio 3 anterior.
d) En la segunda zona representa el resultado del ejercicio 3 anterior, pero utilizando marcadores
distintos para los puntos representados.
e) En la tercera zona representa uno de los gráficos representados en el ejercicio 4 anterior.
f) En la cuarta zona representa el otro dibujo obtenido en el ejercicio 4 anterior.
fill3(x,y,z,c)
−→ Dibuja el poliedro con vértices dados por los vectores x,y,z. El poliedro se rellena con
el color dado por c.
C=contour(x,y,Z,n), C=contour(x,y,Z,v)
−→ Dibuja las curvas de nivel de la matriz Z en n niveles
especificados en el vector v sobre la red determinada por los puntos x, y. Si no se concreta n se dibujan 10
niveles. Si se omite la red x, y, entonces MATLAB emplea una red uniforme. C es la matriz de contorno.
clabel(C)
−→ Escribe los valores de los niveles que representan las curvas de nivel. Las posiciones son
aleatorias. C es la matriz de contorno. Se pueden especificar los niveles, con un vector v. Ej.:
r=10:-0.1:0;
[X,Y,Z]=cylinder(r,100);
v=linspace(0,1,15);
C=contour(X,Y,Z,v);
clabel(C);
meshc(U,V,Z)
−→ Actúa igual que mesh, incluyendo las curvas de nivel bajo el gráfico.
surfc(U,V,Z)
−→ Actúa igual que surf, incluyendo las curvas de nivel bajo el gráfico. Ej.:
x=-8:0.5:8;
y=x;
[XX,YY]=meshgrid(x,y);
r=sqrt(XX.^2+YY.^2)+eps;
z=sin(r)./r;
subplot(2,1,1);
73
28 Dibujo de poliédros y de lı́neas de contorno
meshc(z);
title(’sin(r)/r)’);
subplot(2,1,2);
surfc(z); title(’sin(r)/r)’);
28.3. Ejercicios
a) Dibujar la superficie en la red determinada por las abcisas x = −10 : 1 : 10 y las ordenadas
y = −20 : 1 : 20 empleando el comando surf.
b) Dibujar las curvas de nivel asociadas a los valores v = −50 : 5 : 50.
c) Representar los dos gráficos anteriores, uno encima del otro.
d) Representar los dos gráficos anteriores en la misma ventana utilizando el comando surfc.
e) Dibujar la superficie en la red determinada por las abcisas x = −10 : 0,5 : 10 y las ordenadas
y = −20 : 0,5 : 20 empleando el comando mesh.
f ) Representar la superficie con el comando meshc.
bar(X)
−→ Representa el diagrama de barras asociado con las frecuencias contenidas en X. Se
considera que los valores de una misma fila hacen referencia a la misma categorı́a. Ej.:
X=[1,2,3;4,5,6;7,8,9];
bar(X)
barh(X)
−→ Igual que el anterior. La única diferencia es que las barras se representan horizontal-
mente. Ej.:
X=[1,2,3;4,5,6;7,8,9];
barh(X)
bar3(X)
−→ Representa el diagrama de barras tridimensional asociado con las frecuencias contenidas
en X. Se considera que los valores de una misma fila hacen referencia a la misma categorı́a. Ej.:
X=[1,2,3;4,5,6;7,8,9];
bar3(X)
bar3h(X)
−→ Igual que el anterior. La única diferencia es que las barras se representan horizontal-
mente. Ej.:
X=[1,2,3;4,5,6;7,8,9];
bar3h(X)
75
29 Librerı́as relacionadas con gráficos bidimensionales y tridimensionales
pareto(x,e)
−→ Dibuja un diagrama de Pareto con las frecuencias descritas en el vector x y las
etiquetas contenidas en el vector e. Ej.:
x=[3;14;1;7];
tiposdefallo=[’ desgaste ’;’ rotura ’;’desencaje ’;’dilatacion’];
pareto(x,tiposdefallo)
pie(x,e)
−→ Dibuja un diagrama de sectores con las frecuencias descritas en el vector x y las etiquetas
contenidas en el vector e. Ej.:
pie([2 4 3 5],{’North’,’South’,’East’,’West’})
pie3(x,d,e)
−→ Dibuja un diagrama de sectores con las frecuencias descritas en el vector x y las
etiquetas contenidas en el vector e. Las componentes del vector d indican si los correspondientes
sectores se separan del centro del cı́rculo (valor 1) o no (valor 0). Ej.:
pie3([2 4 3 5],[0 1 1 0],{’North’,’South’,’East’,’West’})
plotmatrix(X)
−→ Dibuja scatterplots para cada par de columnas de la matriz X. En la diagonal
representa histogramas relativos a los datos contenidos en las correspondientes columnas de la matriz
X. Ej.:
x = randn(50,3); Y = x*[-1 2 1;2 0 1;1 -2 3;]’;
plotmatrix(Y,’*r’)
stem()
−→ Actúa como la función plot(). La única diferencia es que se representa la proyección
ortogonal sobre el eje de abscisas de cada uno de los puntos dibujados. Ej.:
x=linspace(0,5,20);y=exp(-x);
stem(y)
stem3()
−→ Actúa como la función plot3(). La única diferencia es que se representa la proyección
ortogonal sobre el plano XY de cada uno de los puntos dibujados. Ej.:
x = linspace(0,1,10);y=x./2;z=sin(x)+cos(y);
stem3(x,y,z,’fill’)
scatter(x,y,s,c)
−→ Dibuja cı́rculos coloreados en las coordenadas especificadas a través de las com-
ponentes de los vectores x e y. El vector (o escalar) s determina el tamaño de dichos cı́rculos y c
contiene el color (o colores) de cada uno de ellos. Ej.:
x = linspace(0,1,10);y=normrnd(2,3,1,10);
scatter(x,y,15,’r’)
scatter3(x,y,z,s,c)
−→ Igual que el anterior, pero en el espacio. Ej.:
x = linspace(0,1,50);y=x;[u,v]=meshgrid(x,y);z=normrnd(2,3,2500,1);
scatter3(u(:),v(:),z,1)
stairs()
−→ Actúa como la función plot(). La única diferencia es que los puntos representados se
unen “en escalera”. Ej.:
x=-10:1:10;y=x.^2;stairs(x,y)
29.1. Ejercicios
Comprueba los ejemplos introducidos en la sección anterior y explica los resultados obtenidos.
print nombre
−→ Envı́a el contenido de la ventana gráfica activa a un fichero llamado nombre.ps. Si
no se especifica ningún fichero, entonces el gráfico se imprime. Ej.:
x=-pi:0.1:pi;
y=sin(x);
plot(x,y);
print dibujo;
30.2. Ejercicios
1. Recupera las representaciones realizadas en el ejercicio 1 de la hora 28 y resuelve las siguientes cues-
tiones.
a) Grabar la ventana gráfica obtenida en el apartado (1d ) en el fichero pilardel.ps con formato
postscript. Abrir el fichero anterior con el VisorPS.
b) Grabar la ventana gráfica obtenida en el apartado (1d ) en el fichero pilardel.ps con formato
postscript apaisado. Abrir el fichero anterior con el VisorPS.
c) Grabar la ventana gráfica obtenida en el apartado (1f ) en el fichero castillo.jpg con formato
jpg. Abrir el fichero anterior con el programa Image Viewer.
77
Hora 31
switch expresión
case valor de la expresión
..
. % secuencia de comandos
case valor de la expresión
..
. % secuencia de comandos
case valor de la expresión
..
. % secuencia de comandos
otherwise
..
. % secuencia de comandos
end
Ej.:
function f = f(X,N)
switch N
case 1
f = X^1;
disp(’Potencia primera’)
case 2
f = X^2;
disp(’Potencia segunda’)
case 1.5
f = X^1.5;
disp(’Raiz cuadrada’)
otherwise
f = 0;
disp(’No es ningun caso de los anteriores’)
end
78
31 Estructura de selección case
31.2. Ejercicios
1. Definir una base de funciones llamada f.m que tome los siguientes valores
a)
f1 (x) = sin(x2 + log(|x|))
b)
x3 − 3x2 + 2x − 1
f2 (x) =
x2 + 2
c)
100
X
f3 (x) = xj
j=0
d)
100
Y
f4 (x) = xj
j=1
(Desarrollar la función de manera que pueda realizar todas operaciones vectorialmente). Usando esta
función, desarrollar un programa que dibuje cada una de las funciones anteriores en una sola ventana
(cada una de las funciones en una subventana de las cuatro en las que dividiremos la ventana principal)
1 si n = 0
1 is n = 1
n! si n ≥ 2
un mensaje de error si n < 0 o no es entero.
Debugger
dbstop
−→ Permite fijar un punto de interrupción (breakpoint) en el programa.
dbclear
−→ Permite borrar un punto de interrupción fijado previamente.
dbcont
−→ Continua la ejecución del programa bajo las condiciones fijadas previamente.
dbdown
−→ Cambia el entorno del espacio de trabajo.
dbmex
−→ Permite la posibilidad de realizar una depuración (debugging) de ficheros MEX.
dbstack
−→ Muestra la localización completa del programa que se está ejecutando junto con la lı́nea en la
que se ha interrumpido el programa.
dbstatus
−→ Muestra un listado de los puntos de interrupción que hemos fijado.
dbstep
−→ Ejecuta una o varias lı́neas de comandos hasta el siguiente punto de interrupción.
dbtype
−→ Muestra en ventana el fichero *.m que se está ejecutando con las lı́neas numeradas.
dbup
−→ Cambia el entorno del espacio de trabajo.
dbquit
−→ Termina la ejecución del programa en modo debugger.
Algunas de estas funciones se pueden manejar desde la barra de herramientas o bien desde las opciones
de menú mediante las teclas siguientes:
dbstop
−→ F8 o desde las opciones de menú.
dbclear
−→ F8 o desde las opciones de menú.
dbcont
−→ F5 .
dbstep
−→ F6 .
dbquit
−→ (Desde las opciones de menú).
Step by step In−→ F7 .
80
32 Debugger
32.2. Ejercicios
Determinar con la ayuda del debugger por que las funciones prg1.m, prg2.m y prg2.m no devuelven
resultado alguno (Observar que en la última lı́nea de cada una de ellas deberı́a de mostrar el resultado de
los cálculos). Utilizar, además, los warning para detener el programa cuando se produzca algún error en la
ejecución.
function prg1=prg1(N)
K=10*N;
J=-1;
function prg2=prg2(X)
for J=-3:1:3
X=X/J;
end;
for J=1:1:100
U=sin(J);
J=J-1;
end;
function prg3=prg3(X)
for J=X:1:-3
prg3=X/J;
end;
X % Salida de datos
Creación de librerı́as
Main program
Crear librerı́a−→ File/Set path [Add folder] (desde las opciones de menú).
Eliminar librerı́a−→ File/Set path [remove] (desde las opciones de menú).
33.2. Ejercicio
Problema: Sea una matriz A, 4 × 4, de ceros. Se pretende encontrar una distribución de 7 unos en A de
modo que al eliminar 2 filas y 2 columnas cualesquiera siempre quede algún uno (se puede demostrar que
con menos de 7 esto no es posible pero con 7 sı́).
Se pide programar una función que nos permita encontrar las distribuciones de 7 unos en la matriz A que
resuelvan el problema anterior. Para ello, vamos a partir de ciertas premisas que razonablemente se pueden
suponer:
En cada una de las filas y cada una de las columnas no puede haber más de 2 unos.
Puede haber otras distribuciones que resuelvan el problema y que no verifiquen la premisa anterior.
83
Nota
1. Partiendo de la matriz
1 1 0 0
1 1 0 0
U (:, :, 1) =
1 1 0 0
1 0 0 0
almacenar en las sucesivas U (:, :, J) todas las posibles distribuciones de unos manteniendo en cada fila
el número de unos que hay en U (:, :, 1).
Datos de entrada de la función distribuciones.m:
Ninguno.
Datos de salida de distribuciones.m:
U −→ la matriz con las posibles distribuciones de unos.
M −→ el número de matrices que han resultado
2. Programar una función matval.m que permita reconocer si una matriz es solución del problema o no.
Datos de entrada de la función matval.M:
A −→ matriz 4 × 4 de unos y ceros.
Datos de salida de matval.m:
A −→ si la matriz es solución del problema y la matriz idénticamente cero, A = 0, si no es solución
del problema.
3. Programar una función con el nombre de pr.m que llamando a las anteriores encuentre todas las
posibles soluciones del problema planteado, mostrando por pantalla las que efectivamente sean solución
del problema.
4. Crear una librerı́a propia con las funciones programadas en los ejercicios anteriores en un subdirectorio
de la cuenta propia de cada uno llamado ejercicio. Probar a situarse en el directorio raiz propio
(bajo MATLAB) y comprobar que se ha creado apropiadamente la librerı́a ejecutado la función desde
allı́.
NOTA: las funciones resaltadas con están disponibles en el paquete base de MATLAB y las resaltadas
mediante sólo están disponibles en la tolboox stats de MATLAB.
Estadı́stica Descriptiva
[datos,var,indiv]=tblread
→ Permite la lectura de datos almacenados en un fichero externo en forma
tabular. Los ficheros con este formato presentan tres caracterı́sticas:
2. La primera columna contiene los nombres o ı́ndices de los individuos o casos considerados.
La ejecución de esta función abre la ventana open (para que el usuario seleccione el nombre del fichero
tabular que quiere leer) y devuelve tres variables: datos, que contiene los registros de cada par individuo-
variable, var, con los nombres de las variables e indv, con los nombres de los individuos o casos registrados
en el fichero.
Esta función admite dos argumentos opcionales, uno para especificar directamente el nombre del archivo de
lectura y otro para indicar el delimitador empleado en dicho fichero (MATLAB asume por defecto que el
delimitador utilizado es un espacio en blanco). Se aceptan los siguientes caracteres como delimitadores de
campos: ’ ’, ’\t’, ’,’, ’;’, ’!’, o sus correpondientes nombres: ’space’, ’tab’, ’comma’, ’semi’, ’bar’.
tblwrite(datos,var,indiv)
→ Permite la escritura de datos en un fichero externo en forma tabular. La
ejecución de esta función abre una ventana save (para que el usuario seleccione el nombre del fichero que
quiere crear) y construye un archivo tabular con var como nombre de las variables (primera fila), indiv
como nombre de los individuos o casos (primera columna) y con datos como matriz de registros de cada
par individuo-variable.
Esta función admite dos argumentos opcionales, uno para especificar directamente el nombre del archivo de
lectura y otro para indicar el delimitador empleado en dicho fichero (MATLAB asume por defecto que el
delimitador utilizado es un espacio en blanco). Se aceptan los siguientes caracteres como delimitadores de
campos: ’ ’, ’\t’, ’,’, ’;’, ’!’, o sus correpondientes nombres: ’space’, ’tab’, ’comma’, ’semi’, ’bar’.
85
34 Estadı́stica Descriptiva
tabla=tabulate(v)
→ Obtiene la tabla de distribución de frecuencias de v. El argumento debe ser un
vector de números naturales.
[tabla, χ2 , p]=crosstab(v1,v2)
→ Toma dos vectores de números naturales y calcula su tabulación
cruzada. El elemento (i, j) de tabla contiene la frecuencia de aparición del par (i, j). Esta función admite dos
argumentos de salida adicionales que almacenan el estadı́stico χ2 y el p-valor del contraste de independencia
correspondiente.
v=nanmean(X)
→ Se diferencia de la anterior en que prescinde de los valores nan.
v=median(X) → Mediana.
v=nanmedian(X)
→ Se diferencia de la anterior en que prescinde de los valores nan.
v=trimmean(X,p)
→ Media recortada. El porcentaje de recorte se indica con el escalar p ∈ [0, 100]. La
media se calcula prescindiendo del p2 % de los datos menores y mayores.
v=geomean(X)
→ Media geométrica.
v=harmmean(X)
→ Media armónica.
NOTAS sobre éstas medidas:
[Y,v]=min(X) → Mı́nimo. El vector v contiene los ı́ndices correspondientes a los valores mı́nimos encon-
trados. Si se alcanza varias veces en una misma columna entonces solo muestra el primero.
[Y,v]=max(X) → Máximo. El vector v contiene los ı́ndices correspondientes a los valores máximos encon-
trados. Si se alcanza varias veces en una misma columna entonces solo muestra el primero.
Y=prctile(X,p)
→ Calcula los percentiles indicados en el vector p en cada una de las columnas de la
matriz X. Concretamente, la i-ésima fila de Y contiene el p(i) percentil de cada una de las columnas de X.
Las componentes de p pertenecen al intervalo [0, 100].
v=var(X) → Obtiene un vector fila cuyas componentes son la cuasivarianza muestral de cada una de las
columnas de X.
v=var(X,1) → Obtiene un vector fila cuyas componentes son la varianza muestral de cada una de las
columnas de X.
v=std(X) → Vector fila con la cuasidesviación estándar muestral de las columnas de X.
v=nanstd(X)
→ Se diferencia de la anterior en que prescinde de los valores nan.
v=range(X)
→ Recorrido.
v=iqr(X)
→ Rango intercuartı́lico
v=mad(X)
→ Desviación absoluta media
[X2,v]=sortrows(X1) → Ordena las filas de X1 en orden ascendente tomando como referencia las compo-
nentes de la primera columna de X1 y en caso de empate, las siguientes columnas en el orden natural. v es
un vector de ı́ndices que describe cómo se ha realizado la ordenación.
[X2,v2]=sortrows(X1,v1) → Ordena las filas de X1 en orden ascendente tomando como referencia las com-
ponentes de la columna de X1 indicada en el primer ı́ndice del vector v1 y en caso de empate, las siguientes
columnas indicadas en v1. v2 es un vector de ı́ndices que describe cómo se ha realizado la ordenación.
[X2,I]=sort(X1) → Ordena de modo creciente cada una de las columnas de X1. La matriz I describe la
ordenación realizada en cada columna.
cumsum → Suma acumulada.
[medias,dem,freq] = grpstats(X,niveles,α)
→ niveles es un vector columna con números naturales que
indica la población o grupo al que pertenece cada una de las filas de X. Esta función almacena en medias
la media de cada columna de X y en cada una de las poblaciones consideradas. La variable dem contiene el
error estándar de cada una de las medias calculadas. freq guarda las frecuencias de cada grupo en cada
una de las columna de X. Finalmente, si se indica un nivel de confianza α entonces la función representa los
intervalos de confianza de nivel 1 − α correspondientes a cada columna y población.
v=skewness(X)
→ Asimetrı́a.
v=kurtosis(X)
→ Kurtosis (sin referencia a la normal).
v=moment(X,c)
→ Calcula el momento respecto de la media de orden c en cada una de las columnas
de X.
X2=cov(X1)
→ Matriz de covarianzas de X1. Se emplea como cociente a n − 1. Para utilizar el cociente
n es necesario incluir el argumento 1.
X=cov(v1,v2)
→ Matriz de covarianzas de [v1(:) v2(:)]. Se emplea como cociente a n − 1. Para
utilizar el cociente n es necesario incluir el argumento 1.
X2=corrcoef(X1)
→ Matriz de correlaciones de X1.
pie3((x,sep,etiq)) → Diagrama de sectores tridimensional. Sus argumentos son análogos a los anteriores.
stem3 → Diagrama de barras tridimensional. Sus argumentos y el resultado que producen son análogos a
los anteriores.
bar(...) → Diagrama de rectángulos. Sus argumentos y el resultado que producen son:
1. bar(v): Representa un rectángulo para cada componente de v. El rectángulo i-ésimo tiene altura v(i).
3. bar(x,v), bar(x,X): Se diferencia de las representaciones anteriores en que los rectángulos se loca-
cilizan en las abcisas especificadas en x.
4. barh(...): Se diferencia de las representaciones anteriores en que los rectángulos se dibujan horizon-
talmente.
representaciones sin apilar). Finalmente, aspecto incide sobre los colores, el estilo y la anchura de lı́nea
utilizados, etc.
pareto(v,nombres) → Dibuja un diagrama de Pareto. La variable nombres contiene las nombres de las
categorı́as que se quieren representar y la variable v almacena las frecuencias de cada una de ellas.
[v,agrup]=hist(...): v contienen las frecuencias de cada clase y agrup los centros de dichas clases.
La función hist admite una matriz como argumento. En este caso la función se evalúa en cada columna y
los resultados se dibujan por grupos en cada clase del agrupamiento empleado.
plotmatrix(X1,X2) → Representa la nube de puntos determinada por cada par de columnas X1(:,i),X2(:,j).
plotmatrix(Y) coincide con plotmatrix(Y,Y) excepto en que la diagonal se sustituye por hist(Y(:,i)).
boxplot(X,notch,’simb’,vert,lb)
→ Diagrama de caja. Sus argumentos son:
notch=0 es el valor por defecto y representa una caja rectángular. Con notch=1 se dibuja la caja con
“muesca”.
’simb’ contiene el sı́mbolo utilizado para representar los datos outliers. Por defecto toma el valor
’simb’=’+’.
vert=1 es el valor por defecto y representa cajas verticales. Con vert=0 se dibujan cajas horizontales.
lb determina la longitud de los “bigotes” en unidades del rango intercuartı́lico. lb=1.5 es el valor por
defecto.
gline(fig)
→ Dibuja interactivamente una recta en la ventana gráfica fig. gline() hace referencia a
la ventana gráfica activa.
refline(a,b)
→ Añade la recta y = ax + b a la figura actual.
lsline
→ Añade la recta de ajuste mı́nimo cuadrática a un Scatterplot.
normplot(X)
→ Representa el plot de normalidad de cada una de las columnas de X.
qqplot(X,Y,pvec)
→ Representa el plot cuantil-cuantil para los pares de muestras X(:,j),Y(:,j). El
argumento opcional pvect se utiliza para especificar los percentiles empleados en la representación.
refcurve(p)
→ Añade a la figura actual la gráfica del polinomio p. Para especificar dicho polinomio se
utiliza un vector cuyas componentes son los coeficientes del mismo comenzando con el asociado a la potencia
de mayor grado.
34.8. Ejercicios
2. a) Crea una función para averiguar si una muestra de datos contiene valores atı́picos, siguiendo el
criterio utilizado en el Box-plot.
b) Construye una función que devuelva
La media y la desviación estándar de los datos si en la muestra no existen outliers o
La mediana y el rango intercuartı́lico de los datos si en la muestra hay outliers.
3. Crea una función que construya una tabla de percentiles con dos columnas. La primera debe contener
el porcentaje de cada uno de ellos y la segunda el percentil correspondiente.
4. He aquı́ datos de 8 escuelas de secundaria sobre el consumo de tabaco entre los estudiantes y entre sus
padres:
Estudiantes Estudiantes
fumadores no fumadores
Los dos padres fuman 400 1380
Sólo uno de los padres fuma 416 1823
Ninguno de los padres fuma 188 1168
Representa estos datos en un diagrama de barras. Añade tı́tulo y una leyenda con el nombre de las
categorı́as representadas.
Utiliza las siguientes clases:(−∞, 0], (0, 3], (3, 10], (10, 14].
6. Construye una función que realize la tabla de distribución de frecuencias de un conjunto de números
naturales. Dicha tabla debe contener las frecuencias absolutas, relativas, absolutas acumuladas y re-
lativas acumuladas.
Modelos de Probabilidad
MATLAB tiene implementadas las siguientes distribuciones de probabilidad (entre paréntesis se muestra
una sintaxis equivalente o abreviada):
Para cada una de ellas MATLAB calcula la función de densidad o probabilidad (según que el modelo sea
continuo o discreto), su media y varianza, la función de distribución, la inversa de la función de distribución
(percentiles) y genera números pseudoaleatorios.
Y = pdf(’nombre’,X,A1,A2,A3)
→ Calcula las ordenadas de la función de densidad/probabilidad del
modelo ’nombre’ con los parámetros especificados en las matrices A1, A2 y A3 (dependiendo de la distribución
algunos de estos parámetros pueden ser innecesarios) en las abcisas especificadas como elementos de la matriz
92
35 Modelos de Probabilidad
X. Los argumentos X, A1, A2 y A3 deben tener todos el mismo tamaño excepto valores escalares (que funcionan
como matrices constantes con el mismo tamaño que el resto de los argumentos).
Y = cdf(’nombre’,X,A1,A2,A3)
→ Calcula las ordenadas de la función de distribución del modelo
’nombre’ siguiendo las pautas descritas anteriormente.
Y = icdf(’nombre’,X,A1,A2,A3)
→ Calcula los percentiles del modelo ’nombre’ siguiendo las pautas
descritas inicialmente.
Y = random(’nombre’,A1,A2,A3,m,n)
→ Genera a partir de la distribución ’nombre’ una matriz de
tamaño m × n con números aleatorios siguiendo las pautas descritas inicialmente. Los parámetros m y n
son opcionales y su valor por defecto es 1.
Y = mvnrnd(µ,SIGMA,n)
→ Genera a partir de una distribución normal multivariante con vector de
medias µ y matriz de covarianzas SIGMA una matriz de números aleatorios con n filas.
[mu,sigma]=betastat(A,B) [mu,sigma]=binostat(N,P)
[mu,sigma]=chi2stat(NU) [mu,sigma]=expstat(MU)
[mu,sigma]=fstat(V1,V2) [mu,sigma]=gamstat(A,B)
[mu,sigma]=geostat(P) [mu,sigma]=hygestat(M,K,N)
[mu,sigma]=lognstat(MU,SIGMA) [mu,sigma]=nbinstat(R,P)
[mu,sigma]=ncfstat(NU1,NU2,DELTA) [mu,sigma]=nctstat(NU,DELTA)
[mu,sigma]=ncx2stat(NU,DELTA) [mu,sigma]=normstat(MU,SIGMA)
[mu,sigma]=poisstat(MU) [mu,sigma]=raylstat(B)
[mu,sigma]=tstat(NU) [mu,sigma]=unifstat(A,B)
[mu,sigma]=unidstat(N) [mu,sigma]=weibstat(A,B)
35.7. Ejercicios
1. Aproximar mediante simulación p(log |X| + X 3 ∈ (−1, 2)) siendo X una variable aleatoria con dis-
tribución N(1, 2).
2. Comprobar gráficamente la aproximación de una distribución B(100, 0,5) a una distribución N(50, 5)
representando simultáneamente sus funciones de probabilidad y densidad.
4. Crea una función que simule números pseudoaleatorios según la distribución de probabilidad dada por
la siguiente función de densidad:
1
f (x) = λe−λ|x| , −∞ < x < ∞.
2
2. µ0 : hipótesis nula.
1. sol: indica si el resultado del test es rechazar µ = µ0 (sol=1) o, por el contrario, si el test no es
significativo (sol=0).
2. µ0 : hipótesis nula.
95
36 Estimación de parámetros y Contraste de Hipótesis
1. sol: indica si el resultado del test es rechazar µ = µ0 (sol=1) o, por el contrario, si el test no es
significativo (sol=0).
[sol,pvalor,IC] = ttest2(muestra1,muestra2,α,tipo)
→ Test sobre la igualdad medias µ1 = µ2 de dos
poblaciones normales, N(µ1 , σ1 ) y N(µ2 , σ2 ), con σ1 = σ2 desconocido. Los argumentos de esta función son:
1. sol: indica si el resultado del test es rechazar µ1 = µ2 (sol=1) o, por el contrario, si el test no es
significativo (sol=0).
[pvalor,sol] = signtest(muestra1,muestra2,α)
→ Test de los signos sobre la igualdad de medianas de
dos poblaciones pareadas. Si muestra2 es una constante m entonces la función realiza el test de los signos
para constrastar si la mediana de la población muestreada en muestra 1 es m. Los argumentos de esta
función son:
1. sol: indica si el resultado del test es rechazar la igualdad de medianas (sol=1) o, por el contrario, si
el test no es significativo (sol=0). El resultado es análogo si muestra2 es constante.
[pvalor,sol] = signrank(muestra1,muestra2,α)
→ Test de los rangos sobre la igualdad de medianas de
dos poblaciones pareadas. Los argumentos de esta función son:
1. sol: indica si el resultado del test es rechazar la igualdad de medianas (sol=1) o, por el contrario, si
el test no es significativo (sol=0).
[pvalor,sol] = ranksum(muestra1,muestra2,α)
→ Test de la suma de rangos de Wilcoxon sobre la igual-
dad de medianas de dos poblaciones independientes. Los argumentos de esta función son:
1. sol: indica si el resultado del test es rechazar la igualdad de medianas (sol=1) o, por el contrario, si
el test no es significativo (sol=0).
36.1. Ejercicios
1. Programa una función que calcule el intervalo de confianza para una proporción.
a partir de una muestra de tamaño n. Guárdalos en un fichero externo en forma tabular llamando LI
y LU a los extremos inferior y superior de los mismos. Etiqueta cada uno de ellos con el ı́ndice de orden
correspondiente. Representa gráficamente los intervalos obtenidos.
[β̂,β̂int,ε̂,ε̂int,stats] =regress(y,X,α)
→ Regresión lineal múltiple. regress resuelve el modelo lineal
y = Xβ + ε donde:
’interaction’: incluye el término constante, los trminos lineales y los productos cruzados.
98
37 Análisis de la Varianza y Modelos de Regresión
Residuales ε̂.
Leverages.
Matriz ”Hat”.
Distancia de Cook.
D = x2fx(X,’model’)
→ Transforma una matriz de regresores en una matriz de diseño para un modelo
lineal aditivo con término constante. ’model’ puede ser interaction’, ’quadratic’, ’purequadratic’
(con el mismo significado que en la función regstats) o bien una matriz de terminos que referencian en sus
filas a los regresores contenidos en X y en las columnas a los exponentes correspondientes a dichos regresores
en el modelo final.
stepwise(X,y,modelo,α)
→ Entorno interactivo para la regresión stepwise. stepwise(X,y) ajusta un
modelo de regresión de y sobre las columnas de X. Se muestran tres ventanas gráficas para controlar inter-
activamente la incorporación o eliminación de términos en el modelo. La función admite dos argiumentos
opcionales: el vector modelo, que contiene los ı́ndices de las columnas de X que serán incluidos en el modelo
incial, y α, que indica el nivel de confianza empleado en el proceso stepwise. Por defecto se considera el
modelo completo y α = 1 − (1 − 0,025)(1/p) siendo p el número de columnas de X. Este nivel de confianza
corresponde al Método de Bonferroni.
Los coeficientes de la regresión se representan con un cı́rculo verde. Los términos del modelo que son
significativos se representan mediante lı́neas solidas y los que no lo son a través de lı́neas punetadas.
Un “Click” sobre las lı́neas de los intervalos de confianza permite conocer el estado de los coeficientes
del modelo. Si la lı́nea es verde, entonces el término está en el modelo. Si es roja, no lo está.
Se utiliza Export para enviar variables al espacio de trabajo del usuario.
p = anova1(X)
→ Análisis de la varianza balanceado de un factor. Su argumento X es una matriz en
cuyas columnas se situan los datos correspondientes a cada grupo. El resultado es el p-valor para el contraste
de igualdad de medias. La función devuelve la tabla ANOVA y los diagramas de caja de cada grupo.
p = anova1(X,grupo)
→ Análisis de la varianza (no necesariamente balanceado) de un factor. Sus
argumentos son los vectores x y grupo. x contiene las frecuencias de los grupos. grupo identifica el grupo de
cada elemento de x. Las componentes de grupo son números naturales con valor mı́nimo 1 y valor máximo
el número de poblaciones o grupos comparados. La función devuelve la tabla ANOVA y los diagramas de
caja de cada grupo.
p = anova2(X,rep)
→ Análisis de la varianza balanceado de dos factores. Su argumento X es una matriz
cuyas columnas corresponden a los niveles de un factor y cuyas filas hacen referencia a los niveles del otro
factor y a las repeticiones rep de cada grupo. El resultado es el p-valor para el contraste de igualdad de
medias. La función devuelve la tabla ANOVA.
D = dummyvar(grupo)
→ Genera una matriz de diseño con columnas 0-1. grupo es una matriz cuyas
columnas hacen referencia a factores y contienen números naturales que indican el grupo al que pertenecen
los elementos de cada fila de un determinado vector columna respuesta. D tiene una columna para cada valor
diferente en las columnas de la matriz grupo.
37.3. Ejercicios
1. El fichero hald.mat contiene los datos recogidos en un estudio sobre el calor producido por varias
mezclas de cementos. Cada mezcla contiene cuatro ingredientes distintos y el calor desprendido depende
de la cantidad de cada ingrediente presente en la mezcla. Ajusta un modelo de regresión a estos datos.
2. Para detectar la presencia de insectos dañinos en los campos de cultivo, se sitúa en estos campos
láminas de plástico que contienen un material pegajoso en su superficie y se examinan los insectos
capturados en las láminas. Unos investigadores situaron 24 láminas, seis de cada color, ubicadas al
azar en un campo de avena y determinaron el número de insectos capturados:
Encuesta final
101