Está en la página 1de 102

UNIVERSIDAD DE VALLADOLID

Escuela Universitaria Politécnica

Departamento de Matemática Aplicada a la Técnica

Curso de iniciación a MATLAB


Tercera Edición

Óscar Angulo Torga


Eduardo Cuesta Montero
César Gutiérrez Vaquero
Marı́a del Carmen Martı́nez Martı́nez
Índice general

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

4. Funciones matemáticas y formatos de salida 10


4.1. Funciones matemáticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.2. Formatos de salida de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

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

6. Generación automática de datos y asignación de variables 14


6.1. Generación automática de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6.2. Asignación de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6.3. Selección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
6.4. Gestión de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
6.5. Entorno de trabajo (Matlab Desktop) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
6.6. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

7. Operadores lógicos 18
7.1. Operadores lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
7.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

8. Editor de texto. Ficheros .m 20


8.1. Editor de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
8.2. Ficheros ∗.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
8.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

9. Lectura y escritura sin formato en fichero 22


9.1. Lectura y escritura sin formato en fichero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
9.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

10.Estructura de selección 24
10.1. Estructura if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
10.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

11.Estructura iterativa while 27


11.1. Estructura iterativa while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
11.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

12.Estructura iterativa for 28


12.1. Estructura iterativa for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
12.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

13.Funciones 30
13.1. Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
13.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

14.Programación modular 32
14.1. Programación modular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 2


Índice general

14.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

15.Escritura con formato en fichero 35


15.1. Escritura con formato en fichero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
15.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

16.Lectura de fichero con formato 38


16.1. Lectura de fichero con formato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
16.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

17.Librerı́as generales 40
17.1. Librerı́as asociadas con la utilización de matrices y funciones . . . . . . . . . . . . . . . . . . 40
17.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

18.Primeros gráficos bidimensionales 48


18.1. Comando plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
18.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

19.Dibujo de funciones 50
19.1. Comando fplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
19.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

20.Modificadores de los gráficos bidimensionales 51


20.1. Opciones de los comandos plot y fplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
20.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

21.Control de gráficos bidimensionales 53


21.1. Control de gráficos bidimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
21.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

22.Control de la ventana gráfica bidimensional 57


22.1. Control de la ventana gráfica bidimensional . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
22.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

23.Gráficos con números complejos y en escalas logarı́tmicas 59


23.1. Gráficos con números complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
23.2. Gráficos en escalas logarı́tmicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
23.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 3


Índice general

24.Librerı́as con funciones y gráficos estadı́sticos 62


24.1. Entrada de datos tabulados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
24.2. Descripción y exploración gráfica de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
24.3. Descripción analı́tica de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
24.4. Distribuciones de probabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
24.5. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

25.Primeros gráficos tridimensionales 68


25.1. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

26.Dibujo de mallados 69
26.1. Dibujo de mallados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
26.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

27.Control de la ventana y de los gráficos tridimensionales 71


27.1. Control de gráficos tridimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
27.2. Control de la ventana gráfica tridimensional . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
27.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

28.Dibujo de poliédros y de lı́neas de contorno 73


28.1. Dibujo de poliédros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
28.2. Dibujo de lı́neas de contorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
28.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

29.Librerı́as relacionadas con gráficos bidimensionales y tridimensionales 75


29.1. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

30.Copia de la ventana gráfica y encuesta final 77


30.1. Copia de la ventana gráfica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
30.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

31.Estructura de selección case 78


31.1. Estructura de selección case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
31.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

32.Debugger 80
32.1. Opciones del debugger de MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
32.2. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 4


Índice general

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

36.Estimación de Parámetros y Contraste de Hipótesis 95


36.1. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

37.Modelos de Regresión y Análisis de la Varianza 98


37.1. Modelos de regresión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
37.2. Análisis de la varianza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
37.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

38.Encuesta final 101

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 5


Hora 1

Introducción

1.1. Presentación del curso

1.2. Entorno Linux

1.3. Encuesta inicial

6
Hora 2

Entorno de trabajo

2.1. Matlab Desktop

Junto a la barra de menus caracterı́stica de cualquier aplicación “Windows” distinguimos

Command Window
−→ Ventana de comandos.
Command History
−→ Historial de comandos.
Current Directory
−→ Directorio actual.

2.2. Ejercicios

1. Modifica el entorno original para que aparezca:

Únicamente la ventana de comandos.


La Ventana de comandos y los comandos ejecutados en sesiones anteriores.
La ventana de comandos y el directorio de trabajo.
Prueba otras posibilidades y escoge la que más se adecúe a tu forma de trabajo.

2. Crea un directorio de trabajo con tu nombre.

7
Hora 3

Aritmética elemental

3.1. Edición en la lı́nea de comandos


↑ ↓
−→ Historial de comandos ejecutados.
← →
−→ Permiten el desplazamiento horizontal en la lı́nea de comandos.

. . . +[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. Aritmética elemental escalar (real y compleja)

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

3.2.2. Números complejos

Asignación
−→ Ej.: z=2-3i, z=-4+7j, z=2+2*i

3.2.3. Constantes predefinidas

pi
−→ Número π.
i, j
−→ Unidad imaginaria.
eps
−→ Épsilon de la máquina.

3.2.4. Inf y NaN

Inf, inf
−→ Representa el infinito.

NaN, nan
−→ “Not a Number” (indeterminación).

3.3. Ejercicios

Realiza las siguientes operaciones y observa el resultado:


1. 1+2 14. 1/inf 27. 1−2·i·2+4·i

2. % 1+2 15. 5 · inf 28. (1 − 24 · i)/(2 + 4 · i)

3. 1 + (2 · 4); 16. inf/inf 29. (1 − 24 · i)\(2 + 44 · i)

4. 1+2·4 17. inf · inf 30. (i − 2 · i)(2+4·i)

5. (1 + 2) · 4 18. nan · 0 31. 2E − 2 · 3E8

6. (1 + 2)4 19. nan · 1 32. 2, 34 · 3

7. 1 + (2 · 4) 20. nan · inf 33. 2,34 · 3

8. 4/2 21. 23 34. eps

9. 4\2; 22. 23 + 2 35. eps + 1

10. 3 · 2\4 23. 23 · 2 36. 1/(0 + eps)

11. 3 · (2\4) 24. i2 , i3 , i4 , i0 37. (0 + eps)/(0 + eps)

12. (3 · 2)\4 25. 1−2·i+2+4·i 38. (pi + eps)/pi

13. 1/0 26. (1 − 2 · i) · (2 + 4 · i)

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 9


Hora 4

Funciones matemáticas y formatos de


salida

4.1. Funciones matemáticas


sin, cos, asin, acos, sqrt, log, . . .
−→ Seno, coseno, arcoseno, arcocoseno, raı́z cuadrada, logaritmo
neperiano,... Ej.: cos(pi)

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]

