Práctica 1

Anuncio
Práctica 1
Introducción a Matlab
Este documento es una pequeña introducción a MATLAB. Un
documento mejor elaborado y más extenso es “Aprenda Matlab 7.0
como si estuviera en primero” que puede obtenerse en
http://www.tayuda.com
MATLAB viene de “MATrix LABoratory'”; se trata de un programa especializado en
los cálculos con matrices que puede llegar a ser muy útil en cuanto se sabe cómo
trabajar con él, pues nos permite, con poco esfuerzo, desde hacer los cálculos rutinarios
con matrices, a escribir programas para hacer tareas más complejas de forma muy
sencilla.
Dado que los escalares son matrices 1× 1 , MATLAB también trabaja con ellos sin
ningún problema. Podemos hacer con matrices cualquier operación: sumar, restar,
multiplicar, potencias, …simplemente hemos de tener en cuenta que las matrices
tendrán que ser de las dimensiones adecuadas, aunque en caso de no ser así, el programa
nos lo avisará con un mensaje de error.
1 Entorno gráfico de Matlab
Figura 1.- Entorno de trabajo en MATLAB
Una vez arrancado MATLAB, aparece una pantalla como la de la Figura 1. En la parte
derecha tenemos la Command Window. Ésta es la ventana en la que se ejecutan
interactivamente las instrucciones de MATLAB y en donde se muestran los resultados
correspondientes, si es el caso (en la figura se puede ver la matriz M después de haber
sido creada). En la Command Window vemos
>>
eso significa que MATLAB está esperando que le introduzcamos un comando
En la parte inferior izquierda tenemos el Command History. El Command History
ofrece acceso a las sentencias que se han ejecutado anteriormente en la Command
Window. Estas sentencias están también accesibles por medio de las teclas ↑ y ↓. Las
sentencias ejecutadas anteriormente se pueden volver a ejecutar mediante un doble clic
o por medio del menú contextual que se abre al clicar sobre ellas con el botón derecho.
También se pueden copiar y volcar sobre la línea de comandos, pero se ha de copiar
toda la línea, sin que se admita la copia de un fragmento de la sentencia.
En la parte superior izquierda tenemos una zona que alterna entre Workspace y Current
Directory. El Workspace contiene información sobre todas las variables que se hayan
definido en esta sesión y permite ver y modificar las matrices con las que se esté
trabajando (haciendo doble clic sobre ellas, Figura 2).
Figura 2.- Editor de matrices
Figura 3.- Vista del Current Directory
El Current Directory muestra los ficheros del directorio actual (Figura 3) y nos permite
navegar por los directorios del ordenador de forma análoga a la del Explorador de
Windows (modificando así el directorio actual). El concepto de directorio actual es muy
importante en MATLAB. Los programas de MATLAB se encuentran en ficheros con la
extensión *.m. Estos ficheros se ejecutan tecleando su nombre en la línea de comandos
(sin la extensión), seguido de los argumentos entre paréntesis, si se trata de funciones.
No todos los ficheros *.m que se encuentren en el disco duro son accesibles sin más.
Para que un fichero *.m se pueda ejecutar es necesario que se cumpla una de las dos
condiciones siguientes:
1. Que esté en el directorio actual. MATLAB mantiene en todo momento un
único directorio con esta condición. Este directorio es el primer sitio en el que
MATLAB busca cuando desde la línea de comandos se le pide que ejecute un
fichero.
2. Que esté en uno de los directorios indicados en el Path de MATLAB. El Path
es una lista ordenada de directorios en los que el programa busca los ficheros o
las funciones que ha de ejecutar. Muchos de los directorios del Path son propios
de MATLAB, pero los usuarios también pueden añadir sus propios directorios,
normalmente al principio o al final de la lista. Los ficheros *.m mostrados en la
ventana Current Directory se pueden abrir con el Editor/Debugger mediante un
doble clic (Figura 4).
Figura 4.- Editor de ficheros *.m
2 Primeros contactos
Lo primero que podemos hacer es escribir lo siguiente en la Command Window:
>> 1+1
ans =
2
MATLAB ha resuelto la operación que le hemos indicado y ha almacenado en la
variable ans (answer) el resultado de la misma. Siempre que no se indica explícitamente
la variable a la que se quiere asignar el resultado de una operación, MATLAB asigna,
de forma implícita, el resultado de la operación a la variable ans. Así, resulta más
recomendable escribir este otro comando:
>> x=1+1
x =
2
el resultado de la operación se almacena en la variable x. Es importante indicar que
MATLAB distingue entre mayúsculas y minúsculas (case-sensitive). Si tras el comando
anterior escribimos un ‘;’ entonces el resultado de la operación no se muestra en la
ventana de comandos:
>> x=1+1;
Podemos ordenar varios comandos en la misma línea separándolos por ‘,’.
>> y=3, x^y
y =
3
ans =
8
Dos comandos muy importantes son el comando help y el comando helpwin.
El comando lookfor sirve para buscar funciones relacionadas con una palabra:
>> lookfor correl
Nos muestra una lista de funciones relacionadas con la palabra correl y nos da una
pequeña descripción de esas palabras.
Otra instrucción interesante es:
>> format compact
Esta intrucción hace que las salidas por pantalla que genera el MATLAB sean más
compactas (elimina muchos saltos de línea innecesarios).
3 Trabajando con el Workspace
Si en un determinado momento necesitamos salir de MATLAB, puede resultar
interesante guardar el trabajo que llevamos hecho para poder recuperarlo cuando
volvamos a utilizar el MATLAB. Las variables que vemos en el Workspace se
encuentran almacenadas en memoria y al salir de MATLAB desaparecen. Para no
perder el contenido de estas variables debemos teclear:
>> save
antes de abandonar el programa. Este comando crea en el directorio actual un fichero
binario llamado matlab.mat en el que se encuentran almacenadas las variables del
Workspace. La próxima vez que arranquemos el programa podemos recuperar estas
variables tecleando:
>> load
Tal y como hemos utilizado el comando save, hemos guardado todas las variables del
Workspace. En ocasiones puede interesarnos guardar variables de forma selectiva y en
un fichero con un determinado nombre:
>> save fichero x y
Este comando crea un fichero llamado fichero.mat en el directorio actual con las
variables x e y. Para recuperar estas variables debemos escribir:
>> load fichero
Cuando queremos eliminar alguna variable del Workspace debemos utilizar el comando
clear en alguna de sus múltiples formas.
>> clear y
borra la variable y. Si no le damos el nombre de ninguna variable borra todas las
variables.
4 Vectores y matrices
Veamos cómo podemos crear una matriz:
>> A=[1 2 3
4 5 6
7 8 9]
A =
1
4
7
2
5
8
3
6
9
El comando anterior ha creado una matriz 3x3. Podríamos haber creado la misma matriz
con cualquiera de los dos siguientes comandos:
>> A=[1 2 3; 4 5 6; 7 8 9];
>> A=[1,2,3; 4,5,6; 7,8,9];
Así, podemos utilizar de manera indistinta el espacio en blanco o la coma para separar
columnas y el salto de línea o el punto y coma para separar filas.
Podemos también crear matrices a partir de otras matrices:
>>
>>
>>
>>
>>
a=[1
b=[2
c=[3
d=[4
M=[a
1; 1 1];
2;2 2];
3;3 3];
4;4 4];
b; c d]
M =
1
1
3
3
1
1
3
3
2
2
4
4
2
2
4
4
En MATLAB tenemos los siguientes operadores matriciales:
+
adición o suma
–
sustracción o resta
*
multiplicación
'
traspuesta
^
potenciación
\
división-izquierda
/
división-derecha
.*
.producto elemento a elemento
./ y .\
división elemento a elemento
.^
elevar a una potencia elemento a elemento
Existen varias funciones para crear matrices: zeros, ones, rand, magic, etc.
>> m = ones(2,4)
m =
1
1
1
1
1
1
1
1
Hay funciones para conocer la dimensión de una matriz:
>> [f c] = size(m)
f =
2
c =
4
Esta función devuelve el número de filas y de columnas de la matriz
>> length(m)
ans =
4
length devuelve el mayor valor de filas o columnas de la matriz. Es útil cuando se
trabaja con vectores fila o vectores columna. En este caso devuelve la dimensión del
vector.
Con el operador ‘:’ podemos definir vectores:
>> v = 1:5
v =
1
2
3
4
5
>> v = 1:2:5
v =
1
3
5
La sintaxis es “valor inicial : incremento : valor límite”. Se puede omitir el incremento y
en ese caso se entiende que el incremento es 1. El incremento puede, por supuesto, ser
negativo.
En MATLAB es sencillo borrar filas o columnas de una matriz:
>> m=rand(3)
m =
0.9501
0.2311
0.6068
0.4860
0.8913
0.7621
0.4565
0.0185
0.8214
0.8913
0.7621
0.0185
0.8214
>> m(1,:)=[]
m =
0.2311
0.6068
>> m(:,2)=[]
m =
0.2311
0.6068
0.0185
0.8214
Ojo con la comparación de igualdad en matrices:
>> a=[1 2; 3 4]; b=[1 2; 3 3];
>> a==b
ans =
1
1
1
0
>> a~=b
ans =
0
0
0
1
El operador ~= es el equivalente a != en C. En este caso lo hace elemento a elemento. Si
queremos saber si dos matrices son iguales tenemos que utilizar isequal:
>> isequal(a,b)
ans =
0
Tenemos funciones como any, all y find que chequean si las componentes de una matriz
cumplen una determinada condición:
>> a=magic(3)
a =
8
1
3
5
4
9
>> any(a>7)
ans =
1
1
>> all(a>2)
ans =
1
0
>> find(a>4)
ans =
1
5
6
7
8
6
7
2
0
0
any chequea por columnas si alguno de los elementos de la columna cumple una
determinada condición (en el ejemplo que sean mayores que 7). all chequea por
columnas que todos los elementos de la columna cumplan la condición. find devuelve
los índices de la componente de la matriz que cumplen la condición. Los elementos de
la matriz se numeran de arriba abajo por columnas.
5 Programación en MATLAB
MATLAB considera como comentario todo lo que hay desde el carácter ‘%’ hasta el
final de línea.
Veamos los esquemas que admite MATLAB.
La sentencia if:
if condicion1
bloque1
elseif condicion2
bloque2
else
bloque3
end
La sentencia switch
switch expresión
case exp1,
bloque1
case exp2,
bloque2
otherwise,
bloque3
end
Cuando casa con una de la expresiones ejecuta su bloque y finaliza el switch.
La sentencia for:
for i=1:n
Bloque
end
for i=vector
Bloque
end
En vector están almacenados los valores que tomará la variable i.
La sentencia while:
while condición
Bloque
end
En MATLAB se pueden crear ficheros de comandos (scripts) o funciones. Ambos se
crean en ficheros *.m.
Solo pueden ejecutarse aquellos ficheros *.m que se encuentran en el directorio actual o
aquellos que se encuentran en el path de MATLAB. Para invocar un script o una
función contenida en un fichero *.m solo hay que escribir el nombre del fichero (sin el
.m)
Si queremos hacer una función la primera línea del fichero debe seguir la siguiente
sintaxis:
function [valores retorno] = nombre(argumentos)
El fichero debe llamarse como la función. El siguiente ejemplo muestra el contenido del
fichero prueba.m:
function [suma resta] = prueba(A,B)
suma = A+B;
resta = A-B;
Veamos cómo se utiliza:
>> a=[2 2;2 2];b=[3 3;3 3];
>> [s r] = prueba(a,b)
s =
5
5
5
5
-1
-1
-1
-1
r =
6 Entrada y salida de datos
Se pueden importar datos de ficheros de texto. Si tenemos el fichero datos.txt:
1 2 3
4 5 6
Y escribimos:
M=load(‘datos.txt’);
Almacena en M los datos del fichero. Si los datos están en un fichero csv (datos.csv):
1,2,3
4,5,6
los podemos almacenar utilizando la función:
M=csvread(‘datos.csv’);
Hay otras funciones como textread que permiten cargar datos con otros formatos.
Para escribir datos a fichero se tienen las funciones fopen, fclose y fprintf. También
existe fscanf que podemos utilizar para leer un fichero.
>> [f,t]=fopen('salida','w')
f =
3
t =
''
>> fprintf(f,'la matriz es de dimensión %dx%d\n',size(a))
ans =
30
>> fclose(f);
Fopen retorna el identificador de fichero y un texto en caso de error. Fprintf retorna el
número de caracteres escrito. Después de cerrar el fichero, si comprobamos su
contenido veremos que tiene:
la matriz es de dimensión 3x3
Si queremos que la salida vaya a la ventana de comandos sin utilizar fichero podemos
utilizar fprintf sin indicar el identificador de fichero:
>> fprintf('la matriz es de dimensión %dx%d\n',size(a))
la matriz es de dimensión 3x3
Otras funciones de entrada salida útiles son input y disp. Suelen utilizarse en scripts o
funciones para interactuar con el usuario. Así, podemos solicitar que se introduzca un
valor para una variable a través de la ventana de comandos utilizando la instrucción
input:
>> x=input('dame el valor de la x = ')
dame el valor de la x = 13
x =
13
La función disp permite visualizar el contenido de una variable sin que aparezca el
nombre de la variable:
>> a=zeros(3);
>> disp(a)
0
0
0
0
0
0
0
0
0
7 Gráficos
MATLAB de varias funciones para crear gráficos 2-D y 3-D. La función plot es la más
básica de todas ellas. Veamos un ejemplo:
>> x=0:pi/10:2*pi;
>> y=sin(x);
>> plot(x,y)
El resultado puede verse en la figura 5.
Figura 5. Un ejemplo con plot
Descargar