Introducción informal a Matlab y Octave - Matrices y algebra lineal (I)

8 - Matrices y algebra lineal (I)

Tutorial creado por Guillem Borrell i Nogueras. Extraido de: http://torroja.dmt.upm.es/%7Eguillem/matlab/
05 de Noviembre de 2006
Se ha dicho y repetido que Matlab es un programa orientado a cálculo matricial. Todo número en Matlab, hasta los escalares, son en realidad extensiones de matrices o matrices degeneradas.

Esta característica hace que todas las funciones puedan tomar matrices como argumento de forma natural. Aunque todas las funciones son en el fondo matriciales podemos clasificar unas cuantas cuyo propósito es precisamente manipular y crear matrices.

3.1  Rutinas de creación de matrices

eye
Matriz identidad
linspace(base,limit,n)
Devuelve un vector fila con n elementos equiespaciados entre base y limit
logspace(base,limit,n)
Devuelve un vector fila con n elementos espaciados exponencialmente entre 10base y 10limit.
meshdom(x,y)
Equivalente a meshgrid. Se usaba en versiones anteriores de Matlab
meshgrid(x,y)
Crea una malla equiespaciada en dos dimensiones a partir de los vectores x e y. Retorna dos matrices, una con la coordenada x y el otro con la coordenada y.
ones
Devuelve una matriz de las dimensiones solicitadas cuyos elementos son todos 1
rand
Devuelve una matriz de las dimensiones solicitadas cuyos elementos son números pseudoaleatorios entre 0 y 1.
rand*
donde * pueden ser varias letras. Devuelve una matriz de las dimensiones solicitadas cuyos elementos son números pseudoaleatorios que siguen distintas distribuciones
zeros
Devuelve una matriz cuyos elementos son todos ceros.
Las funciones que quizás requieran una pequeña explicación son linspace, logspace y meshgrid. La primera es la extensión de la secuencia (2.5.2) cuando los elementos no son números enteros. La usaremos muy frecuentemente y nos será muy sencillo dominar su uso:
>> linspace(-pi,e,20)
 ans =
  Columns 1 through 7:
   -3.141593  -2.833178  -2.524764  -2.216349  -1.907935  -1.599520  -1.291106
  Columns 8 through 14:
   -0.982692  -0.674277  -0.365863  -0.057448   0.250966   0.559381   0.867795
  Columns 15 through 20:
    1.176210   1.484624   1.793038   2.101453   2.409867   2.718282
 
logspace es exactamente la misma función pero con separación logarítmica:
>> logspace(-pi,e,20)
 ans =
  Columns 1 through 6:
    7.2178e-04   1.4683e-03   2.9870e-03   6.0765e-03   1.2361e-02   2.5147e-02
  Columns 7 through 12:
    5.1156e-02   1.0407e-01   2.1170e-01   4.3066e-01   8.7610e-01   1.7822e+00
  Columns 13 through 18:
    3.6256e+00   7.3756e+00   1.5004e+01   3.0523e+01   6.2092e+01   1.2631e+02
  Columns 19 and 20:
    2.5696e+02   5.2274e+02
 
La función meshgrid es un poco más compleja. Usaremos esta función cuando necesitemos una serie bidimensional de puntos equiespaciados que definiremos a partir de dos vectores, las diferencias según el eje x y según el eje y. Por ejemplo:
>> [xx,yy]=meshgrid(1:2:10,1:3:9)
 xx =
   1  3  5  7  9
   1  3  5  7  9
   1  3  5  7  9
 yy =
   1  1  1  1  1
   4  4  4  4  4
   7  7  7  7  7
 >> 0.5*(xx+yy)
 ans =
   1.0000  2.0000  3.0000  4.0000  5.0000
   2.5000  3.5000  4.5000  5.5000  6.5000
   4.0000  5.0000  6.0000  7.0000  8.0000
 
diag
Extrae e introduce diagonales en matrices.
Probablemente esta última sea la de mayor sentido físico puesto que las matrices por bandas se encuentran muy a menudo en problemas de EDP. El ejemplo que adjunta Matlab en la ayuda de la función es perfecto para entender su funcionamiento:
>> m = 5;
 >> diag(-m:m) + diag(ones(2*m,1),1) + diag(ones(2*m,1),-1)
 ans =
   -5   1   0   0   0   0   0   0   0   0   0
    1  -4   1   0   0   0   0   0   0   0   0
    0   1  -3   1   0   0   0   0   0   0   0
    0   0   1  -2   1   0   0   0   0   0   0
    0   0   0   1  -1   1   0   0   0   0   0
    0   0   0   0   1   0   1   0   0   0   0
    0   0   0   0   0   1   1   1   0   0   0
    0   0   0   0   0   0   1   2   1   0   0
    0   0   0   0   0   0   0   1   3   1   0
    0   0   0   0   0   0   0   0   1   4   1
    0   0   0   0   0   0   0   0   0   1   5
 

3.1.1  Tipos de argumentos matriciales.