4.2. Formatos de salida de datos


format, format short
−→ Formato corto. Ej.: 0.0769

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?

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 11


Hora 5

Aritmética matricial

5.1. Vectores y matrices

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.2. Operaciones matriciales

+, −, ∗,ˆ, .0 , 0 , inv(·), /, \, det(A)


−→ Suma, resta, producto, potenciación, traspuesta, traspuesta y
conjugada, inversa, división, división inversa y determinante de una matriz.

.∗, .ˆ, ./, .\


−→ Producto, potenciación, división y división inversa elemento a elemento (se emplean
los anteriores precedidos por un punto).

5.3. Funciones matriciales


sin, cos, asin, acos, sqrt, log, . . .
−→ Seno, coseno, arcoseno, arcocoseno, raı́z cuadrada, logaritmo
neperiano,.... Ej.: cos([1 2; 3 4])

5.4. Ejercicios

Realiza, si es posible, las siguientes operaciones y observa el resultado:


   
1 2 1 2 1 1
1.  1 2 1  +  1 1 1 
   
1 2 1 3 1 1

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

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 13


Hora 6

Generación automática de datos y


asignación de variables

6.1. Generación automática de datos


eye(n, m), eye(n)
−→ Matriz unidad de tamaño n × m (tamaño n × n respectivamente).

zeros(n, m), zeros(n)


−→ Matriz nula de tamaño n × m (tamaño n × n respectivamente).

ones(n, m), ones(n)


−→ Matriz de unos de tamaño n × m (tamaño n × n respectivamente).

rand(n, m), rand(n)


−→ Matriz de números aleatorios entre 0 y 1 con distribución uniforme y
tamaño n × m (tamaño n × n respectivamente).

randn(n, m), randn(n)


−→ Matriz de números aleatorios con distribución N (0, 1) y tamaño n × m
(tamaño n × n respectivamente).

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.

6.2. Asignación de variables

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(:)

6.4. Gestión de variables


clear
−→ Elimina las variables residentes en el “espacio de trabajo”.

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.

6.5. Entorno de trabajo (Matlab Desktop)

Workspace
−→ Espacio de variables.

6.6. Ejercicios

1. Teclea las siguientes secuencias de comandos y explica los resultados obtenidos.


x=3;x
y=3+5;y
x=2;y=3;x=y;x,y
x=2;y=3;y=x;x,y
x=y=z
x==y

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:

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 15


6 Generación automática de datos y asignación de variables

v1=input(’Teclea el vector [1 2 3]\n’)


v2=input(’Teclea el vector [-1 0 -3]\n’)
v3=input(’Teclea el vector [1 1 1 1]\n’)

Realiza, si es posible, las siguientes operaciones:


1. v1 + 2 11. v1 ∗ v3

2. v1 + v2 12. v1. ∗ v3

3. v1 + v3 13. v1.0 ∗ v2

4. 2 ∗ v1 14. v1 ∗ v2.0

5. v1 ∗ v2 15. log(v1), sin(v2)

6. v1 ∗ v2t 16. 2.ˆv1

7. v1 . ∗ v2t 17. v1.ˆ2

8. v1t ∗ v2 18. sin(v2 )/v2

9. v1t . ∗ v2 19. sin(v2 )./v2

10. v1. ∗ v2 20. sin(v2 + eps)./(v2 + eps)


3. Asigna a las variables A1, A2 y A3 las matrices
 
! ! −1 4
1 2 1 2
, ,  5 −1  .
 
4 5 2 1
1 7

Realiza, si es posible, las siguientes operaciones:


1. A1 + 2 13. ones(6). ∗ eye(6)

2. 2 ∗ A1 14. rand(5), rand(5), rand(5)

3. A1 + A2 15. A = magic(3)

4. A2 ∗ A1 16. sum(A)

5. A1 ∗ A3 17. sum(At )

6. A3 ∗ A1 18. sum(A(:, 2)), sum(A(:, 3)), sum(A(2, :))

7. A1. ∗ A2 19. Utiliza la ayuda para calcular el determinante y


la traza de la matriz A2.
8. log(A3)
20. Enumera las variables que residen en el espacio
9. A1−1
de trabajo.
10. ones(6) ∗ ones(6, 1)
21. Vacı́a el espacio de trabajo.
11. ones(6) ∗ ones(1, 6)
22. Enumera las variables que residen ahora en el
12. ones(6) ∗ eye(6) espacio de trabajo.

4. Declara los vectores v1=[1 2 3 4 5 6 7 8 9 10], v2=[1 3 5 7 9] y v3=[2 4 8 16 32 48] de dis-


tintas maneras. ¿Cuál es la más sencilla?.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 16


6 Generación automática de datos y asignación de variables

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)

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 17


Hora 7

Operadores lógicos

7.1. Operadores lógicos

<, >, <=, >=, ==, ˜=


−→ “Menor que”, “mayor que”, “menor o igual que”, “mayor o igual que”,
“igual que”, “distinto que”. Ej.: 0=false, 1=true

&, |, ˜, xor
−→ Operadores lógicos “y”, “o”, “no”, “o excluyente”. Ej.: 0=false, 1=true

7.2. Ejercicios

1. Ejecuta las siguientes operaciones y observa el resultado:


!
1 0
1. 2 < 3 8. eye(2)==
0 1
2. 3 < 2
9. eye(2)˜=ones(2)
3. 2 > 3
10. A = 1 : 3; B = 5 : 7;
4. 3 > 2
A >= 4
5. 1 == 2 B >= 4
6. [1 2 3] == [3 2 1] A >= 4 & B >= 4
! ! A >= 4 | B >= 4
1 2 1 2
7. ==
3 4 3 5

2. Expresa las siguientes condiciones utilizando comandos y operadores de MATLAB.

1. n es un número mayor o igual que 4 y menor que 8.


2. n es un número mayor o igual que 4 o menor que 8.
3. n es un número mayor o igual que 4 y distinto de 10.
4. n es número par.
5. n es un número par entre 500 y 1010 (ambos incluidos).

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

4. A. ∗ (˜B) 10. A + B&C

5. (A <= B) + C 11. D = A&B. ¿Qué tipo de dato es D?

6. A|B 12. D = A&B + C. ¿Qué tipo de dato es


D?

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 19


Hora 8

Editor de texto. Ficheros .m

8.1. Editor de texto


Matlab editor
−→ Crea y edita ficheros .m.

• Utilidades del editor.


• Utilidades del entorno del editor.
• Utilidades del entorno de trabajo respecto al editor.
• Barras.

