You are on page 1of 9

Práctica 1.

Introducción al matlab
Estadı́stica – Facultad de Fı́sica

Objetivos

• Puesta en marcha de matlab

• Entrada y salida de datos

• Manejo de matrices

• Representaciones gráficas sencillas

1 matlab
matlab es al mismo tiempo un lenguaje y un entorno de programación técnica que per-
mite cálculos numéricos de alto nivel y su visualización. Integra análisis numérico, cálculo
matricial, proceso de señal y gráficos en un entorno sencillo.
matlab incorpora aplicaciones especı́ficas llamadas toolboxes. Estos son colecciones
especializadas de funciones y programas especiales de matlab (ficheros-M porque su nombre
tiene extensión .M) para trabajar en clases particulares de problemas. Uno de ellos está
dedicado a la estadı́stica.
Este entorno permite una fácil extensión ya que el usuario puede escribir sus propias apli-
caciones. La programación es más sencilla que los lenguajes tradicionales como Fortran o C.
Las aplicaciones se guardan en ficheros-M que pueden ser empleados en cualquier momento.

2 Inicio
matlab corre desde windows en los ordenadores PC compatibles del aula de informática.
Para ponerlo en marcha se selecciona el icono en el administrador de programas. Se abre
entonces una ventana llamada Ventana de Comandos (Command Window) desde la que se
teclean los comandos. Tambien puede abrirse otra Ventana de Ayuda (matlab Help) en
la que el acceso a las ayudas es el estándar de windows. Otra forma de obtener ayuda es
utilizando el comando Help desde dentro de la ventana de comandos. Por último podemos
encontrar un comando cuyo nombre no recordamos o buscar si existe información relativa a
un tema con el comando lookfor seguido de una palabra clave (por ejemplo lookfor mode).
Este comando busca una cadena de caracteres en la primera linea de comentario del texto
de ayuda de todos los ficheros-M. Lo más importante es que la palabra clave no necesita ser
una orden de matlab .
3 MATRICES 2

La ventana de comandos funciona con un editor de tal manera que si un comando ha


sido mal escrito puede recuperarse y modificarse con las teclas de flecha. Este editor es muy
útil y se aprende su uso enseguida; es similar a un shell.
Desde esta ventana se pueden iniciar otros procesos de windows o DOS utilizando el
signo !. Ası́ !dir creará una ventana donde se listará un directorio. Cuando cerremos esta
ventana, tendremos de nuevo control en la Ventana de Comandos. Si al final del comando
se teclea un signo & entonces se abre una nueva ventana pero se sigue teniendo control en la
Ventana de Comandos. Por ejemplo !notepad & abre una ventana con un editor notepad
en un proceso independiente (background).
A partir de ahora se sombrearán las expresiones que deban ser tecleadas en la pantalla.
Con el sı́mbolo ←֓ se indica la tecla de retorno o intro que debe pulsarse al final del comando.
No sombreados aparecerán los resultados proporcionados por matlab .
Se recomienda la consulta de ’matlab edición del estudiante’ que se encuentra disponible
en la biblioteca de la Facultad de CC. Fı́sicas (F681.3.06MATLAB), si se desea profundizar
en el estudio de matlab .

3 Matrices
Se pueden generar matrices de cuatro formas diferentes:

• Tecleando la lista de elementos


Por ejemplo
A = [1 2 3; 4 5 6 ; 9 8 7] ←֓

A =
1 2 3
4 5 6
9 8 7

y esta matriz es reservada por matlab para su uso posterior. Otra manera de crear
esta matriz serı́a,

≫ A =[1 2 3 ←֓
4 5 6 ←֓
9 8 7] ←֓

• Por medio de un fichero M


Si en un fichero de extensión .M tenemos escrito

A =[ 1 2 3
4 5 6
9 8 7 ]

podemos introducir en memoria esta matriz A simplemente ejecutando el fichero. Si


al editarlo le hemos llamado matriza.m entonces simplemente teclearemos
≫ matriza ←֓
y entonces el programa lee el fichero y genera la matriz. Prueba a editar tu propio
fichero y a cargarlo en memoria.
3 MATRICES 3

