Clase 2: Operaciones con matrices en Matlab
Transcripción
Clase 2: Operaciones con matrices en Matlab
Clase 2: Operaciones con matrices en Matlab Hamilton Galindo UP Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 1 / 37 Outline 1 Definición de matrices desde teclado 2 Operaciones con matrices 3 Tipos de datos Datos numéricos Datos lógicos Caracteres y cadena de caracteres Estructuras Vectores o matrices de celdas 4 Variables y expresiones matriciales 5 Otras formas de definir matrices 6 Operadores relacionales 7 Operadores lógicos 8 Ejercicios Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 2 / 37 Definición de matrices desde teclado I Las matrices y vectores son variables que tienen nombres. Sugerencia: utilizar letras mayúsculas para matrices y letras minúsculas para vectores y escalares. 1 Las matrices se definen por filas y se usan conchetes [...] para definirlas. 2 vector fila: cuando los números están separados por espacios en blanco o comas. Vector fila Fila = [1 2 3] 3 vector columna: cuando los números están separados por enters o punto y coma. Vector columna Columna = [1; 2; 3] Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 3 / 37 Definición de matrices desde teclado II 4 Los elementos de una misma fila están separados por espacios en blanco o comas, mientras que las filas están separadas por una pulsación enter o por punto y coma. Matriz A = [Fila1 ; Fila2] A = [1 2 3; 4 5 6] Se obtiene: 1 2 3 A= 4 5 6 5 Cuando “el resultado de una operación” no ha sido asignado a una variable, MATLAB utiliza un nombre de variable por defecto (ans, de answer), que contiene el resultado de la última operación. 6 Para acceder a los elementos de un vector se coloca el nombre del vector seguido de la ubicación entre parentesis: v(3); muestra el tercer elemento del vector “v”. Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 4 / 37 Definición de matrices desde teclado III 7 Para una matriz: A(i,j) muestra el elemento que se encuentra en la i-ésima fila y en la j-ésima columna de la matriz “A”. 8 Importante: las matrices se almacenan por columnas (aunque se introduzcan por filas), entonces se puede acceder a cualquier elemento de una matriz con un sólo subı́ndice 1 2 3 A = 4 5 6 7 8 9 A(3, 2) = A(6) = 8 Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 5 / 37 Operaciones con matrices En Matlab existe tres principales operaciones con matrices: operadores aritméticos operadores para la solución de sistema de ecuaciones lineales operadores elemento a elemento Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 6 / 37 Operadores aritméticos I Operaciones con matrices + * ’ ˆ / suma resta multiplicación transpuesta potenciación división derecha 1 Matriz y escalar: los operadores anteriores se pueden aplicar entre un escalar y una matriz; en este caso, la operación con el escalar se aplica a cada uno de los elementos de la matriz. 2 División derecha: se usa para dividir por un escalar todos los elementos de una matriz o vector. Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 7 / 37 Operadores para la solución de sistema de ecuaciones lineales I Operaciones con matrices 1 División izquierda (\): este operador se usa para la solución de sistema de ecuaciones lineales como el siguiente: Ax = b Donde, x y b son vectores columna y A es una matriz invertible. 2 La solución de este sistema se puede escribir en dos formas: x = inv (A) ∗ b x = A\b 3 Este operador equivale a pre-multiplicar por la inversa de la matriz. 4 Este operador es aplicable aunque la matriz no tenga inversa e incluso no sea cuadrada, en cuyo caso la solución se obtiene por medio del método de mı́nimos cuadrados. Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 8 / 37 Operadores para la solución de sistema de ecuaciones lineales II Operaciones con matrices 5 Costo del operador: Matlab debe de emplear cierto tiempo en determinar las caracterı́sticas de la matriz (triangular, simétrica, etc.). 6 También se puede usar el operador división derecha es el siguiente caso: xA = b x = b ∗ inv (A) x = A/b 7 En este caso el operador división derecha equivale a post-multiplicar por la inversa de la matriz. Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 9 / 37 Operadores elemento a elemento Operaciones con matrices .* ./ y .\ .ˆ Hamilton Galindo (UP) producto elemento a elemento división derecha-izquierda elemento a elemento potenciación elemento a elemento Clase 2: Operaciones con matrices en Matlab Marzo 2014 10 / 37 Tipos de datos 15 TIPOS DE DATO Lógico (logical) Texto (char) Numérico (numeric) Referencia de función (function handle) Enteros Con signo Punto flotante Sin signo (int8) <=8 bit=> (uint8) (int16) <=16 bit=> (uint16) (int32) <=32 bit=> (uint32) (int64) <=64 bit=> (uint64) Hamilton Galindo (UP) Sola precisión (single) Contenedor heterogéneo Estructura (struct) Vector de celdas (cell) Doble precisión (double) Clase 2: Operaciones con matrices en Matlab Marzo 2014 11 / 37 Datos numéricos I Por default Matlab almacena los valores numéricos como punto flotante de doble precisión. [1] Enteros: Matlab dispone de 8 tipos de datos para números enteros: 4 con signo y 4 sin signo. Con signo: permite trabajar con números negativos y positivos, pero el rango de números (positivos) que considera es limitado en comparación con los enteros sin signo. Esto se debe a que el entero con signo utiliza un bite para el signo. Sin signo: utilizan un mayor rango de números que los enteros con signo, pero esta limitado a valores positivos y al cero. [2] Punto flotante: Es una forma de representar los números con decimales (no enteros) Bajo esta forma un número se representa mediante un exponente y una mantisa Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 12 / 37 Datos numéricos II x = 23456.789 En Matlab: x = 2.3457e+004 Donde: 2.3457 es la mantisa y “e” es la base (igual a 10). Precisión simple (single): el formato para los números de precisión simple es de 32 bits: Signo Exp. con signo Mantisa 1 bit 8 bits 23 bits Precisión doble (double): el formato para los números de precisión doble es de 64 bits: Signo Exp. con signo Mantisa 1 bit 11 bits 52 bits Infinito: Matlab utiliza inf y -inf para representar el infinito positivo y negativo. NaN: con esta expresión Matlab representa valores que no son números reales ni complejos. NaN significa Not a Number (no es una número). Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 13 / 37 Datos lógicos Los datos lógicos son aquellos que resultan de la comparación de dos expresiones númericas o de otro tipo. Su resultado es 1 (verdadero) o 0 (falso). El resultado puede ser un escalar, vector o matriz. Ejemplo [30 40 50 60] > 40 ans= 0011 Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 14 / 37 Cadena de caracteres I 1 Caracterı́sticas: I I I I Los caracteres de una cadena se almacenan en un vector, con un caracter por elemento. Las cadenas de caracteres van entre apóstrofos o comillas simples x = ‘miguel‘ Una matriz de caracteres es una matriz cuyos elementos son caracteres, o una matriz cuyas filas son cadenas de caracteres. z = [‘miguel‘; ‘javier‘; ‘raquel‘] z= miguel javier raquel Donde “z” es una matriz de 3x6 Todas las filas de una matriz de caracteres debe de tener el mismo número de elementos, las filas más cortas se completan con espacios en blanco. z = [‘miguel‘; ‘juan ‘; ‘raquel‘] Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 15 / 37 Cadena de caracteres II donde se ha dejado 2 espacios en blanco en “juan” 2 Funciones para operar con cadenas de caracteres: char(v) char(c1,c2) deblank(c) disp(c) strcmp(c1,c2) s=[s,‘ y más‘] Hamilton Galindo (UP) convierte un vector de números v en una cadena de caracteres crea una matriz de caracteres, completando con blancos las cadenas más cortas elimina los blancos al final de una cadena de caracteres imprime el texto contenido en la variable c comparación de cadenas. Si las cadenas son iguales devuelve un uno, y si nolo son, devuelve un cero concatena cadenas, añadiendo la segunda a continuación de la primera Clase 2: Operaciones con matrices en Matlab Marzo 2014 16 / 37 Estructuras I 1 Definición: Es una agrupación de diferentes tipos de datos bajo un mismo nombre. Estos datos se llaman campos (miembros). Una estructura es un nuevo tipo de dato, del que luego se pueden crear muchas variables (objetos). 2 Creación: Se desea crear una estructura alumno con dos campos: nombre y edad I Directa: alumno.nombre = ‘Miguel‘ alumno.edad = 24 Se accede a los campos de una estructura por medio del operador punto (.), que une el nombre de la estructura y el nombre del campo (por ejemplo: alumno.nombre). Al escribir alumno en el command windows se obtiene: Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 17 / 37 Estructuras II >> alumno nombre: ‘Miguel‘ edad: 24 I 3 Usando una función: alumno = struct(‘nombre‘,‘Miguel‘,‘edad‘,24) Vectores y matrices de estructuras: Para crear un vector de estructuras se hace lo siguiente: alumno(10) = struct(‘Nombre‘,‘‘,‘Edad‘,‘‘) Esto crea un vector de 10 estructuras tipo alumno. Para acceder a la estructura cinco se escribe alumno(5). Para llenar el campo “nombre” de la estructura cinco: alumno(5).nombre = Miguel Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 18 / 37 Estructuras III 4 Funciones para operar con estructuras: fieldnames() isfield(ST,s) isstruct(ST) rmfield(ST,s) getfield(ST,s) setfield(ST,s,v) 5 devuelve un vector de celdas con cadenas de caracteres que recogen los nombres de los campos de una estructura permite saber si la cadena s es un campo de una estructura ST permite saber si ST es o no una estructura elimina el campo s de la estructura ST devuelve el valor del campo especificado. Si la estructura es un array hay que pasarle los ı́ndices como cell array (entre llaves {}) como segundo argumento da el valor v al campo s de la estructura ST. Si la estructura es un array, hay que pasarle los ı́ndices como cell array (entre llaves {}) como segundo argumento Estructuras anidadas: Una estructura anidada es una estructura con campos que son otras estructuras. clase=struct(’curso’,’primero’,’grupo’,‘A’,‘alumno’, struct(‘nombre’,’Juan’, ‘edad’, 19)) Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 19 / 37 Estructuras IV Para acceder a los campos de la estructura más interna se utiliza dos veces el operador punto (.), como puede verse en el ejemplo, en el que la estructura clase contiene un campo que es una estructura alumno. Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 20 / 37 Vectores o matrices de celdas I Cell Arrays 1 Definición: Es un vector (matriz) cuyos elementos son cada uno de ellos una variable de cualquier tipo. En un vector de celdas, el primer elemento puede ser un número, el segundo una matriz, el tercero una estructura, etc. 2 Creación: Un vector de celdas se crea usando llaves {}. Es importante que el nombre del vector de celda no haya sido utilizado anteriormente por otra variable, sino Matlab arroja un error. Ejemplo: a continuación se crea el vector de celda “vc”. I I I Primer elemento: un vector vc(1) = {[1 2 3]} o vc{1} = [1 2 3] Segundo elemento: un cadena de caracteres vc(2) = {‘mi nombre’} o vc{2} = ‘mi nombre’ Tercer elemento: una matriz Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 21 / 37 Vectores o matrices de celdas II Cell Arrays vc(3) = {eye(3)} o vc{3} = eye(3) Tambien se puede crear “vc” de forma directa: vc = { [1 2 3] ‘mi nombre‘ eye(3)} 3 Funciones para operar con vectores (matrices) de celdas: MATLAB dispone de las siguientes funciones para trabajar con cell arrays (ca): cell(m,n) crea un cell array vacı́o de m filas y n columnas celldisp(ca) muestra el contenido de todas las celdas de ca cellplot(ca) muestra una representación gráfica de las distintas celdas iscell(ca) indica si ca es un vector de celdas num2cell() convierte un array numérico en un cell array cell2struct() convierte un cell array en una estructura struct2cell() convierte una estructura en un cell array 4 Conversión entre estructuras y vectores de celdas: Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 22 / 37 Vectores o matrices de celdas III Cell Arrays I − De vector de celdas → a estructura: F Sea el vector de celda “vc”: F vc = {[1 2 3], ‘Juan‘, eye(3)} El cual retorna un vector vc de 1x3 La función de conversión: st = cell2struct(vc,{‘vector‘,‘nombre‘,‘matriz‘},2) Donde: el número 2 indica que es la segunda dimensión del cell array la que va a dar origen a los campos de la estructura. I − De estructura → a vector de celdas: Se usa la siguiente función de conversión vvc = struct2cell(st) Se transpone para obtener una fila Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 23 / 37 Variables y expresiones matriciales I Variable Una variable es un nombre que se da a una entidad numérica (matriz, vector o escalar). 1 2 La forma normal de cambiar el valor de una variable es colocandola a la izquierda del operador de asignación (=) Si una expresión termina en punto y coma su resultado se calcula, pero no se escribe en pantalla. Esto es importante por: I I Evita la escritura de resultados intermedios Evita la impresión en pantalla de grandes cantidades de números cuando se trabaja con matrices de gran tamaño. 3 Si se desea que una expresión continue despues de colocar enter, se debe de colocar tres puntos “...” antes de pulsar enter. 4 Matlab distingue entre mayúsculas y minúsculas en los nombres de las variables. Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 24 / 37 Variables y expresiones matriciales II 5 Los nombres de las variables siempre debe de empezar con una letra y pueden constar de hasta 63 letras y números. 6 El caracter guión bajo ( ) se considera como una letra. 7 Comando Who y Whos Ambos permiten obtener la relación de variables que se está utilizando. Whos proporciona mayor información (tamaño, cantidad de memoria ocupada y el carácter real o complejo de cada variable). 8 Comando Clear clear clear clear clear clear global A,b functions all Hamilton Galindo (UP) elimina todas las variables creadas previamente (excepto las variables globales). borra las variables globales. borra las variables indicadas. borra las funciones. borra todas las variables, incluyendo las globales y las funciones. Clase 2: Operaciones con matrices en Matlab Marzo 2014 25 / 37 Otras formas de definir matrices I 1 Matrices predefinidas I I I I I I I I I I eye(n): matriz identidad de tamaño n zeros(n,m): matriz de ceros de tamaño nxm zeros(n): matriz cuadrada (nxn) de ceros ones(n): matriz cuadrada (nxn) cuyos elementos son 1 ones(n,m): matriz nxm cuyos elementos son 1 rand(n): matriz cuadrada (nxn) de números aleatorios entre 0 y 1, con distribución uniforme rand(n,m): matriz nxm de números aleatorios entre 0 y 1, con distribución uniforme randn(n): matriz cuadrada (nxn) de números aleatorios, con distribución normal de valor medio 0 y varianza 1 magic(n): matriz cuadrada (nxn) cuyos elementos son 1,2,3...nxn; con la propiedad de que todas las filas y columnas suman lo mismo kron(n,m): produce una matriz que se obtiene del producto Kronecker de n y m Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 26 / 37 Otras formas de definir matrices II 2 Formación de matrices a partir de otras Sea la matriz A de orden nxm y el vector kx1, en base a ella en Matlab se pueden contruir otras matrices: I I I I I I [n, m] = size(A); devuelve el número de filas y columnas de la matriz A size(A,1): indica el número de filas de la matriz A size(A,2): indica el número de columnas de la matriz A n = lenght(x); devuelve el número de elementos de una vector x B = diag(x); forma una matriz diagonal B con los elementos del vector x y = diag(A); forma un vector y con los elementos de la diagonal de la matriz A Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 27 / 37 Otras formas de definir matrices III I Concatenación de matrices: concatenar matrices es el proceso de unir una o más matrices para crear una nueva. Concatenación horizontal Sea A una matriz 2x2 y B 2x5, entonces: C = [A B] “C” será una matriz de 2x7 (notar que A y B tienen el mismo número de filas) Concatenación vertical Sea A una matriz 2x5 y B 4x5, entonces: C = [A; B] “C” será una matriz de 6x5 (notar que A y B tienen el mismo número de columnas) Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 28 / 37 Otras formas de definir matrices IV Ejemplo: A = rand(3) B = diag(diag(A)) C = [A, eye(3); B, zeros(3)] Esta matriz “C” 6x6 se forma por composición de 4 matrices de 3x3. Donde las filas se han separado por “;” y los elementos de cada fila por “,” 3 Extraer elementos de una matriz y vector a partir de vectores I Vectores para filas y columnas F F F vector para filas: a = [1 3 5], fila 1,3 y 5 vector para columnas: b = [1 2], columna 1 y Sea la matriz: A = magic(6) 35 1 6 26 19 3 32 7 21 23 31 9 2 22 27 8 28 33 17 10 30 5 34 12 14 4 36 29 13 18 Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab 2 24 25 20 15 16 11 Marzo 2014 29 / 37 Otras formas de definir matrices V F A(a,b) nos dará: 35 31 30 I Un solo vector F F F F F I Dado que los elementos de una matriz estan numerados de arriba hacia abajo Se puede obtener elementos particulares de la matriz por medio de un vector que indique la posición de dichos elementos A = magic(6), por tanto a tiene 36 elementos Sea c = [1 3 14] A(c), nos dará en un vector el elemento A(1), A(3) y A(14) Utilizando corchetes [] directamente F A([1 2 4],[2 3]) 32 28 5 4 1 9 5 7 33 34 Operador dos puntos (:) I Produce vector fila o columna Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 30 / 37 Otras formas de definir matrices VI F F I Extrae elementos de una matriz F F F F 5 Sea x=a:n:b, este comando produce un vector fila iniciando en “a” y terminando en “b”. El parámetro “n” indica el incremento (positivo o negativo) Ejemplo: x=1:2:10 Crea el vector: x = 1 3 5 7 9 Sea la matriz A = magic(6) Extraer los 4 primeros elementos de la 5ta fila: x = A(1:4,5) Extraer todos los elementos (:) de la 3era fila: x = A(3,:) Extraer la última fila (end) de matriz A: x = A(end,:) Matriz vacia (borrado de filas o columnas) Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 31 / 37 Otras formas de definir matrices VII I I Para Matlab una matriz definida sin ningún elemento entre los corchetes es una matriz que existe pero que está vacı́a; es decir, tiene dimensión cero. Utilidad: A = magic(3) 8 3 4 1 5 9 6 7 2 Sea: A(:,3) = [] Esto eliminará la tercera columna de A: 8 1 3 5 4 9 Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 32 / 37 Operadores relacionales I Operadores relacionales Matlab dispone de los siguientes operadores relacionales: < > <= >= == ∼= menor que mayor que menor o igual que mayor o igual que igual que distinto que 1 En Matlab los operadores relacionales se pueden aplicar a vectores y matrices. 2 Si una comparación se cumple el resultado es 1 (true), mientras que si no se cumple es 0 (false). Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 33 / 37 Operadores relacionales II 3 Cuando estos operadores se aplican a vectores y matrices del mismo tamaño, la comparación se realiza elemento a elemento, y el resultado es otra matriz de unos y ceros del mismo tamaño. Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 34 / 37 Operadores lógicos Operadores lógicos Los operadores lógicos de Matlab son los siguientes: & && | || ∼ and (función equivalente: and(A,B)). Se evalúan siempre and breve: si el primer operando es false ya no se evalúa el segundo, pues el resultado final ya no puede ser más que false. or (función equivalente: or(A,B)). Se evalúan siempre ambos operandos, y el resultado es false sólo si ambos son false. or breve: si el primer operando es true ya no se evalúa el segundo, pues el resultado final no puede ser más que true. negación lógica (función equivalente: not(A)) Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 35 / 37 Ejercicios I 1 Crear las siguientes matrices: I I I I I I A = matriz identidad 5x5 B = matriz 5x4 cuyos elementos son unos C = matriz 4x5 de números aleatorios entre 0 y 1 con distribución uniforme D = matriz 4x4 de números aleatorios con distribución normal (media 0 y varianza 4) E = matriz que contiene a “B” y “D” F = matriz inversa de “D” 2 Crear el vector de celda con nombre “encabezado” y que contenga: nombre1, nombre2,...,nombre4 3 Convierta la matriz F en una matriz de celda y llamela “G” 4 Concatenar G y “nombre” en una sola matriz llamada “Datos” Concatenar “C” y “D” en una matriz llamada “M” 5 I I Extraer las filas 1,3 y 4 de M Extraer las columnas 2,5 y 7 de M Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 36 / 37 Ejercicios II I I Construya una nueva matriz cuyos elementos esten determinados por las filas 1,2,3 y por las columnas 3,7,8,9 de M Construya una matriz que contenga las 3 primeras filas y 5 primeras columnas de M 6 Construya un vector fila (“x”) cuyos elementos sean números consecutivos del 1 al 100 7 Construya un vector columna (“y”) cuyos elementos sean números que descienden de 2 en 2 desde el 200 hasta el 10 8 Eliminar desde la columna 12 a la última del vector x 9 Crear una estructura (Alumno) con tres campos (nombre,edad,nota) Hamilton Galindo (UP) Clase 2: Operaciones con matrices en Matlab Marzo 2014 37 / 37