Herramientas computacionales para la matemática MATLAB: Arreglos Verónica Borja Macías Marzo 2013 1
Una matriz es un arreglo bidimensional, es una sucesión de números distribuidos en filas y columnas. En MATLAB, una matriz se puede definir al escribir una lista de números encerrada entre corchetes. Los números se pueden separar mediante espacios o comas. Las nuevas filas se indican con punto y coma. También se puede definir una matriz al hacer una lista de cada fila en una línea separada, incluso no necesita el punto y coma para la nueva línea basta con un enter. 2
>> A = [1 2 3; 4 5 6] % es una matriz con 2 filas y 3 columnas A = 1 2 3 4 5 6 >> A = [1 2 3; 4 5 6] A = 1 2 3 4 5 6 >> A = [1 2 3 4 5 6] A = 1 2 3 4 5 6 3
Para acceder a los elementos individuales de una matriz lo haremos utilizando subíndices, A(n,m) donde n es el número de fila y m el número de columna. Podemos indicar el último subíndice como end. >> A = [1 2 3; 4 5 6] >>A(1,1) ans= 1 >>A(1,end) ans= 3 >>A(2,2) ans= 5 4
Si queremos que escriba toda una fila o columna usaremos los dos puntos. Al igual que con los vectores podemos indicar que escriba una serie de filas o columnas. >> A = [1 2 3; 4 5 6] ; >> A (2,:) % escribe la segunda fila de la matriz ans = 4 5 6 >> A (:,2) % escribe la segunda columna de la matriz ans = 2 5 5
>> A = [1 2 3; 4 5 6] >> A (2,2:3) % escribe de la segunda fila, columnas de la 2 a la 3 ans = 5 6 >> A (2, [3 1] ) % escribe de la segunda fila de la matriz, las columnas 3 y 1 ans = 6 4 >> A ( [2 1], 2:3) % escribe de las filas 2 y 1, las columnas de la 2 a la 3 ans = 5 6 2 3 >> A (end, [1 3] ) % escribe de la última fila, las columnas 1 y 3 ans = 4 6 6
Matlab tiene además otra forma de identificar cada elemento de una matriz, de modo que podemos acceder a un elemento de una matriz indicando sólo un valor y no dos, pero debemos saber que el orden elegido por MATLAB es por columnas así los elementos de la matriz A del ejemplo anterior serían denominados: A(1) A(3) A(5) A(2) A(4) A(6) >> A = [1 2 3; 4 5 6] ; >>A(5)%accede al elemento A(1,3) ans= 3 7
También es posible crear nuevas matrices a partir de vectores o matrices ya existentes. >>A=[1 2 3 4 5] A = 1 2 3 4 5 >>B=1:2:9 B = 1 3 5 7 9 >>T = [ A; B] T = 1 2 3 4 5 1 3 5 7 9 8
En MATLAB, es válido tener una matriz que esté vacía. Por ejemplo, los siguientes enunciados generarán cada uno una matriz vacía: >>A = [ ] >>B = 4:-1:5; También es posible eliminar filas o columnas mediante la asignación del vacio []. 9
Finalmente, usar el nombre de matriz con un solo dos puntos, (:) transforma la matriz en una sola columna. >> M = [1 2 3 ;4 5 6 ]; >> A=M(:) A = 1 4 2 5 3 6 10
Podemos ampliar una matriz asignando valores a nuevas posiciones y MATLAB llenara los espacios restantes con ceros. >> M = [1 2 3; 4 5 6; 7 8 9]; >> M(1,5)=3 M = 1 2 3 0 3 4 5 6 0 0 7 8 9 0 0 11
Construcción abreviada de algunas matrices zeros(n) crea una matriz cuadrada n x n de ceros. zeros(m,n) crea una matriz m x n de ceros. ones(n) crea una matriz cuadrada n x n de unos. ones(m,n) crea una matriz m x n de unos. rand(n) crea una matriz cuadrada n x n de números aleatorios con distribución uniforme (0,1). rand(m,n) crea una matriz m x n de números aleatorios con distribución uniforme (0,1). randn(n) crea una matriz cuadrada n x n de números aleatorios con distribución normal (0,1). randn(m,n) crea una matriz m x n de números aleatorios con distribución normal (0,1). 12
Construcción abreviada de algunas matrices eye(n) crea una matriz cuadrada n x n de unos en la diagonal y ceros el resto. eye(m,n) crea una matriz m x n de unos en la diagonal y ceros el resto. magic(n) crea una matriz cuadrada n x n de enteros de modo que sumen lo mismo las filas y las columnas. hilb (n) crea una matriz cuadrada n x n de Hilbert, es decir, los elementos (i,j) responden a la expresión (1/(i+j-1)). invhilb(n) crea una matriz cuadrada n x n que es la inversa de la matriz de Hilbert. 13
>> zeros (3) % matriz cuadrada 3 x 3 de ceros ans = 0 0 0 0 0 0 0 0 0 >> zeros (2,5) % matriz 2 x 5 de ceros ans = 0 0 0 0 0 0 0 0 0 0 >> ones (2,3) % matriz de unos ans = 1 1 1 1 1 1 14
>> eye(3) % matriz identidad de 3 x 3 ans = 1 0 0 0 1 0 0 0 1 >> rand(2,4) % matriz de 2 x 4 con entradas aleatorias ans = 0.8147 0.1270 0.6324 0.2785 0.9058 0.9134 0.0975 0.5469 >> magic(3) % matriz de 3x3 cuyos renglones y columnas suman lo mismo ans = 8 1 6 3 5 7 4 9 2 15
Arreglos: Operaciones con matrices Podemos realizar operaciones entre matrices y escalares, entre matrices y vectores, entre matrices y matrices y dependiendo de la operación también es posible operar elemento a elemento. Expresión Operación M + k M k M*k M/k o M./k k.^ M M.^ k Suma a los elementos de la matriz M el escalar k Resta a los elementos de la matriz M el escalar k Multiplicación los elementos de la matriz M por el escalar k División los elementos de la matriz M por el escalar k Potenciación del escalar k a cada uno de los elementos de M Potenciación los elementos M a la potencia escalar k 16
Arreglos: Operaciones con matrices Expresión M + N M N M * N M.* N M \ N M / N M./ N M.\ N M ^ k M.^ N M ' M.' Operación Suma de matrices (=) Resta de matrices (=) Multiplicación de matrices (c=r) Multiplicación elemento a elemento (=) División de matrices por la izquierda (sol. MX = N) (=r) División de matrices por la derecha (sol. XM = N) (=c) M/N = (M'\N')' División elemento a elemento por la derecha División elemento a elemento por la izquierda Potenciación de la matriz cuadrada M a la potencia k Potenciación elemento a elemento Transposición compleja conjugada Transposición 17
Arreglos: Funciones para el análisis de matrices Funciones (Con A matriz, v vector y n número natural) det (A) determinante diag (v) crea una matriz diagonal con v sobre la diagonal diag (A) extrae la diagonal de A como un vector columna inv (A) matriz inversa length (A) máxima dimensión size (A) dimensiones size (A, 1) número de renglones size (A, 2) número de columnas find (A) índices de las entradas de A distintas de 0 fliplr (A) voltea la matriz de izquierda a derecha flipud (A) voltea la matriz de arriba a abajo reshape (A,m,n) devuelve una matriz m x n cuyos elementos se toman por columnas de A 18
Arreglos: Funciones para el análisis de matrices Funciones rot90 (A) gira la matriz 90º en sentido contrario al reloj rot90 (A,n) gira la matriz n x 90º expm (A) exponencial matricial logm (A) logaritmo matricial sqrtm (A) raíz cuadrada matricial funm (A,@función) evalúa la función en la matriz A exp, log, sqrt operan elemento a elemento eig (A) valores propios cond (A) número de condición (sensibilidad a errores en datos) norm (A) norma norm (A,n) norma-n normest (A) estimación de la norma-2 19
Arreglos: Funciones para el análisis de matrices Funciones null (A) espacio nulo orth (A) ortogonalización pinv (A) pseudoinversa poly (A) polinomio característico rank (A) rango rref (A) reducción mediante la eliminación de Gauss trace (A) traza tril (A) matriz triangular inferior a partir de la matriz A triu (A) matriz triangular superior a partir de la matriz A [VE,VA] = eig (A) VE son los vectores y VA son los valores propios [L,U] = lu (A) factorización LU [Q,R] = qr (A) factorización QR 20
Arreglos: Operadores relacionales con vectores y matrices Cuando alguno de los operadores relacionales (<, >, <=, >=, == y =) actúa entre dos matrices del mismo tamaño, el resultado es otra matriz de ese mismo tamaño conteniendo unos y ceros, según los resultados de cada comparación true o false, respectivamente. >> A=magic(3) A = 8 1 6 3 5 7 4 9 2 >> M=A>4 M = 1 0 1 0 1 1 0 1 0 21
Arreglos: Operadores relacionales con vectores y matrices Funciones any(x) función vectorial; verifica si alguno de los elementos del vector x cumple una determinada condición. any(a) se aplica por separado a cada columna de la matriz A. El resultado es un vector de unos y ceros all(x) función vectorial; verifica si todos los elementos del vector x cumplen una condición. all(a) se aplica por separado a cada columna de la matriz A. El resultado es un vector de unos y ceros find(x) busca índices correspondientes a elementos de vectores que cumplen una determinada condición. El resultado es un vector con los índices de los elementos que cumplen la condición find(a) cuando esta función se aplica a una matriz la considera como un vector con una columna detrás de otra. 22
>> A=magic(3) A = 8 1 6 3 5 7 4 9 2 >> m=find(a>4) m = 1 5 6 7 8 23
Arreglos: Operadores relacionales con vectores y matrices >> A(m)=10*ones(size(m)) % sustituye los elementos que cumplen la condición A = anterior por valores de 10. 10 1 10 3 10 10 4 10 2 Funciones isnan(a) verifica si hay valores NaN en A, devolviendo una matriz de unos y ceros del mismo tamaño que A. isinf(a) verifica si hay valores Inf en A, devolviendo una matriz de unos y ceros del mismo tamaño que A. isfinite(a) verifica si los valores de A son finitos. isempty(a) verifica si un vector o matriz está vacío o tiene tamaño nulo. issparse() verifica si una matriz es dispersa (sparse, es decir, con un gran número de elementos cero). 24
>> x=[1 2 3 4 0/0 6] Warning: Divide by zero x = 1 2 3 4 NaN 6 >> i=find(isnan(x)) i = 5 >> x(isnan(x))=[] % posibles formas de eliminarlo x = 1 2 3 4 6 >> x=x(~isnan(x)); >> x=x(find(~isnan(x))); >> A(any(isnan(A)'), :)=[] % elimina las filas de A que contienen algún NaN 25