8.2. Ficheros ∗.m


∗.m
−→ Ficheros de texto que contienen código MATLAB. Se ejecutan:

• 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.

2. Ejecuta la siguiente serie de comandos

x=rand(3,1);
y=rand(3,1);
z=x+y.^2;
hist(z);

A continuación ejecuta x=randn(3,1); y

Ejecuta de nuevo el resto de comandos.


Copialos y pegalos en un nuevo fichero de texto.

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.

4. Abre el fichero Entorno01.m

Evalua una selección


Pon comentarios en las lı́neas.
Edita en el fichero

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 21


Hora 9

Lectura y escritura sin formato en fichero

9.1. Lectura y escritura sin formato en fichero

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 datos X Y % Copia en el fichero datos.mat las variables X e Y del espacio de


% trabajo.

save datos U V -append % Incorpora al fichero datos.mat las variables U y V del


% espacio de trabajo. NOTA: sobreescribe.

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

load datos % Copia en el espacio de trabajo las variables contenidas


% en el fichero datos.mat

22
9 Lectura y escritura sin formato en fichero

load datos X Y % Copia en el espacio de trabajo las variables X e Y contenidas en


% en el fichero datos.mat

load data.txt % Copia en el espacio de trabajo los datos contenidos en el


% fichero con formato ascii data.txt y en la variable data.

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

Realiza las siguientes operaciones:

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).

3. Graba el vector v en un fichero prueba.mat.

4. Borra el espacio de trabajo. Comprueba que lo has hecho.

5. Calcula v*8.

6. Calcula la matriz mágica A de tamaño 5.

7. Añade en el fichero prueba.mat la matriz A.

8. Borra el espacio de trabajo. Comprueba que lo has hecho.

9. Calcula el determinante de la matriz A.

10. Añade el vector v = (1, 2, 3) en el fichero prueba.mat.

11. Borra el espacio de trabajo. Comprueba que lo has hecho.

12. Carga el fichero prueba.mat y comprueba cuáles son sus variables.

13. Observa la secuencia de comandos que has realizado durante la resolución de este ejercicio.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 23


Hora 10

Estructura de selección

10.1. Estructura if

if condición lógica
..
. % secuencia de comandos
end

Ej.:

if n>0 & n<2 % si n>0 y n<2 entonces haz...


disp(’Estas en el intervalo’)
end

if condición lógica
..
. % secuencia de comandos
else
..
. % secuencia de comandos por defecto
end

Ej.:

if n>0 & n<2 % si n>0 y n<2 entonces haz...


disp(’Estas en el intervalo’)
else % en caso contrario haz...
disp(’No estas en el intervalo’)
end

24
10 Estructura de selección

if primera condición lógica


..
. % secuencia de comandos (bloque I)
elseif segunda condición lógica
..
. % secuencia de comandos (bloque II)
elseif tercera condición lógica
..
. % secuencia de comandos (bloque III)
else
..
. % secuencia de comandos por defecto (bloque IV)
end

Ej.:

if abs(x)<2 % Si el valor absoluto de x es menor que 2 haz


disp(’La variable x esta acotada’)
elseif x>-3 % Si no es asi y si x>-3 haz
disp(’La variable no esta acotada’)
end

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.

7. Escribe un fichero de comandos para evaluar la siguiente función:




 x+y si x ≥ 0, y ≥ 0,
 x + y2

si x ≥ 0, y < 0,
f (x, y) = 2

 x +y si x < 0, y ≥ 0,
 2
x + y 2 si x < 0, y < 0.

Utiliza el comando input para la lectura de datos.

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.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 25


10 Estructura de selección

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?

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 26


Hora 11

Estructura iterativa while

11.1. Estructura iterativa while

while condición lógica


..
. % secuencia de comandos
end

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.

4. Escribe un fichero de comandos que simule el juego de las 7 y media.

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

Estructura iterativa for

12.1. Estructura iterativa for

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.

y,x % Muestra por pantalla los vectores declarados.

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.

7. Edita un fichero de comandos para averiguar si un número almacenado en la variable n e introducido


a través del teclado es primo.

28
12 Estructura iterativa for

8. Escribe un fichero de comandos que compruebe si una matriz es mágica.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 29


Hora 13

Funciones

13.1. Funciones

function [salida1,. . . ,salidaN]=nombre(entrada1,. . . ,entradaM)


−→ Primera lı́nea de la función nom-
bre.m

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

donde la función mifactorial viene definida por

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.

3. a) Programa una función que simule el lanzamiento de un dado. Utiliza el comando


rand(’state’,sum(100*clok)).
b) Programa una función que simule el resultado de n tiradas aleatorias de un dado.
c) Ejecuta el programa anterior para n = 1000 y cuenta el número de veces que aparece cada
resultado mediante un programa.
d) Crea una función que simule el resultado de sumar la tirada de tres dados.
e) Crea un programa que devuelva el máximo valor que se obtiene al repetir el experimento anterior
dos veces.

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,....).

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 31


Hora 14

Programación modular

14.1. Programación modular

La programación modular responde a la idea “divide y vencerás”. En efecto, la implementación de


cualquier tarea, por muy compleja que ésta sea, es abordable si la fraccionamos en otras más simples y
fáciles de programar. Con esta forma de actuar se consiguen además varios objetivos fundamentales de la
programación:

Disponer de un catálogo de funciones preparadas para su utilización sobre cualquier otro programa.

Elaborar códigos sencillos, fáciles de entender y modificar posteriormente.

Simplificar la escritura del programa y, por ende, evitar errores sintácticos.

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

El autobús siempre llega a la estación de origen a las 15.00 horas.


El autobús no sale hasta que esté completo.
Todos los viajeros se encuentran en la parada antes de la llegada del autobús.
El autobús solo tiene una puerta de subida.
Cada viajero tarda en subir un tiempo aleatorio entre 20 sg. y 2 minutos.
El tiempo que emplea el autobús en recorrer el trayecto entre el origen y el destino es aleatorio
entre 2 horas 24 minutos y 3 horas.

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.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 33


14.2 Programación modular

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:

Cada viajero sube al autobús en orden de llegada a la parada.


El número de viajeros que llegan tarde es aleatorio.
El retraso de cada uno de ellos es aleatorio entre 1 sg. y 30 minutos.
Hay que tener en cuenta que los viajeros con retraso pueden subir directamente o, en caso con-
trario, deben esperar su turno.

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:

a) Utiliza la función n=numeroviajero para determinar la cantidad de viajeros impuntuales.