Como vimos en el capítulo dedicado a los tipos de argumentos podemos modificar el tipo del argumento matricial (su precisión) de modo explícito. Algunas de las funciones anteriores permiten inicializar una matriz incluyendo el atributo de su tipo, es decir, del tamaño que ocupará cada elemento en memoria. Por ejemplo, si definimos la matriz unidad como entera de 8 bits:
>> i8 = zeros(2,2,'int8')
 i8 =
   0  0
   0  0
 >> i8(1,1)=1023
 i8 =
   127    0
     0    0
  
Por desgracia los operadores aún no disponen de la versatilidad de otros lenguajes más polivalentes como Fortran o Python; la siguiente operación nos dará error:
>> i8*[123.534,324.123;123.431,324.123]
 ??? Error using ==> mtimes
  Integers can only be combined with...
 

3.2  Rutinas de manipulación de forma.

Hay decenas de funciones de manipulación de forma. No las intentaremos conocer todas porque es un empeño un poco inútil. He aquí las más utilizadas
reshape(A,m,n,...)
Reordena la matriz A para ajustarse a las dimensiones mנnצhellip;. Esta función sólo manipula la forma, en el caso de que queramos ampliar su tamaño en vez de añadir ceros dará un error.
transpose
Traspuesta. (Ver los operadores aritméticos para su abreviatura)
ctranspose
Traspuesta conjugada. (Ver los operadores aritméticos para su abreviatura)
Una de las rutinas más útiles es la siguiente:
cat(opt,a,b,...)
Concatena matrices donde opt es la dimensión en la que se acoplarán las matrices y los argumentos siguientes matrices cuyas dimensiones permiten el 'pegado' entre ellas.
Un ejemplo del uso de cat sería:
>> help cat
 >> A=ones(2,2);
 >> B=zeros(2,2);
 >> cat(1,A,B)
 ans =
   1  1
   1  1
   0  0
   0  0
 >> cat(2,A,B)
 ans =
   1  1  0  0
   1  1  0  0
 
En el ejemplo vemos que con la opción opt=1 las matrices se concatenan en sentido longitudinal mientras que con opt=2 se concatenan en sentido transversal. Esta función sirve como ejemplo de la gran potencia de la notación matricial. Es muy importante no subestimar la potencia del uso de la creación y la modificación de matrices con la notación típica como vemos en el siguiente ejemplo. Haremos el cálculo anterior sin utilizar ninguna función:
>> A=ones(2,2);
 >> B=zeros(2,2);
 >> [A,B]
 ans =
   1  1  0  0
   1  1  0  0
 >> [A;B]
 ans =
   1  1
   1  1
   0  0
   0  0
 
Que sirva como lección; nunca hay que subestimar la potencia de la notación matricial.

3.2.1  Creación directa de matrices de rango mayor que 2.

La notación y la salida por pantalla de Matlab está pensada para el cálculo matricial, es decir, mantenernos siempre por debajo del rango 3. La notación está pensada para separar filas y columnas pero nada más; no hay ninguna notación capaz de separar entre planos matriciales; no hay ninguna extensión tensorial.

El método más intuitivo sería crear la hiper matriz como matriz y luego utilizar la función reshape para cambiarle la forma. Parece obvio que matlab cuente con métodos un poco menos artesanales.
repmat(A,[n,m,...])
Crea una matriz por bloques de dimensiones [n,m,...] con copias de la matriz A.
Por ejemplo, si queremos crear un cubo de números de lado 5 donde la tapa y el fondo sean matrices unidad y el resto sean ceros podemos hacer lo siguiente:
>> cat(3,eye(5),repmat(zeros(5),[1,1,3]),eye(5))
 ans =
 ans(:,:,1) =
   1  0  0  0  0
   0  1  0  0  0
   0  0  1  0  0
   0  0  0  1  0
   0  0  0  0  1
 ans(:,:,2) =
   0  0  0  0  0
   0  0  0  0  0
   0  0  0  0  0
   0  0  0  0  0
   0  0  0  0  0
 ans(:,:,3) =
   0  0  0  0  0
   0  0  0  0  0
   0  0  0  0  0
   0  0  0  0  0
   0  0  0  0  0
 ans(:,:,4) =
   0  0  0  0  0
   0  0  0  0  0
   0  0  0  0  0
   0  0  0  0  0
   0  0  0  0  0
 ans(:,:,5) =
   1  0  0  0  0
   0  1  0  0  0
   0  0  1  0  0
   0  0  0  1  0
   0  0  0  0  1
  

11 opiniones

Enzo

buenazo
Introducción informal a Matlab y Octave

un excelente materaial
^^ bueno el tutorial >_<

es bueno para uno q esta aprendiendo a aprender a manejarlo
Esta bien bueno y claro ese tutorial.

De verdad es una ayuda para el que empieza a manejar matlab.
Ing. Civil.

Bastante completo y didactico.
1 2 3 | siguiente >

Tutoriales relacionados con 'Introducción informal a Matlab y Octave'

Hay muchos libros de Matlab, algunos muy buenos, pero en ninguno es tratado como un... Más »

Autor y licencia de 'Introducción informal a Matlab y Octave'


Tutorial de Guillem Borrell i Nogueras. Extraido de: http://torroja.dmt.upm.es/%7Eguillem/matlab/ CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.