Introduccin a Matlab
Taller Intersemestral Agosto 2005
Objetivo:
Presentar Matlab como una herramienta auxiliar para el anlisis y solucin de problemas. Seleccionando y adecuando las distintas funciones a las necesidades particulares de cursos del departamento.
Desglose de Temas
Introduccin Funciones y archivos M Operaciones con matrices Operaciones con arreglos de datos Operadores relacionales Operadores lgicos Funciones para anlisis de datos Graficacin
Introduccin
MATLAB es un lenguaje de alto rendimiento para cmputo tcnico. Integra elementos de clculo, visualizacin en 2 y 3 dimensiones y programacin. MATLAB significa MATrix LABoratory o laboratorio de matrices. Todos los datos en MATLAB son almacenados como matrices o vectores.
Introduccin
MATLAB es un lenguaje basado en expresiones. Las expresiones tecleadas por el usuario son interpretadas y evaluadas por el sistema de MATLAB. Las rdenes dadas al sistema son formuladas como enunciados, los cuales tienen la siguiente forma: variable = expresin o simplemente expresin
Introduccin
Las expresiones se componen de operadores, caracteres especiales y de nombres de funciones y variables. La evaluacin de una expresin produce una matriz, la cual es desplegada en la pantalla y asignada a una variable para su uso futuro. Si el nombre de una variable y el signo = no son proporcionados, una variable con el nombre ans (proviene de answer en ingls) es automticamente generada.
Variables
Los nombres de variables deben ser de una sola palabra y que no contengan espacios. MATLAB distingue entre maysculas y minsculas. Los nombres de variables pueden contener hasta 19 caracteres, deben iniciar con una letra seguida por cualquier nmero, letra, digito o una lnea de subrayado. Los signos de puntuacin no son permitidos ya que la mayora tiene un significado especial en MATLAB.
Variables
MATLAB almacena la informacin de las variables en forma progresiva en lo que se llama espacio de trabajo de MATLAB (MATLAB workspace). El comando who lista nuestras variables. Informacin ms detallada se puede obtener con el comando whos. El comando clear puede ser usado para limpiar o borrar una variable del espacio de trabajo.
Variables especiales
ans pi eps inf NaN iyj nargin nargout realmin realmax
Nombre de la variable usada por default 3.14159......... Precisin relativa de punto flotante (Versin 6.5: 2.2204e16) Significa infinito como 1/0 Que significa Not-a-Number o no es un nmero como 0/0 i = j = sqrt(-1) El nmero de argumentos de entrada para una funcin El nmero de argumentos de salida de una funcin El nmero real positivo ms pequeo que se puede usar (Versin 6.5: 2.2251e-308) El nmero real positivo ms grande que se puede usar (Versin 6.5: 1.7977e+308)
Documentacin
% Se usa como inicio de un comentario, lo que est a la derecha de este signo no se evaluar. ; Al final de un enunciado, evita que MATLAB imprima en la pantalla el resultado de evaluar un enunciado.
Operadores aritmeticos
Operacin Suma ( a + b ) Resta ( a b ) Multiplicacin (a x b ) Divisin ( a b ) Divisin izquierda Potencias ( ab ) Smbolo + * / \ ^ Ejemplo 5+3 23 12 2.05 x 1.48 50/5 = 10 50\5 = 0.1 6^2
Orden de operaciones
Las expresiones son evaluadas de derecha a izquierda Potencia tiene el ms alto orden de precedencia, seguido de la multiplicacin y divisin, las cuales tienen la misma precedencia. Seguidos por la suma y resta con igual precedencia. Los parntesis pueden ser usados para alterar este orden, en este caso, la precedencia se aplica en los parntesis ms internos y se aplica hacia afuera.
Vectores y Matrices
La principal estructura de datos en MATLAB son las matrices. Un vector puede ser representado en forma de una matriz con un solo rengln (llamado vector o matriz rengln). O con una sola columna (llamado vector o matriz columna). Los elementos individuales de una matriz se indexan de acuerdo a su nmero de rengln y columna con los cuales se forma un subndice.
Vectores y Matrices
La forma ms sencilla para capturar los elementos de una matriz es usando listas explicitas. Las listas explicitas contienen los elementos de una matriz separados por espacios o comas y estn encerrados en corchetes y usando punto y coma para indicar el fin de cada rengln.
A = [ 1 2 3; 4 5 6; 7 8 9 ]
Vectores y Matrices
Los elementos de una matriz pueden ser cualquier expresin de MATLAB, por ejemplo el enunciado X = [ -2.5 sqrt(3) (1+3+7)/3*8 ]
Los elementos individuales se pueden referenciar usando los subndices encerrados en parntesis, por ejemplo:
X(1) ans = -2.5000
Vectores y Matrices
Adems, se pueden introducir nuevos datos o cambiar valores de elementos ya existentes referenciandolos por su subndice, por ejemplo: X(5) = abs(x(1)) Produce la salida
X= -2.5000 1.7321 29.3333 0.0000 2.5000
Note que el tamao de X se incrementa automticamente para acomodar el nuevo elemento y que los elementos intermedios no definidos se inicializan con cero.
Nmeros complejos
Los nmeros complejos son permitidos en todas las operaciones y funciones en MATLAB. Los nmeros complejos se capturan usando las funciones especiales i y j, por lo cual el enunciado Z = 4 + 4*i es igual a Z = 4 + 4*j ( Z = 4+4j ) ( Z = 4+4i )
No es necesario el signo de * para definir los nmeros complejos, pero si cuidar el poner la i o j despus del nmero imaginario.
Nmeros complejos
Otra forma de capturar los nmeros complejos es en su forma polar W = r*exp(i*theta) ( w = 5*exp(i*pi/2) )
Nmeros complejos
Existen dos formas para capturar matrices complejas, la primera sera con el enunciado A = [ 1 2; 3 4 ] + i * [ 5 6; 7 8 ] y la segunda con el enunciado A = [ 1+5i 2+6i; 3+7i 4+8i ]
Cuando se introducen elementos complejos se debe tener cuidado de no usar espacios ya que se pueden tomar como dos nmeros separados.
Funciones y archivos M
Funciones de Matlab Intrinsecas (Paquete bsico) Archivos M (Toolboxes) Definidas por el usuario
Funciones
El comando help se utiliza para obtener ayuda en lnea sobre cualquier funcin de MATLAB Por ejemplo: help sin
Es muy til para aclarar dudas sobre los argumentos de cada funcin y la forma en que los resultados sern calculados y devueltos.
Archivos M
Se pueden crear funciones ms complejas a partir de las funciones bsicas.
La lista de funciones bsicas se puede escribir como un archivo de texto y despus leerlo desde MATLAB.
Estos archivos de texto o listados son llamados archivos M ya que los nombres usados para estos archivos deben terminar con la extensin .m, por ejemplo ejem1.m.
Archivos M
Enseguida se muestra el listado de una funcin que calcula el promedio de las calificaciones de cuatro unidades. % Listado del archivo ejem1.m uni1 = 80; uni2 = 85; uni3 = 75; uni4 = 80; suma_de_calif = uni1 + uni2 + uni3 + uni4; calif_promedio = suma_de_calif/4 Despus de guardar este archivo solo se requiere teclear ejem1 en la lnea de comandos de MATLAB y el sistema leer y evaluar cada lnea del archivo M como si se hubiera tecleado directamente en MATLAB.
y obtener z = -1 0 2
Para la suma y resta, las operaciones con arreglos de datos y las operaciones con matrices son las mismas, es decir, en ambos casos se realizan elemento-por-elemento, por lo que se usan los signos + y sin importar si son operaciones con matrices o con arreglos de datos.
La divisin y divisin izquierda con arreglos de datos se denotan por las expresiones ./ y .\
Elevar a la potencia elemento-por-elemento es denotado por .^ Para esta operacin hay algunos ejemplos, si tecleamos z = x .^ y resultar en z = 1 32 729
Operadores Relacionales
Existen seis operadores relacionales para comparar dos matrices de iguales dimensiones los cuales se incluyen en la siguiente tabla:
< <= > >= == ~= Menor que Menor o igual que Mayor que Mayor o igual que igual que diferente
Operadores Relacionales
Las comparaciones son hechas entre pares de elementos correspondientes, el resultado es una matriz de unos y ceros, con un uno = VERDADERO y un cero = FALSO. Por ejemplo: z = x < y lo que resulta en z = [ 1 1 1]
Operadores Relacionales
La funcin find es til con los operadores relacionales, ya que encuentra los elementos diferentes de cero en una matriz, proporcionando un vector conteniendo los ndices de los elementos que satisfagan la condicin, de esta forma, si tecleamos z = find(x >= 2) obtendremos z = 2 3
Operadores Lgicos
Existen tres operadores lgicos que trabajan elemento-por-elemento, los cuales se incluyen en la siguiente tabla:
& | ~ AND OR NOT
Los operadores & y | comparan dos escalares, o dos matrices de iguales dimensiones. Para el caso de matrices, el resultado se presentar en la misma forma que en el caso de los operadores relacionales.
Operadores Lgicos
La operacin NOT, o complemento lgico, es un operador unitario, es decir, trabaja sobre un solo operando. La expresin ~A regresar ceros donde A sea diferente de cero y unos donde A sea cero. Por lo que si P = [ 0 1 1 0 1 10 ] las operaciones P | (~P) P & (~P) darn como resultados todos unos y todos ceros respectivamente.
Operadores Lgicos
Las funciones any y all son tiles en conjunto con los operadores lgicos. Si X es un vector binario: any(X) da como resultado uno, si cualquiera de lo elementos de X es diferente de zero y cero de otra forma. all(X) da como resultado uno, solo si todos los elementos de X son diferentes de cero. Si se usan con matrices, estas funciones darn un resultado por cada columna y se presenta en forma de vector rengln. Aplicando la funcin por duplicado, como en any(any(A)) siempre reducir el resultado a un escalar.
Producto de elementos Suma acumulada de elementos Suma acumulada de productos Derivativas aproximadas Histograma de valores Correlacin de coeficientes Matriz de covarianzas Reordenar en pares complejos
Generacin de nmeros
Por incrementos se usa la siguiente sintaxis, k=valor inicial: incremento: valor final Por numero de puntos dentro de un rango: con espaciamiento lineal, linspace(valor inicial, valor final, numero de puntos) con espaciamiento logartmico, logspace(d1,d2,N)
La funcin rand(r,c) genera una matriz de r renglones y c columnas, cuyas entradas son nmeros aleatorios entre 0 y 1, con distribucin uniforme
La funcin randn(r,c) genera una matriz de r renglones y c columnas, cuyas entradas son nmeros aleatorios con distribucin normal, media igual a cero y desviacin estandar igual a uno.
Graficacin
Grficas xy Sencillas
Se explicar la graficacin xy sencilla con un ejemplo. Suponga que queremos graficar la informacin resultante de un experimento:
Ensayo 1 2 3 4 5 6 7 8 9 10 Distancia 58.5 63.8 64.2 67.3 71.5 88.3 90.1 90.6 89.5 90.4
Graficacin
Grficas xy Sencillas
Almacenamos las dos columnas en vectores de datos: x= [1 2 3 4 5 6 7 8 9 10]; y= [58.5 63.8 64.2 67.3 71.5 88.3 90.1 90.6 89.5 90.4]; Para graficar los datos: plot(x,y)
Grficas xy Sencillas
Grficas xy Sencillas
Para agregar informacin a la grfica: title(Experimentos de Laboratorio) xlabel(Ensayo) ylabel(Distancia, m) grid on Note las diferencias en las grficas.
Grficas xy Sencillas
Grficas Lineales y Logartmicas Los comandos de Matlab para generar grficas lineales y logartmicas de los vectores x y y son los siguientes: semilogx(x,y) Genera una grfica de los valores x y y usando una escala logartmica para x y una escala lineal para y. semilogy(x,y) Genera una grfica de los valores x y y usando una escala logartmica para y y una escala lineal para x. loglog(x,y) Genera una grfica de los valores x y y usando una escala logartmica tanto para x como para y.
Grficas Mltiples
Para generar curvas mltiples en la misma grfica se usan mltiples argumentos en un comando de graficacin, plot(x,y,w,z) donde las variables x, y, w y z son vectores. El comando traza la curva correspondiente a x vs y, y luego w vs z. Matlab selecciona diferentes tipos de lnea para distinguir las lneas.
Grficas Mltiples
Otra forma es graficar una matriz con columnas mltiples. Cada columna se graficar contra un vector x.
x= 0:0.1:5; w= x; z= w.^2 - 0.9*x +7; f(1,:)= x.^2 - 3*x + 2; f(2,:)= 2*x.^2 + x -3; subplot(2,1,1) plot(x,f(1,:),w,z),title('Grafica con dos curvas:plot(x,f(1,:),w,z)') subplot(2,1,2) plot(x,f), title('Grafica de multiples funciones:plot(x,f)')
Grficas Mltiples
Estilo de Lneas y Marcas El comando plot(x,y) genera una grfica de lneas que conecta los puntos representados por los vectores. Podemos seleccionar otros tipos de lnea y/o de puntos. La siguiente tabla muestra algunas opciones:
Tipo de lnea continua guiones punteada guiones-puntos Indicador -: -. Tipo de punto punto ms estrella crculo marca Indicador . + * o x
Estilo de Lneas y Marcas La seleccin del tipo de lnea o punto se hace agregando un argumento al comando de graficacin: plot(x,y,o)
Escala de los Ejes Matlab fija automticamente la escala de los ejes ajustndola a los valores de los datos. Podemos cambiar las escalas con el comando axis: axis Mantiene la escala del eje actual para grficas subsecuentes. Una segunda ejecucin del comando regresa el sistema al escalado automtico. axis([xmin xmax ymin ymax]) Especifica la escala del eje usando los valores de escala que estn definidos en el comando. El comado plot precede al comando axis.
Subgrficas El comando subplot permite dividir la ventana de grficos en subventanas. subplot(x, y, n) Divide la ventana de grficas en un arreglo de x por y subventanas y define la subventana n para colocar la grfica que se genere despus del comando subplot. subplot(2,1,1), plot(x,y) La grfica definida por el comando plot(x,y) se colocar en la primera subventana de las cuatro definidas por el comando subplot(2,2,1).
Graficacin en 3D
Matlab ofrece 3 tipos de graficacin para tres dimensiones: Grficas de lneas Grficas de contorno Grficas de malla
Grficas de lneas
Las grficas de lneas son creadas usando el comado plot3, el cual es la version tridimensional de plot
Grficas de contorno
Las grficas de controno en realidad son grficas en dos dimensiones, en z. con lneas uniendo puntos con igual valor
Grficas de malla
En las grficas de malla, cada punto se une a sus vecinos formando una especie de tapete.
Ejemplos:
Simple3D clf x=-1:.1:1; y=-2:.1:2; [X,Y]=meshgrid(x,y); z=X.^4+(Y/2).^4; subplot(121), contour(z) subplot(122), mesh(z)
Banana de Rosenbrock function h=banana(x1,x2) h=100*(x2-x1.^2).^2+(ones(size(x1))-x1).^2; Banana1.m clf x=0:.1:2; y=0:.1:4; [X,Y]=meshgrid(x,y); z=banana(X,Y); subplot(121), contour(x,y,z) subplot(122), mesh(x,y,z)
Banana de Rosenbrock
Logartimo de la Banana de Rosenbrock Banana2.m clf x=0:.1:2; y=0:.1:4; [X,Y]=meshgrid(x,y); z=banana(X,Y); logz=log(1+z); meshc(x,y,logz)