• Generándola con las funciones de matlab


Los elementos de una matriz pueden ser cualquier expresión de matlab ; por ejemplo
≫ x = [-1.3 sqrt(3) (1+2+3)*4/5] ←֓
genera la matriz
x =
-1.3000 1.7321 4.8000

• Leyéndola de un fichero de datos


Esta forma nos será muy útil ya que podremos cargar un gran volumen de datos que
tengamos en un fichero ASCII normal. Existen formas más o menos complicadas para
leer la información de ficheros escritos con diferentes formatos. De momento nosotros
utilizaremos la más sencilla: lectura de datos de un fichero ASCII.
Supongamos que queremos leer un fichero (RETIROT.DAT) que contiene los datos de
temperatura media mensual medida en la estación meteorológica del parque de Retiro.
Estos datos se encuentran en un fichero grabados de la siguiente forma (listado sólo en
parte):

1940 3.8 8.2 11.8 12.8 15.6 19.3 24.0 24.1 19.2 12.0 7.8 3.8
1941 3.4 7.0 9.6 11.1 13.1 20.0 23.2 22.2 20.0 15.0 7.5 4.4
1942 4.8 4.4 10.0 12.2 16.2 20.9 23.8 23.4 18.9 15.0 8.6 5.6
1943 6.2 6.8 9.2 14.2 17.6 23.0 22.2 24.4 18.8 14.0 7.6 5.8
..........................................................................
1955 8.4 6.7 8.3 14.8 18.6 20.4 24.4 23.9 19.3 13.9 8.8 7.7
..........................................................................
1988 7.8 7.6 11.7 12.5 15.5 18.2 24.2 25.3 21.6 15.5 10.3 6.6
1989 6.7 8.7 12.6 11.0 18.4 22.2 26.7 26.0 19.8 16.6 11.9 9.5
1990 6.5 11.0 11.5 11.3 17.8 23.4 26.4 25.8 22.1 14.7 9.3 5.3

Vemos que están tabulados de forma que cada fila proporciona los datos de un año y
que las columnas muestran los datos de cada mes. Ası́, por ejemplo, la columna 4 de
la fila 3 contiene la temperatura media de marzo de 1942 que resulta ser 10o C.
Para formar una matriz con esta tabla de datos sólo debemos leer el fichero con el
comando load. Nuestros ficheros se encuentran en un directorio de trabajo llamado
work y que es un subdirectorio de c:\matlab. Este subdirectorio es donde el comando
load busca por defecto ası́ que el comando para situarnos en él (cd c:\matlab\work)
no es necesario,
≫ load retirot.dat ←֓
Si el fichero se encontrara en la unidad de disco A:, teclearı́amos,
≫ load a:retirot.dat ←֓
La tabla ya está en memoria en la variable retirot, para comprobarlo tecleamos,
≫ whos ←֓

Name Size Elements Bytes Density Complex

a 3 by 3 9 72 Full No
retirot 51 by 13 663 5304 Full No
x 1 by 3 3 24 Full No
4 MANIPULACIÓN DE VECTORES Y MATRICES 4

y podemos ver que en memoria tenemos las variables que generamos antes (a y x) y
retirot que es una matriz de 51 (años) por 13 (columna 1 que da el año + 12 meses).
La temperatura media de marzo de 1942 será entonces el elemento (3,4) de la matriz.
≫ retirot(3,4) ←֓
ans=
10
En el siguiente apartado aprenderemos cómo seleccionar las temperaturas medias de un
mes para un intervalo de años o cómo generar un vector que contenga las temperaturas
medias de un cierto año.

4 Manipulación de vectores y matrices


Los elementos de una matriz pueden ser referenciados con subı́ndices entre paréntesis ( ).
En lo que sigue utilizaremos el signo % para escribir comentarios en este guión junto a los
comandos que se deben utilizar. Continuando el ejemplo anterior,

