Práctica 1. Introducción al matlab

Anuncio
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 permite 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 aplicaciones. 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 .
2
3 MATRICES
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
4
9
2
5
8
3
6
7
y esta matriz es reservada por matlab para su uso posterior. Otra manera de crear
esta matriz serı́a,
≫ A =[1
4
5
9
8
2 3 ←֓
6 ←֓
7] ←֓
• Por medio de un fichero M
Si en un fichero de extensión .M tenemos escrito
A =[ 1
4
9
2
5
8
3
6
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
3 MATRICES
• 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
a
retirot
x
Size
3 by 3
51 by 13
1 by 3
Elements
Bytes
Density
9
663
3
72
5304
24
Full
Full
Full
Complex
No
No
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 ←֓
x =
%
%
-1.3000
1.7321
≫ x(2) ←֓
%
x(2) =
%
1.7321
%
≫ x(5) = abs(x(1)) ←֓ %
x =
%
-1.3000
1.7321
para preguntar cuanto vale x
valor de x
4.8000
para preguntar cuanto vale el segundo elemento
respuesta del programa
valor de x(2)
aumentamos la matriz
nuevo valor de x
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) ←֓
ans=
3
3
≫ r= [6 8 3]; ←֓
≫ A= [A;r] ←֓
A =
1
2
4
5
9
8
6
8
≫ size(A) ←֓
ans=
4
3
% Nos da el tamaño de la matriz A
%
%
%
%
matriz 3×3
Construimos un vector de tres elementos
(; calcula la expresion pero no imprime el resultado)
y lo unimos a la matriz A
3
6
7
3
% Preguntamos la nueva dimension de A
% matriz 4×3
4 MANIPULACIÓN DE VECTORES Y MATRICES
5
Tambien es posible extraer matrices que son parte de matrices (bloques) usando la notació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 ←֓
x=
1
2
% vector fila que contiene los numeros del 1 al 5
% con incrementos de la unidad
3
4
5
% incrementos diferentes de la unidad estan permitidos
% valores de 0 a π
≫ y = 0:pi/4:pi ←֓
y=
% con incrementos de π/4
0.0000
0.7854
1.5708
2.3562
3.1416
≫ z = 6:-1:1 ←֓
z=
6
5
4
% Tambien se pueden emplear
% incrementos negativos
3
2
1
Es evidente que este método nos sirve para generar tablas. Para que el formato sea tabular (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)’; ←֓
≫ y= sin(x); ←֓
≫ [x y] ←֓
0
0.2500
0.5000
0.7500
1.0000
1.2500
1.5000
1.7500
2.0000
2.2500
2.5000
2.7500
3.0000
0
0.2474
0.4794
0.6816
0.8415
0.9490
0.9975
0.9840
0.9093
0.7781
0.5985
0.3817
0.1411
% x es un vector columna (signo ’ al final)
% vector seno de los valores de x
% matriz con dos columnas x e y
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 especificar 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
4
9
2
5
8
3
6
7
A(3,3) = A(1,3)+A(3,1)
A =
1
2
3
4
5
6
9
8
12
% proporciona
Un subı́ndice puede ser un vector. Para entender ésto veamos cómo se pueden seleccionar 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
% El vector b contiene los valores de A
≫ b = 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); ←֓
≫ fecha = retirot(:,1); ←֓
%vector temperatura de enero (2a columna)
% 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) ←֓
ans=
1955
≫ t1955 = retirot(16,2:13) ←֓
% Preguntamos la fecha en la linea 16
% Efectivamente es 1955, luego
% 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’) ←֓
≫ plot(t1955,’ro’) ←֓
% en color verde o con simbolos
% 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 estacional 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
% lo representamos
≫ plot(t1966) ←֓
si queremos ver ambas gráficas a la vez pintamos una y luego la otra pero sin borrar la anterior utilizando el comando hold que mantiene la pantalla con los dibujos anteriores hasta
que tecleemos hold off,
≫ plot(t1955) ←֓
≫ hold ←֓
≫ plot(t1966) ←֓
% representamos los datos de 1955
% y en el mismo grafico
% 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 ←֓
plot(t1955,’g’) ←֓
hold ←֓
plot(t1955,’wo’) ←֓
plot(t1966,’c’) ←֓
plot(t1966,’y*’) ←֓
%
%
%
%
%
%
iniciamos un nuevo grafico
representamos 1955 en verde
mantenemos este grafico
representamos 1955 en circulos blancos
idem 1966 en cian
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 ←֓
≫ plot(t1) ←֓
% iniciamos un nuevo grafico
% 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,
9
5 REPRESENTACIONES GRÁFICAS SENCILLAS
≫
≫
≫
≫
≫
mes = 1:12; ←֓
hold off ←֓
plot(mes,t1955) ←֓
hold on ←֓
plot(mes,t1966,’--’) ←֓
%
%
%
%
%
nueva variable
iniciamos un nuevo grafico
otro formato plot(x,y)
conservamos el grafico
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
y
m
c
r
g
b
w
k
yellow
magenta
cyan
red
green
blue
white
black
Color
amarillo
morado
cian
rojo
verde
azul
blanco
negro
Sı́mbolo
.
o
x
+
*
:
--
Estilo de lı́nea
puntos
cı́rculos
aspas
cruces
asteriscos
lı́nea continua
idem punteada
idem de trazos
Operaciones con vectores
(a,b vectores; c escalar)
suma escalar
multiplicacion escalar
suma de vectores
multiplicacion de vectores
division de vectores
potencia de vectores
sumatorio de elementos
suma acumulada de elementos
productorio de elementos
producto acumulado de elementos
a+c = [a1 +c a2 +c ... an +c]
a*c = [a1 *c a2 *c ... an *c]
a+b = [a1 +b1 a2 +b2 ... an +bn ]
a.*b = [a1 *b1 a2 *b2 ... an *bn ]
a./b = [a1 /b1 a2 /b2 ... an /bn ]
a.∧ c = [a1 ∧ c a2 ∧ c ... an ∧ c]
c.∧ a=[c∧ a1 c∧ a2 ... c∧ an ]
a./b = [a1 /b1 a2 /b2 ... an /bn ]
sum(a)= a1 +a2 + ...+ an
cumsum(a)= [a1 a1 +a2 ... a1 +a2 + ...+an ]
prod(a)= a1 *a2 * ...* an
cumprod(a)= [a1 a1 *a2 ... a1 *a2 * ...*an ]
Descargar