MATLAB: recorrer una matriz, transpuesta, rango, inversa...

MATLAB: recorrer una matriz, transpuesta, rango, inversa...

En este artículo vamos a explicar los conocimientos básicos necesarios para comenzar a utilizar las matrices, conjunto de números ordenados en filas y columnas, en MATLAB.

¿Cómo se almacenan las matrices?

Independientemente de la dimensión y el tamaño, MATLAB para PC almacena vectores y matrices como vectores columna. Por ejemplo, la siguiente matriz T es almacenada en un vector formado por las columnas de la matriz, es decir, una después de otra:

  •  La matriz T:
(2 7 4)
(5 8 3)
  • Almacenada
(2)
(5)
(7)
(8)
(4)
(3)

¿Cómo recorrer una matriz y hacer la transpuesta?

Para ello recurriremos a la indexación, que nos permite añadir y extraer los elementos de la matriz según el índice de su ubicación.  Es posible acceder a los elementos de una matriz con un solo índice, el cual va de 1 hasta el número total de elementos de la matriz.

  • En el caso de la matriz T anterior, de dimensión 2x3, veamos cómo podemos mostrar sus elementos en el orden en que están almacenados (por columnas): 

T = [2, 7, 4; 5, 8, 3]     % Crear matriz T

for col = T
    for sol = col'    % col' --> Transpuesta de col
     fprintf('%d', sol)
     fprintf('\n')     
    end
end
  • Por el contrario, si queremos mostrar los datos almacenados por filas

T = [2, 7, 4; 5, 8, 3]

for fil = 1:size(m,1)
    for col = 1:size(m,2)
     fprintf('%d', m(fil, col)) 
    end
end

¿Cómo extraer un elemento de una matriz?

Si únicamente queremos mostrar un elemento de la matriz T, por ejemplo el 8, podemos acceder a él de dos maneras. Una es indicando tanto su fila como su columna (índices originales) y otra es indicando su posición en el vector columna en el que sabemos que ha sido almacenado (realizando un indexado lineal): T(2,2) ó T(4). Además, existen funciones MATLAB que simplifican esta manipulación:

  • sub2ind() permite pasar de los índices originales a la indexación lineal:

index_lineal = sub2ind(size(T), 2, 2)   % Obtenemos index_lineal = 4

  • ind2sub() permite pasar de la indexación lineal a los índices originales:

[fil, col] = ind2sub(size(T), 4)  % Obtenemos fil = 2 y col = 2

¿Cómo cambiar el tamaño de una matriz?

Teniendo en cuenta cómo se almacena una matriz en MATLAB, podemos intuir que el tamaño de una matriz no es importante y que solo es necesario una pequeña función para dar a una matriz la forma que queramos (siempre que el número de elementos no cambie). La función que permite redimensionar una matriz es conocida como reshape(). Si queremos redimensionar una matriz T en una matriz M,  hay que saber que los elementos de la primera son tomados en orden creciente de su indexación lineal y son colocados en M en el mismo orden. Por ejemplo: 

T = [2, 7, 4; 5, 8, 3]

M=reshape(T, [3 2]);  %Obtendremos una matriz M de 3x2 con los datos de T ordenados por columnas.

¿Cómo hacer la inversa de una matriz?

El procedimiento es muy sencillo. Únicamente tendrás que utilizar el comando inv(). Eso sí, recuerda que la matriz tendrá que ser cuadrada (mismo número de filas que de columnas). A continuación, un ejemplo:

T = [2, 7, 4; 5, 8, 3; 1,4,7]

V = inv(T)    % V será la matriz inversa de T

¿Cómo obtener el determinante y el rango de una matriz?

Para obtener el determinante de una matriz haremos uso del comando det() y para obtener el rango emplearemos la función rank(). A continuación, un ejemplo: 

T = [2, 7, 4; 5, 8, 3; 1,4,7]

d = det(T)      % d almacenará el resultado del determinante de T

r = rank(T)     % t almacenará el rango de T

Alrededor del mismo tema

Lenguajes