≫ x ←֓ % para preguntar cuanto vale x


x = % valor de x
-1.3000 1.7321 4.8000
≫ x(2) ←֓ % para preguntar cuanto vale el segundo elemento
x(2) = % respuesta del programa
1.7321 % valor de x(2)
≫ x(5) = abs(x(1)) ←֓ % aumentamos la matriz
x = % nuevo valor de x
-1.3000 1.7321 4.8000 0 1.300

Debe notarse que la dimensión de la matriz ha crecido automáticamente para adaptarse


al nuevo elemento y que x(4) vale cero al estar indefinido. Tambien pueden construirse
matrices más grandes usando como elementos otras matrices menores. Por ejemplo para
añadir una fila a la matriz A del ejemplo anterior,

≫ size(A) ←֓ % Nos da el tamaño de la matriz A


ans=
3 3 % matriz 3×3
≫ r= [6 8 3]; ←֓ % Construimos un vector de tres elementos
% (; calcula la expresion pero no imprime el resultado)
≫ A= [A;r] ←֓ % y lo unimos a la matriz A
A =
1 2 3
4 5 6
9 8 7
6 8 3
≫ size(A) ←֓ % Preguntamos la nueva dimension de A
ans=
4 3 % matriz 4×3
4 MANIPULACIÓN DE VECTORES Y MATRICES 5

Tambien es posible extraer matrices que son parte de matrices (bloques) usando la no-
tación de dos puntos (:), ası́ por ejemplo,

≫ A = A(1:3,:); ←֓

toma las tres primeras filas y todas las columnas de la matriz A actual, con lo cual A vuelve
a ser la matriz que tenı́amos anteriormente. En esta expresión hemos utilizado de nuevo un
signo de punto y coma (;) para que matlab calcule pero no nos imprima en pantalla el
resultado de la operación.
Los vectores se pueden generar de una manera sencilla usando el carácter (:). Por
ejemplo,

≫ x = 1:5 ←֓ % vector fila que contiene los numeros del 1 al 5


x= % con incrementos de la unidad
1 2 3 4 5
% incrementos diferentes de la unidad estan permitidos
≫ y = 0:pi/4:pi ←֓ % valores de 0 a π
y= % con incrementos de π/4
0.0000 0.7854 1.5708 2.3562 3.1416

≫ z = 6:-1:1 ←֓ % Tambien se pueden emplear


z= % incrementos negativos
6 5 4 3 2 1

Es evidente que este método nos sirve para generar tablas. Para que el formato sea tabu-
lar (vectores columna) podemos hallar la transpuesta del vector, utilizando en su definición
el sı́mbolo (’). En los siguientes comandos generaremos un vector columna, calcularemos
una función para esos valores y formaremos una matriz con esos dos vectores

≫ x = (0.0:0.25:3.0)’; ←֓ % x es un vector columna (signo ’ al final)


≫ y= sin(x); ←֓ % vector seno de los valores de x
≫ [x y] ←֓ % matriz con dos columnas x e y

0 0
0.2500 0.2474
0.5000 0.4794
0.7500 0.6816
1.0000 0.8415
1.2500 0.9490
1.5000 0.9975
1.7500 0.9840
2.0000 0.9093
2.2500 0.7781
2.5000 0.5985
2.7500 0.3817
3.0000 0.1411
4 MANIPULACIÓN DE VECTORES Y MATRICES 6

Por lo tanto, utilizando el operador transpuesta se puede cambiar el formato de vector fila a
vector columna y viceversa. Si directamente deseamos generar un vector columna utilizamos
(;) entre sus elementos. Comprueba el resultado del comando ≫ c=[1;2;4] ←֓ .
Otra forma de generar vectores consiste en utilizar las funciones logspace, que crea
vectores formados por elementos espaciados logarı́tmicamente, y linspace que permite es-
pecificar el número de puntos en lugar del incremento.

≫ k = linspace (-pi,pi,4) ←֓
k=
-3.1416 -1.0472 1.0472 3.1416

