Inicio / Wikis / Tutoriales / Introducción informal a Matlab y Octave - Matrices y algebra lineal (I)

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

(8 opiniones)
Tutorial creado por
05 de Noviembre de 2006
Encriptación
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
  
Valora este capítulo: (8 opiniones)
Autor y licencia de 'Introducción informal a Matlab y Octave - Matrices y algebra lineal (I)'
Guillem Borrell i Nogueras Extraído 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.

Opiniona sobre 'Introducción informal a Matlab y Octave - Matrices y algebra lineal (I)' (8)

Tu nombre debe tener tres caracteres como mínimo.
Es necesario que te des de alta con una cuenta de correo válida.
Es necesario que te des de alta con una cuenta de correo válida.
El contenido del título de tu opinión debe tener tres caracteres como mínimo.
Es obligatorio que selecciones una valoración del recurso.
El contenido del comentario de tu opinión debe tener tres caracteres como mínimo.

Opina sobre este tutorial



* Valoración:
* Nombre:
* Correo electrónico:
* Título:
* Comentario:

Wikis relacionados con 'Introducción informal a Matlab y Octave - Matrices y algebra lineal (I)'

Este pequeño tutorial da algunos términos clave de álgebra lineal, no pretende remplazar o ser... Más »
Josep Palau i Fabre, poeta barcelonés nacido en 1917, es uno de los máximos representantes... Más »
En los últimos años, el desarrollo basado en componentes se ha convertido en una de... Más »
Este es el Diccionario de Plantas Mágicas elaborado por nosotr@s. Esta basado en nuestra propia... Más »
El objetivo de este trabajo es dilucidar en lo posible las dimensiones de la intertextualidad... Más »
¿Estás seguro de que deseas eliminar este capítulo?