b) Construir una función t=tiemporetrasos(n) que devuelva un vector t de n componentes con los
tiempos de retraso de los viajeros impuntuales (n). Para ello modifica adecuadamente la función
t=bajadaviajero.
c) Para contabilizar el tiempo de subida de los viajeros impuntuales hay comparar su retraso con el
tiempo que tardan en subir los viajeros anteriores. Es conveniente (necesario) ordenar el vector
de tiempos de retraso.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 34


Hora 15

Escritura con formato en fichero

15.1. Escritura con formato en fichero


nombre=fopen(’nombre-fichero’,permisos)
−→ Abre el fichero en el que vamos a guardar los datos.

• nombre Es el identificador que MATLAB utilizará posteriormente para reconocer el fichero.


• nombre-fichero Es el nombre que tiene el fichero en nuestro directorio.
• permisos Es un cadena de caracteres que indica la operación que se va a realizar con el fichero:
’r’ −→ Lectura.
’w’ −→ Escritura (se crea si es necesario).
’a’ −→ Añadir a un fichero ya existente (se crea si es necesario).
’r+’ −→ Lectura y escritura.
’w+’ −→ Trunca el fichero o lo crea para lectura o escritura.
’a+’ −→ Lectura y añadir a un fichero ya existente (se crea si es necesario).

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.

nombre=fopen(’parabola.dat’,’w’) % Abre el fichero llamado parabola.dat para escribir


% en el (w)

x=[t;y]; % Crea la matriz de datos que vamos a escribir en

35
15 Escritura con formato en fichero

% el fichero.

fprintf(nombre,’%1.1f % 2.6e’,x) % Escribe en el fichero los datos con el


% siguiente formato:
% La primera columna [un entero].[un decimal]
% La segunda [dos enteros].[6 decimales en
% modo exponencial].
fclose(nombre) % Manda los datos al fichero nombre.

15.2. Ejercicios

1. Ejecuta el comando fid=fopen(’noexiste.txt’,’r’) y explica el resultado que obtienes.

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.

3. Escribe el número π con 25 cifras decimales en el fichero de texto pi.txt.

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.

9. Crea una función con las siguientes caracterı́sticas:

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.

10. Crea una función que:

a) Pida un número n para ser introducido a través del teclado.


b) Genere n valores con la función rand y calcule su media.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 36


15 Escritura con formato en fichero

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:

a) Debe pedir el número de registros que se van a introducir.


b) Almacena el nombre, el primer apellido y el salario para cada trabajador.
c) Escribe los datos recogidos ordenados en orden creciente respecto al salario que reciben en el
fichero salida.txt, con formato ascii.
d) Además, los últimos dos renglones del archivo salida.txt deben contener la siguiente informa-
ción:
1) El menor salario es ???????.
2) El mayor salario es ???????.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 37


Hora 16

Lectura de fichero con formato

16.1. Lectura de fichero con formato


fscanf(nombre,format,tamaño)
−→ Lee el valor de una variable en un fichero que ha sido abierto
con fopen y que tiene por identificador nombre.

• nombre es el identificador del fichero.


• format puede ser %d, %f, %e, %c, %s, etc.
• tama~
no es un argumento optativo que permite limitar el número de datos leidos. El valor que
puede tomar este argumento es uno de los siguientes:
N −→ Lee un vector de hasta N componentes.
inf −→ Lee datos hasta el final del fichero.
[N,M] −→ Lee una matriz de tamaño N x M por columnas (M puede se inf).

Ej.:
nombre=fopen(’parabola.dat’,’r’) % Abre el fichero llamado parabola.dat
% para leer de el (r)

z=fscanf(nombre,11) % Lee del fichero parabola.dat los datos con el


% siguiente formato:
% La primera columna real
% La segunda modo exponencial
% Hasta 11 datos.

fclose(nombre) % Cierra el fichero identificado mediante nombre

16.2. Ejercicios

1. Realiza las siguientes operaciones:

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

d) Carga el fichero datos.txt y comprueba cuáles son sus variables.

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.

6. Lee el fichero nombre.txt y guarda sus registros en la variable nombre.

7. Lee el fichero apellido.txt y guarda sus registros en la variable apellido.

8. Lee el fichero edad.txt y guarda sus registros en la variable edad.

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:

Andrés Pérez ∗ ∗ ∗ 46 ∗ ∗ ∗ ADULTO

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 39


Hora 17

Librerı́as generales

17.1. Librerı́as asociadas con la utilización de matrices y funciones

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

A=[-5 6 2 1 4 6 1];ismember([-5 6 -2],A),ismember(4,A)


ans =
1 1 0
ans =
1

ELMAT: manipulación de matrices.


size(A)
−→ Tamaño de la matriz A. Ej.:
A=[1 2; 3 4;5 6];A,size(A)
A =
1 2
3 4
5 6
ans =
3 2

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.:

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 41


17 Librerı́as generales

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]

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 42


17 Librerı́as generales

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

ELFUN: funciones matemáticas elementales.


fix(x)
−→ Redondea las componentes de x hacia cero. Ej.:
fix([-3.8,3.8])
ans =
-3 3

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 43


17 Librerı́as generales

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.:

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 45


17 Librerı́as generales

[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

DATAFUN: análisis de datos.


sort(A)
−→ Ordena las componentes de la matriz A por columnas. Ej.:
sort([12 -3 6 7 1 0 pi])
ans =
-3.0000 0 1.0000 3.1416 6.0000 7.0000 12.0000
magic(3),sort(magic(3))
ans =
8 1 6
3 5 7
4 9 2
ans =
3 1 2
4 5 6
8 9 7

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

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 46


17 Librerı́as generales

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.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 47


Hora 18

Primeros gráficos bidimensionales

18.1. Comando plot

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

1. Dibuja la función sin(1/x) entre -1 y 1.

2. Crea una función que:

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).

3. Representa el recinto del plano R2 x ≥ 0, y ≥ 0, (x − 1)3 + y ≤ 0 y su imagen por la función f = (f1 , f2 )


donde f1 (x, y) = −3x − 2y + 3 y f2 (x, y) = −x − 3y + 1.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 49


Hora 19

Dibujo de funciones

19.1. Comando fplot

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

Dibuja las siguientes funciones en los dominios especificados:

2
1. f (x) = xe−x en [−2, 2].

2. f (x) = x2 − 1 en [−3, 3, −1, 3].

3. f (x) = x2 sin( x1 ) en [−2, 2].

4. f (x) = x2 sin( x1 ) en [−0,1, 0,1].

50
Hora 20

Modificadores de los gráficos


bidimensionales

20.1. Opciones de los comandos plot y fplot

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.

Marcadores Lı́neas Colores


. punto - sólida y amarillo
* estrella -- discontı́nua g verde
x cruz -. punto-raya m magenta
o cı́rculo : punteada b azul
+ más c cyan
s cuadrado w blanco
d rombo r rojo
p pentágono k negro
h hexágono
v triángulo abajo
< triángulo izquierda
> triángulo derecha
^ triángulo arriba