Como se vió antes los elementos de las matrices pueden referenciarse por medio de los
subı́ndices. Ası́ si tenemos la matriz de antes A.

≫ A ←֓
A =
1 2 3
4 5 6
9 8 7

A(3,3) = A(1,3)+A(3,1) % proporciona


A =
1 2 3
4 5 6
9 8 12

Un subı́ndice puede ser un vector. Para entender ésto veamos cómo se pueden selec-
cionar submatrices a partir de una matriz. Si T es una matriz de 6 × 6, entonces T1 =
T(1:2,2:4); genera una matriz 2 × 3 formada por las filas 1 y 2 y las columnas 2, 3 y 4.
Y para seleccionar una sola columna (por ejemplo la tercera) de esa matriz escribirı́amos T2
= T(1:6,3). Se comprende que ésto nos será muy útil para seleccionar filas y columnas de
una tabla de datos como veremos más adelante. Una construcción que nos será tambien de
utilidad es la siguiente

≫ A = [1 2; 3 4; 5 6] ←֓ % Construimos una matriz A


A =
1 2
3 4
5 6
≫ b = A(:) ←֓ % El vector b contiene los valores de A
b =
1
3
5
2
5 REPRESENTACIONES GRÁFICAS SENCILLAS 7

4
6

es decir que hemos convertido la matriz 2×2 en un vector columna.


Siguiendo el ejemplo de las temperaturas medias que almacenamos en la variable retirot,
seleccionemos los datos que corresponden a la temperatura de enero a lo largo de todo el
intervalo 1940-1990.

≫ t1 = retirot(:,2); ←֓ %vector temperatura de enero (2a columna)


≫ fecha = retirot(:,1); ←֓ % vector fecha (1a columna)

Con el segundo comando hemos almacenado en el vector fecha la serie de años que cubren
nuestros datos. De igual manera podemos almacenar en un vector la variación anual de la
temperatura media para 1955. Como los datos empiezan en 1940, la fila que corresponde a
1955 es la 16. Podemos comprobarlo,

≫ retirot(16,1) ←֓ % Preguntamos la fecha en la linea 16


ans=
1955 % Efectivamente es 1955, luego
≫ t1955 = retirot(16,2:13) ←֓ % contiene los valores de la linea 16

El vector t1955, que contiene los datos requeridos, es el resultado de recortar la matriz entre
las columnas 2 y 13 (meses de enero a diciembre).

5 Representaciones gráficas sencillas


Vamos a utilizar los ejemplos anteriores para aprender a realizar gráficas del tipo y frente a
x. La variación anual de la temperatura media durante el año 1955 está almacenada en el
vector t1955 y la podemos representar con el comando plot,

≫ plot(t1955) ←֓

Abre una ventana de windows para los gráficos y representa el vector t1955 frente a su
ı́ndice. Se puede apreciar que la temperatura media es mayor en los meses de verano, como
esperábamos. Se pueden probar alternativas en otros colores como el verde,

≫ plot(t1955,’g’) ←֓ % en color verde o con simbolos


≫ plot(t1955,’ro’) ←֓ % como un circulo (en rojo)

Para ver qué sı́mbolos y qué colores puedes utilizar busca la ayuda de plot tecleando help
plot o mira la tabla al final de este guión. Tambien podemos representar la variación esta-
cional en otro año (1966 por ejemplo) y comprobar si es parecida,
5 REPRESENTACIONES GRÁFICAS SENCILLAS 8

≫ t1966 = retirot(27,2:13) ←֓ % vector con los datos de 1966


≫ plot(t1966) ←֓ % lo representamos

si queremos ver ambas gráficas a la vez pintamos una y luego la otra pero sin borrar la an-
terior utilizando el comando hold que mantiene la pantalla con los dibujos anteriores hasta
que tecleemos hold off,

≫ plot(t1955) ←֓ % representamos los datos de 1955


≫ hold ←֓ % y en el mismo grafico
≫ plot(t1966) ←֓ % representamos los datos de 1966

Nosotros podemos elegir la forma y el color de la representación, por ejemplo la variación en


