Introducción informal a Matlab y Octave - Matrices y algebra lineal (I)
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.
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.
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.
>> 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.718282logspace 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+02La 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.
>> 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 0Por 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)
- 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.
>> 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 0En 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 0Que 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.
>> 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:
Autor y licencia de 'Introducción informal a Matlab y Octave - Matrices y algebra lineal (I)'
|
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 |
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 »