1
Ver tabla

51
20.2 Modificadores de los gráficos bidimensionales

Ej.:

n=50; % Asignamos valores a las variables


a=0;
b=3;
x=linspace(a,b,n); % Construimos el vector x
e1=exp(-x.^2); % y los vectores de abcisas
e2=(x.^2).*exp(-x.^2);
e3=x.*exp(-x.^2);
e4=exp(-x);
plot(x,e1,’+-g’,x,e2,’*:k’,x,e3,’o-.y’,x,e4,’x’); % Dibujamos las graficas

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)

Dibuja los vectores anteriores en un mismo gráfico diferenciándolos entre sı́.

3. Considera el vector v=-10:-1. Dibujas las potencias v 1 , v 2 y v 3 diferenciándolas entre sı́.


√ √
4. Considera el vector v=1:10. Dibujas las potencias v 1 , v y 3 v diferenciándolas entre sı́.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 52


Hora 21

Control de gráficos bidimensionales

21.1. Control de gráficos bidimensionales

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:

’auto’ Vuelve a la escala automática.

’equal’ Da la misma escala en ambos ejes.

’ij’ Intercambia la parte positiva y negativa del eje y.

’xy’ Deshace el anterior.

’image’ Igual que equal pero se ajusta al dibujo.

’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.

’off’ No se muestran los ejes.

’on’ Deshace el comando anterior.

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

t=0:0.2:2*pi+0.2; [ENTER] % Parametro para el angulo


x=sin(t); [ENTER]
y=cos(t); [ENTER]
subplot(3,1,1); [ENTER]
plot(x,y,’-’); [ENTER]
subplot(3,1,2); [ENTER]
plot(x,y,’-’); [ENTER]
axis square; [ENTER]
subplot(3,1,3); [ENTER]
plot(x,y,’-’); [ENTER]
axis normal; [ENTER]
grid; [ENTER]
axis([-2 2 -3 3]); [ENTER]

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,’);

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 54


21 Control de gráficos bidimensionales

disp(’Para parar presiona el boton dcho’);

[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.

2. Ejecuta la siguiente función:

function y=particle(n)
% Camino aleatorio. Una particula empieza en el origen, y se mueve
% aleatoriamente hacia otra direccion en cada paso.

x=cumsum(rand(n,1)-0.5); % Valores aleatorios de x


y=cumsum(rand(n,1)-0.5); % Valores aleatorios de y

clf;

plot(x,y);
hold on;

plot(x(1),y(1),’o’,x(n),y(n),’o’);

axs=axis;
scale=axs(2)-axs(1);

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 55


21 Control de gráficos bidimensionales

text(x(1)+scale/30,y(1),’Inicio’);

hold off;

xlabel(’x’);

Completa el gráfico resultante con las siguientes operaciones:

a) Añade el tı́tulo “Camino aleatorio”.


b) Escribe bajo el eje y: “Eje de ordenadas”.
c) Identifica el último punto dibujado con la etiqueta “FIN”.
d ) Obtén las coordenadas de los puntos correspondientes al máximo y al mı́nimo de la gráfica. Para
ello actúa de las siguientes dos formas:
1) Incorpora al gráfico una red que te permita aproximar adecuadamente dichas coordenadas.
2) Utiliza el comando ginput.
e) Sustituye x=cumsum(rand(n,1)-0.5) por x=rand(n,1)-0.5 e y=cumsum(rand(n,1)-0.5) por
y=rand(n,1)-0.5. Observa los resultados obtenidos.
f ) Acude a la ayuda de MATLAB y justifica tu anterior respuesta.

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)}.

4. Modifica el gráfico obtenido en el ejercicio 2 de la hora 20 “Modificadores de los gráficos bidimensio-


nales” incluyendo:

a) El tı́tulo ”Rendimiento anual de la granja


b) En el eje de abcisas el nombre de cada mes al que hacen referencia los datos.
c) Una leyenda que indique el tipo de animal al que corresponde cada poligonal.

5. Modifica el gráfico obtenido en el ejercicios 3 de la hora 20 “Modificadores de los gráficos bidimensio-


nales” para que incluya:

a) El tı́tulo “Potencias sucesivas”


b) Una leyenda que indique el valor del exponente utizado en cada una de las potencias representadas.

6. Modifica el gráfico obtenido en el ejercicios 4 de la hora 20 “Modificadores de los gráficos bidimesio-


nales” para que incluya:

a) El tı́tulo “Potencias sucesivas”


b) Una leyenda que indique el valor del exponente utizado en cada una de las potencias representadas.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 56


Hora 22

Control de la ventana gráfica


bidimensional

22.1. Control de la ventana gráfica bidimensional

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.

2. Realiza el ejercicio 3 de la hora 20 Modificadores de los gráficos bidimensionales empleando el comando


hold.

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.

5. Ejecuta el siguiente programa y observa los resultados.

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)

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 58


Hora 23

Gráficos con números complejos y en


escalas logarı́tmicas

23.1. Gráficos con números complejos

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]

23.2. Gráficos en escalas logarı́tmicas

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

1. Dibuja las siguientes funciones en coordenadas polares y en coordenadas cartesianas.


θ 5
a) r = ecos θ − 2 cos(4θ) + sen( 12 ).
b) r = 4θ.
c) r = 2(1 + cos θ).
d ) r = cosθ, r = cos(2θ), r = cos(3θ) y r = cos(4θ) en una misma gráfica.
e) r = 2(1 + cos(2θ)) y r = 2(1 + cos(3θ)) en una misma ventana y en gráficas distintas.
π
2. Dibuja el sector circular limitado por las circunferencias x2 + y 2 = 9 y r = 5 y los ángulos θ = 4 y
θ = 3π
7 usando números complejos.

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.

4. El fichero poblacion.txt describe el número de habitantes empadronados en ciertos municipios de


Castilla y Leon.

Utiliza un histograma (función hist) para representar los datos almacenados en la variable
habitantes.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 60


23 Gráficos con números complejos y en escalas logarı́tmicas

Transforma la variable habitantes mediante la función log y guarda el resultado en la variable


loghabitantes.
Representa los datos almacenados en la variable loghabitantes con un histograma. Emplea una
cuadrı́cula (grid) que facilite la visualización de las coordenadas en el gráfico.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 61


Hora 24

Librerı́as con funciones y gráficos


estadı́sticos

24.1. Entrada de datos tabulados

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

24.2. Descripción y exploración gráfica de datos

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

24.3. Descripción analı́tica de datos

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

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 63


24 Librerı́as con funciones y gráficos estadı́sticos

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

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 64