1955 en lı́nea verde y cı́rculos blancos y la de 1966 en cian con estrellas amarillas,

≫ hold off ←֓ % iniciamos un nuevo grafico


≫ plot(t1955,’g’) ←֓ % representamos 1955 en verde
≫ hold ←֓ % mantenemos este grafico
≫ plot(t1955,’wo’) ←֓ % representamos 1955 en circulos blancos
≫ plot(t1966,’c’) ←֓ % idem 1966 en cian
≫ plot(t1966,’y*’) ←֓ % idem 1966 en asteriscos amarillos

Como ejercicio se puede representar cómo variaron a lo largo del intervalo de tiempo
muestreado las temperaturas medias de enero, mayo y agosto.

≫ hold off ←֓ % iniciamos un nuevo grafico


≫ plot(t1) ←֓ % representamos enero (almacenado en vector t1)

O mejor representamos un gráfico tipo y frente a x con temperaturas medias de enero para
cada año ya que el indice de este vector representa años consecutivos desde 1940 que están
almacenados en el vector fecha.

≫ plot(fecha,t1) ←֓

Tambien podemos elegir el color y tipo de sı́mbolo,

≫ plot(fecha,t1,’w+’) ←֓ % pinta con ’+’ de color blanco

Si no estamos utilizando monitores de color, resulta útil pintar las lı́neas en estilos diferentes
cuando varias funciones se representan en el mismo gráfico,
5 REPRESENTACIONES GRÁFICAS SENCILLAS 9

≫ mes = 1:12; ←֓ % nueva variable


≫ hold off ←֓ % iniciamos un nuevo grafico
≫ plot(mes,t1955) ←֓ % otro formato plot(x,y)
≫ hold on ←֓ % conservamos el grafico
≫ plot(mes,t1966,’--’) ←֓ % t1966 con otro tipo de linea

Se pueden representar a la vez estas variables con un solo comando,

≫ hold off ←֓ % iniciamos un nuevo grafico


≫ plot(mes,t1955,mes,t1966,’--’) ←֓

Y ya para demostrar que el comando puede ser mucho más complicado y completo,

≫ x=linspace(0,2*pi,30); ←֓ % de 0 a 2*π en 30 pasos


≫ y1=sin(x); ←֓ % funcion seno
≫ y2=cos(x) ←֓ % funcion coseno
≫ hold off ←֓ % iniciamos un nuevo grafico
≫ plot(x,y1,’g:’,x,y2,’r--’,x,y1,’wo’,x,y2,’c+’) ←֓

Equivalencia de sı́mbolos en los gráficos

Sı́mbolo Color Sı́mbolo Estilo de lı́nea


y yellow amarillo . puntos
m magenta morado o cı́rculos
c cyan cian x aspas
r red rojo + cruces
g green verde * asteriscos
b blue azul - lı́nea continua
w white blanco : idem punteada
k black negro -- idem de trazos
Operaciones con vectores
(a,b vectores; c escalar)

suma escalar a+c = [a1 +c a2 +c ... an +c]


multiplicacion escalar a*c = [a1 *c a2 *c ... an *c]
suma de vectores a+b = [a1 +b1 a2 +b2 ... an +bn ]
multiplicacion de vectores a.*b = [a1 *b1 a2 *b2 ... an *bn ]
division de vectores a./b = [a1 /b1 a2 /b2 ... an /bn ]
potencia de vectores a.∧ c = [a1 ∧ c a2 ∧ c ... an ∧ c]
c.∧ a=[c∧ a1 c∧ a2 ... c∧ an ]
a./b = [a1 /b1 a2 /b2 ... an /bn ]
sumatorio de elementos sum(a)= a1 +a2 + ...+ an
suma acumulada de elementos cumsum(a)= [a1 a1 +a2 ... a1 +a2 + ...+an ]
productorio de elementos prod(a)= a1 *a2 * ...* an
producto acumulado de elementos cumprod(a)= [a1 a1 *a2 ... a1 *a2 * ...*an ]

You might also like