24 Librerı́as con funciones y gráficos estadı́sticos

nansum(A), nanmean(A), nanmedian(A), nanstd(A)


−→ Calculan, respectivamente, la suma, la media ar-
itmética, la mediana y la (cuasi) desviación estándar 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 2
4 5
1 1
8 5
10 9
nansum(r),nanmean(r),nanmedian(r),nanstd(r)
ans =
32 22
ans =
6.4000 4.4000
ans =
8 5
ans =
3.7815 3.1305

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

24.4. Distribuciones de probabilidad

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.:

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 65


24 Librerı́as con funciones y gráficos estadı́sticos

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

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 66


24 Librerı́as con funciones y gráficos estadı́sticos

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.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 67


Hora 25

Primeros gráficos tridimensionales

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.

2. Modifica convenientemente el ejercicio 2 de la hora 21 para construir un camino aleatorio en tres


dimensiones.

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

26.1. 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

1. Dibuja la superficie definida por las siguientes funciones:

f (x, y) = sin(x) sin(y), (x, y) ∈ [0, π] × [0, π].


f (x, y) = x − 0,5x3 + 0,2y 2 + 1, (x, y) ∈ [−3, 3] × [−3, 3].

sin( x2 +y 2 )
f (x, y) = x2 +y 2
, (x, y) ∈ [−8, 8] × [−8, 8].

2. Dibuja una superficie semejante a una chimenea de una central térmica (hiperboloide hiperbólico).

3. Dibujar dos circunferencias intersecadas.

4. Dibujar los cinco aros olı́mpicos.

5. Repite el ejercicio 3 de la hora 25 guiándote con las siguientes indicaciones:

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.

¿Qué diferencias observas respecto al dibujo realizado con el comando plot3?

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 70


Hora 27

Control de la ventana y de los gráficos


tridimensionales

27.1. Control de gráficos tridimensionales

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.

27.2. Control de la ventana gráfica tridimensional

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

1. Añade las siguientes caracterı́sticas al camino aleatorio tridimensional construido en el ejercicio 2 de


la hora 25:

Tı́tulo: “Camino aleatorio en el espacio”.


Los ejes están etiquetados por la expresiones “eje x”, “eje y” y “eje z”.
Los puntos inicial y final del camino están señalados con las etiquetas “comienzo” y “final”
respectivamente.

Utiliza el comando gtext para aproximar las coordenadas del punto más alto.

2. Dibuja, en el plano, la circunferencia x2 +y 2 = 1. Posteriormente añade el comando view([1,0.6,0.35]).


¿Qué observas?

3. Añade las siguientes caracterı́sticas a la representación realizada en el ejercicio 3 de la hora 25:

a) Etiqueta los ejes con “años”, “meses” y “acertantes” según corresponda.


b) Titula la representación mediante “Comando plot3”.

4. Añade las siguientes caracterı́sticas a la representación realizada en el ejercicio 5 de la hora 26:

a) Etiqueta los ejes con “años”, “meses” y “acertantes” según corresponda.


b) Titula las representaciones mediante “Comando mesh” y “Comando surf” según corresponda.

5. Realiza las siguientes operaciones:

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.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 72


Hora 28

Dibujo de poliédros y de lı́neas de


contorno

28.1. Dibujo de poliédros

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.

28.2. Dibujo de lı́neas de contorno

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

1. Sea la superficie definida mediante la ecuación z = x2 /4 − y 2 /9. Se pide:

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.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 74


Hora 29

Librerı́as relacionadas con gráficos


bidimensionales y tridimensionales

SPECGRAPH: gráficos especiales.


area(X)
−→ Dibuja las sumas acumuladas de las distintas columnas que forman la matriz X y
colorea las áreas situadas entre las gráficas representadas. Ej.:
X=[1,2,3;4,5,6;7,8,9]
X =
1 2 3
4 5 6
7 8 9
area(X),grid

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.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 76


Hora 30

Copia de la ventana gráfica y encuesta


final

30.1. Copia de la ventana gráfica

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;

print -djpeg nombre


−→ Envı́a el contenido de la ventana gráfica activa a un archivo con formato jpg
llamado nombre.
print -dbitmap nombre
−→ Envı́a el contenido de la ventana gráfica activa a un archivo con formato bmp
llamado nombre.
orient cadena
−→ Establece la orientación que utiliza MATLAB antes de imprimir con el comando print.
Si cadena es landscape se imprime en apaisado. Si es portrait se imprime en vertical. Si es tall se imprime
en vertical y a una escala que llena el papel. Si no se especifica devuelve la orientación actual en una cadena.

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

Estructura de selección case

31.1. Estructura de selección case

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)

2. Definir una función fac.m que devuelva lo siguiente:

1 si n = 0
1 is n = 1
n! si n ≥ 2
un mensaje de error si n < 0 o no es entero.

(Recomendación: combinar la estructura case con la la estructura if )

3. Para encontrar los términos de las soluciones de las recurrencias

(1) yn+3 − 5yn+2 + 3yn+1 − yn = n, n ≥ 0,


2
(2) 5yn+3 + (yn+1 ) − log(yn ) = sin(n), n ≥ 0,
(3) nyn yn+3 + yn+2 yn+1 = 1, n ≥ 0,

con y0 = 1, y1 = 2 e y2 = 3 se propone desarrollar una base de recurrencias, similar a lo que se ha


hecho en el primer ejercicio, y una función llamada recurrencia.m que nos permita calcular el término
n−ésimo de la recurrencia seleccionada (podemos suponer que el usuario da valores enteros y positivos
al argumento de la función).

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 79


Hora 32

Debugger

32.1. Opciones del debugger de MATLAB

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

Step by step Out−→ Shift + F7 .


Stop if error −→ Interrumpe el programa si encuentra un error (desde las opciones de menú).
Stop if warning−→ Interrumpe el programa si encuentra un mensaje de atención (desde las opciones de
menú).
Stop if NaN or Inf −→ Interrumpe el programa si aparece una indeterminación matemática o un infinito
(desde las opciones de menú).
Step by step Out−→ Interrumpe el programa en cualquiera de los casos anteriores (desde las opciones de
menú).

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;

while K < 10000


J=J+1;
U(J)=factorial(N);
for M=1:1:U(J)
U(J)=U(J)+prg2(M)+M;
X=prg3(U(J));
end;
end;

prg1=U+X % Salida de datos

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;

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 81


32 Debugger

prg2=X/2 % Salida de datos

function prg3=prg3(X)

for J=X:1:-3
prg3=X/J;
end;

X % Salida de datos

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 82


Hora 33

Creación de librerı́as

33.1. Programación modular

Function 1 Function 2 Function 3 ··· Function N

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.

El algoritmo que se pretende implementar no es nesariamente óptimo, tampoco es lo que se pretende


en este ejercicio.

Para ello vamos estructurar la programación de la función pedida como sigue

Función distribuciones.m Función matval.m

Pr. principal: pr.m

donde cada función se describe a continuación:

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.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 84


Hora 34

Estadı́stica Descriptiva

34.1. Lectura y escritura en formato tabular

[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:

1. La primera fila almacena los nombres de las variables.

2. La primera columna contiene los nombres o ı́ndices de los individuos o casos considerados.

3. Los campos se separan mediante un carácter delimitador de los mismos.

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

34.2. Tabulación de datos

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.

34.3. Medidas de localización

v=mean(X) → Media aritmética.

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:

1. Se calculan sobre cada una de las columnas de X.

2. Admiten como argumento un vector.

34.4. Medidas de orden

[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.

X=min(X1,X2) → Compara las matrices X1 y X2 elemento a elemento y devuelve el mı́nimo encontrado


en cada comparación.

[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.

X=max(X1,X2) → Compara las matrices X1 y X2 elemento a elemento y devuelve el máximo encontrado


en cada comparación.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 86


34 Estadı́stica Descriptiva

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].

34.5. Medidas de dispersión

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=std(X,1) → Vector fila con la desviación estándar muestral de las columnas de X.

v=range(X)
→ Recorrido.
v=iqr(X)
→ Rango intercuartı́lico
v=mad(X)
→ Desviación absoluta media

34.6. Otras funciones

[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.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 87


34 Estadı́stica Descriptiva

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.

34.7. Representaciones gráficas

pie(x,sep,etiq) → Representa el diagrama de sectores de los datos almacenados en x. El argumento sep


es un vector de ceros y unos. Si sep(i)=0 entonces el sector correspondiente a la frecuencia x(i) tiene el
vértice en el centro. Si sep(i)=1 entonces el sector correspondiente a la frecuencia x(i) tiene el vértice
separado ligeramente del centro. La variable etiq es un argumento opcional que contiene las etiquetas de
las categorı́as representadas.

pie3((x,sep,etiq)) → Diagrama de sectores tridimensional. Sus argumentos son análogos a los anteriores.

stem(...) → Representa un diagrama de barras. Concretamente:

stem(X): Representa un diagrama de barras para cada una de las filas de X.

stem(X,Y): Representa los pares (X(i,j),Y(i,j)) mediante un diagrama de barras.

stem(...,’relleno’): El argumento opcional ’relleno’ especifica el color utilizado.

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).

2. bar(X): Representa un grupo de size(X,2) rectángulos para cada fila de X.

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.

Las funciones anteriores admiten tres argumentos opcionales: bar(...,anchura,’estilo’,aspecto). an-


chura establece la separación de los rectángulos dentro de cada grupo. Con anchura=1 se elimina dicha
separación. El valor por defecto es 0.8. ’estilo’ determina el modo en el que se dibujan los rectángulos
dentro de los grupos y sus valores pueden ser ’stack’ (para representaciones apiladas) y ’group’ (para

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 88


34 Estadı́stica Descriptiva

representaciones sin apilar). Finalmente, aspecto incide sobre los colores, el estilo y la anchura de lı́nea
utilizados, etc.

bar3(...),bar3h(...) → Diagrama de rectángulos tridimensional. Sus argumentos y el resultado que pro-


ducen son análogos a los anteriores. ’estilo’ admite el argumento adicional ’detached’ para producir la
representación espacial habitual.

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.

hist(...) → Histograma. Sus argumentos y el resultado que producen es:

hist(v): Dibuja el histograma resultante de un agrupamiento en 10 clases iguales que se extienden


entre los valores mı́nimo y máximo de v.

hist(v,x): Dibuja el histograma resultante de un agrupamiento en length(x) clases centradas en los


elementos de x.

hist(v,n): Dibuja el histograma resultante de un agrupamiento en n clases iguales que se extienden


entre los valores mı́nimo y máximo de v.

[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.

[v2,ind]=histc(v1,limites) → Realiza el agrupamiento determinado por la partición [limites(k),li-


mites(k+1)) (la última clase es termina en limites(end)). v2 contiene la frecuencia de cada clase e ind los
indices que localizan la clase a la que pertenece cada elemento de v1. El histograma se representa mediante
bar(v1,n,’histc’).
stairs(X) → Dibuja un gráfico “en escalera” para cada una de las columnas de X.

stairs(X1,X2) → Se diferencia del anterior en que la matriz X2 explicita las abcisas.

scatter(x,y,s,c,’filled’) → Representa la nube determinada por los puntos de coordenadas (x(i),y(i)). s


y c son argumentos opcionales que indican el tamaño y el color de los puntos representados. ’filled’ se
utiliza para rellenar dichos puntos.

scatter3(x,y,z,s,c,’filled’) → Scatterplot tridimensional. Sus argumentos y el resultado que producen son


análogos a los anteriores.

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:

X: matriz de datos. Se representa un diagrama de caja para cada columna de X.

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’=’+’.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 89


34 Estadı́stica Descriptiva

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.

errorbar(X,Y,L,U,simbol) → Representa los puntos (X(i,j),Y(i,j)) y prolongaciones verticales deter-


minadas por los puntos (X(i,j),X(i,j)-L(i,j)) y (X(i,j),X(i,j)+U(i,j)). simbol es una cadena que
controla el tipo de lı́nea, el sı́mbolo y el color de las barras de error dibujadas. Los argumentos X, U y simbol
se pueden suprimir.

34.8. Ejercicios

1. Importar el fichero de datos Demog.tex.

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

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 90


34 Estadı́stica Descriptiva

Representa estos datos en un diagrama de barras. Añade tı́tulo y una leyenda con el nombre de las
categorı́as representadas.

5. Representa los siguientes datos en un histograma:

12, 14, 7, 8, 11, 1, 6, 8, 7, 3, 7, 7, 13, 4, 13, 11, 13, 11, 5, −3000

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.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 91


Hora 35

Modelos de Probabilidad

35.1. Modelos de probabilidad implementados en MATLAB

MATLAB tiene implementadas las siguientes distribuciones de probabilidad (entre paréntesis se muestra
una sintaxis equivalente o abreviada):

Beta (beta) Binomial (bino)

Chisquare (chi2) Exponential (exp)

F (f) Gamma (gam)

Geometric (geo) Hipergeometric (hyge)

Lognormal (logn) Negative Binomial (nbin)

Noncentral F (ncf) Noncentral t (nct)

Noncentral Chi-square (ncx2) Normal (norm)

Poisson (poiss) Rayleigh (rayl)

T (t) Uniform (unif)

Discrete Uniform (unid) Weibull (weib)

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.

35.2. Función de Densidad/Probabilidad

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).

35.3. Función de Distribución

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.

35.4. Inversa de la Función de Distribución (percentiles)

Y = icdf(’nombre’,X,A1,A2,A3)
→ Calcula los percentiles del modelo ’nombre’ siguiendo las pautas
descritas inicialmente.

35.5. Números aleatorios

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.

35.6. Media y varianza


Las funciones que calculan la media y la varianza de los modelos de probabilidad descritos inicialmente
se construyen añadiendo la cadena stat al nombre abreviado del modelo (salvo poiss, que pierde una s):

[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)

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 93


35 Modelos de Probabilidad

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.

3. Representar gráficamente la función de densidad de una distribución de Weibull de parámetros A=1


y B=2.

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

5. Ejecuta las siguientes demos: disttool.m y randtool.m.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 94


Hora 36

Estimación de Parámetros y Contraste de


Hipótesis

[sol,pvalor,IC] = ztest(muestra,µ0 ,σ,α,tipo)


→ Test sobre la media µ de una población N(µ, σ) con σ
conocido. Los argumentos de esta función son:

1. muestra: vector de datos.

2. µ0 : hipótesis nula.

3. σ: desviación estándar de la población considerada.

4. α: nivel del test.

5. tipo: indica si la hipótesis alternativa es µ < µ0 (tipo=-1), µ > µ0 (tipo=1) y µ 6= µ0 (tipo=0).

α y tipo son opcionales. Por defecto se utiliza α = 0,05 y tipo=0.


Los argumentos de salida son:

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. pvalor: p-valor del test.

3. IC: Intervalo de confianza para µ de nivel 1 − α.

[sol,pvalor] = ttest(muestra,µ0 ,α,tipo)


→ Test sobre la media µ de una población N(µ, σ) con σ de-
sconocido. Los argumentos de esta función son:

1. muestra: vector de datos.

2. µ0 : hipótesis nula.

3. α: nivel del test.

4. tipo: indica si la hipótesis alternativa es µ < µ0 (tipo=-1), µ > µ0 (tipo=1) y µ 6= µ0 (tipo=0).

95
36 Estimación de parámetros y Contraste de Hipótesis

µ0 , α y tipo son opcionales. Por defecto se utiliza µ0 = 0, α = 0,05 y tipo=0.


Los argumentos de salida son:

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. pvalor: p-valor del test.

[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. muestra1: vector de datos extraidos de la población N(µ1 , σ1 ).

2. muestra2: vector de datos extraidos de la población N(µ2 , σ2 ).

3. α: nivel del test.

4. tipo: indica si la hipótesis alternativa es µ1 < µ2 (tipo=-1), y µ1 6= µ2 (tipo=0) y µ1 > µ2 (tipo=1).

α y tipo son opcionales. Por defecto se utiliza α = 0,05 y tipo=0.


Las variables de salida 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).

2. pvalor: p-valor del test.

3. IC: Intervalo de confianza para µ1 − µ2 de nivel 1 − α.

[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. muestra1: vector de datos extraidos de la población 1.

2. muestra2: vector de datos extraidos de la población 2 o constante.

3. α: nivel del test.

Los argumentos de salida 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.

2. pvalor: p-valor del test.

[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:

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 96


36 Estimación de parámetros y Contraste de Hipótesis

1. muestra1: vector de datos extraidos de la población 1.

2. muestra2: vector de datos extraidos de la población 2.

3. α: nivel del test.

Los argumentos de salida 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).

2. pvalor: p-valor del test.

[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. muestra1: vector de datos extraidos de la población 1.

2. muestra2: vector de datos extraidos de la población 2.

3. α: nivel del test.

Los argumentos de salida 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).

2. pvalor: p-valor del test.

36.1. Ejercicios

1. Programa una función que calcule el intervalo de confianza para una proporción.

2. Programa una función que implemente el F-test de una muestra.

3. Obtén 20 intervalos de confianza para la media de una población normal de niveles

α = 0,01 , 0,02 , . . . , 0,19 , 0,20

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.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 97


Hora 37

Modelos de Regresión y Análisis de la


Varianza

37.1. Modelos de regresión

[β̂,β̂int,ε̂,ε̂int,stats] =regress(y,X,α)
→ Regresión lineal múltiple. regress resuelve el modelo lineal
y = Xβ + ε donde:

y es un vector columna n × 1 de observaciones.

X es una matriz n × p de regresores.

β es un vector columna p × 1 de parámetros.

ε es un vector columna n × 1 de perturbaciones aleatorias. Se asume que ε ∼ N(0, σIn ).

La función calcula las variables β̂, β̂int, ε̂, ε̂int y stats.

β̂: estimación de los parámetros del modelo.

β̂int: intervalo de confianza de nivel (1 − α)100 % para los parámetros contenidos en β.

ε̂: residuales de la regresión.

ε̂int: intervalo de confianza de nivel (1 − α)100 % para los residuales de la regresión.

stats: contiene los estádisticos R2 , F y el p-valor de la regresión.

El argumento α es opcional. Por defecto se considera α = 0,05.


regstats(y,X,’modelo’)
→ GUI para la validación y diagnóstico del modelo lineal ajustado. El argumen-
to ’modelo’ es opcional. Por defecto se considera el modelo lineal con término constante. Otras opciones
son:

’interaction’: incluye el término constante, los trminos lineales y los productos cruzados.

’quadratic’: incluye las interacciones y los términos cuadráticos.

98
37 Análisis de la Varianza y Modelos de Regresión

’purequadratic’: incluye el término constante y los trminos lineales y cuadráticos.

regstats proporciona la siguiente información:

Matrices Q y R de la descomposición X=QR.

Coeficientes de la regression β̂.

Covarianzas entre los coeficientes de regresión β̂.

Valores ajustados de la respuesta ŷ.

Residuales ε̂.

Error cudrático medio.

Leverages.

Matriz ”Hat”.

Residuales estandarizados y “estudentizados”.

Distancia de Cook.

El error cuadrático medio cuando se elimina una observación

Los coeficientes de la regresión cuando se elimina una observación.

DFBETAS, DFFIT, DFFIT escalados mediante el error estándar y DFCOV.

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.

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 99


37 Análisis de la Varianza y Modelos de Regresión

37.2. Análisis de la varianza

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:

Color de la lámina Insectos capturados


Azul 16 11 20 21 14 7
Verde 37 32 20 29 37 32
Blanco 21 12 14 17 13 20
Amarillo 45 59 48 46 38 47

¿Qué colores atraen más a los insectos?

Departamento de Matemática Aplicada a la Técnica. Universidad de Valladolid. 100


Hora 38

Encuesta final

101

También podría gustarte