15/01/2022
Las matrices son estructuras fundamentales en el mundo de las matemáticas, la ingeniería y la ciencia de datos. Son herramientas poderosas para organizar y manipular información, y su estudio es crucial en diversos campos. Dentro de una matriz, las diagonales ocupan un lugar especial, siendo elementos clave para operaciones como la resolución de sistemas de ecuaciones, transformaciones lineales o el cálculo de valores propios. En el entorno de programación y cálculo numérico de Matlab, trabajar con las diagonales de las matrices es una tarea común y, afortunadamente, cuenta con una función extremadamente versátil para ello: la función diag. Este artículo te guiará a través de todas las facetas de esta indispensable función, permitiéndote dominar su uso tanto para extraer diagonales existentes como para construir nuevas matrices diagonales.

Comprender cómo interactuar con las diagonales de una matriz no solo es una habilidad técnica, sino una puerta de entrada a algoritmos más complejos y eficientes. Desde la simple extracción de la diagonal principal hasta la creación de matrices con diagonales desplazadas, Matlab simplifica estas operaciones de manera significativa. Prepárate para sumergirte en el corazón de la manipulación matricial y optimizar tus flujos de trabajo con un conocimiento profundo de la función diag.
La Función diag de Matlab: Tu Aliada para las Diagonales
La función diag en Matlab es una herramienta polivalente que puede realizar dos operaciones principales, dependiendo de si su entrada es una matriz o un vector:
- Si la entrada es una matriz,
diagextrae una diagonal específica de esa matriz y la devuelve como un vector columna. - Si la entrada es un vector,
diagcrea una nueva matriz diagonal, colocando los elementos del vector en una diagonal específica.
Esta dualidad la convierte en una de las funciones más utilizadas cuando se trabaja con estructuras matriciales en Matlab.
Extrayendo la Diagonal Principal de una Matriz
La diagonal principal de una matriz cuadrada (o rectangular) está formada por aquellos elementos donde el número de fila es igual al número de columna (es decir, aii). Extraer esta diagonal es una de las aplicaciones más comunes de diag. Para hacerlo, simplemente pasamos la matriz como argumento a la función.
Consideremos una matriz A:
A = [1 2 3; 4 5 6; 7 8 9];Para obtener su diagonal principal, simplemente escribimos:
d_principal = diag(A);El resultado será un vector columna:
d_principal =
1
5
9Es importante notar que diag funciona correctamente incluso con matrices no cuadradas. Si la matriz es rectangular, diag extraerá los elementos aii hasta que se agote una de las dimensiones. Por ejemplo, si tenemos una matriz 3x4:
B = [1 2 3 4; 5 6 7 8; 9 10 11 12];
d_B = diag(B);El resultado sería:
d_B =
1
6
11Esto demuestra la flexibilidad de la función, adaptándose a la forma de la matriz de entrada.

Creando una Matriz Diagonal a Partir de un Vector
La segunda funcionalidad clave de diag es la capacidad de construir una matriz diagonal a partir de un vector. Los elementos del vector se colocan en la diagonal especificada, y el resto de los elementos de la matriz se rellenan con ceros. Esta es una forma muy eficiente de crear matrices dispersas o matrices de transformación específicas.
Supongamos que tenemos un vectorv:
v = [2 1 -1 -2 -5];Para crear una matriz diagonal D con estos elementos en la diagonal principal, usamos diag de la siguiente manera:
D = diag(v);El resultado es una matriz cuadrada donde los elementos de v están en la diagonal principal y todos los demás elementos son cero:
D =
2 0 0 0 0
0 1 0 0 0
0 0 -1 0 0
0 0 0 -2 0
0 0 0 0 -5La dimensión de la matriz resultante será igual a la longitud del vector de entrada. En este caso, como v tiene 5 elementos, D es una matriz 5x5.
Explorando Diagonales Secundarias con el Parámetro k
Una de las características más potentes de la función diag es su capacidad para trabajar con diagonales que no son la principal. Esto se logra mediante un segundo argumento opcional, k, que especifica el desplazamiento de la diagonal:
k = 0(por defecto): Se refiere a la diagonal principal.k > 0: Se refiere a una superdiagonal (una diagonal por encima de la principal). Por ejemplo,k=1es la primera superdiagonal.k < 0: Se refiere a una subdiagonal (una diagonal por debajo de la principal). Por ejemplo,k=-1es la primera subdiagonal.
Veamos ejemplos de cómo usar k tanto para crear como para extraer diagonales.
Creando una Matriz con una Diagonal Secundaria
Si queremos crear una matriz donde los elementos de un vector v se coloquen en una superdiagonal (por ejemplo, k=1), hacemos lo siguiente:
v = [2 1 -1 -2 -5];
D1 = diag(v, 1);El resultado será una matriz de tamaño (length(v)+abs(k)) x (length(v)+abs(k)). En este caso, (5+1) x (5+1) = 6x6:
D1 =
0 2 0 0 0 0
0 0 1 0 0 0
0 0 0 -1 0 0
0 0 0 0 -2 0
0 0 0 0 0 -5
0 0 0 0 0 0De manera similar, para una subdiagonal (por ejemplo, k=-2):
v_sub = [10 20 30];
D_sub = diag(v_sub, -2);Esto crearía una matriz (3+2) x (3+2) = 5x5 con los elementos de v_sub en la segunda subdiagonal.

D_sub =
0 0 0 0 0
0 0 0 0 0
10 0 0 0 0
0 20 0 0 0
0 0 30 0 0Extrayendo Diagonales Secundarias de una Matriz
Para extraer una diagonal secundaria de una matriz existente, el proceso es análogo. Supongamos que tenemos una matriz M:
M = magic(5); % Crea una matriz mágica 5x5
% M =
% 17 24 1 8 15
% 23 5 7 14 16
% 4 6 13 20 22
% 10 12 19 21 3
% 11 18 25 2 9Para obtener la primera superdiagonal (k=1):
d_super = diag(M, 1);El resultado será:
d_super =
24
7
20
3Y para la primera subdiagonal (k=-1):
d_sub = diag(M, -1);El resultado será:
d_sub =
23
6
19
2La flexibilidad del parámetro k es inmensa para tareas que requieren el análisis o la construcción de matrices con estructuras diagonales específicas.
¿Por Qué son Importantes las Diagonales de las Matrices? Aplicaciones Prácticas
Las diagonales de las matrices, y especialmente las matrices diagonales, tienen una importancia capital en diversas áreas:
- Sistemas de Ecuaciones Lineales: Resolver un sistema de ecuaciones donde la matriz de coeficientes es diagonal es trivial, ya que cada ecuación se desacopla de las demás. En muchos algoritmos numéricos, se busca transformar una matriz en una forma diagonal o casi diagonal para simplificar el cálculo.
- Transformaciones Lineales: Las matrices diagonales representan transformaciones de escalado a lo largo de los ejes de coordenadas. Cada elemento de la diagonal escala una dimensión particular.
- Valores Propios y Vectores Propios: El proceso de diagonalización de una matriz es fundamental en álgebra lineal. Si una matriz puede diagonalizarse, se puede expresar como
A = P D P-1, dondeDes una matriz diagonal que contiene los valores propios deA. Esto es crucial en análisis de estabilidad, mecánica cuántica y procesamiento de señales. - Matrices de Covarianza: En estadística, las matrices de covarianza son simétricas, y sus elementos diagonales representan las varianzas de las variables, mientras que los elementos fuera de la diagonal representan las covarianzas. Trabajar con la diagonal es clave para entender la variabilidad individual de cada variable.
- Gráficos y Redes: En la teoría de grafos, la matriz de adyacencia puede tener ceros en la diagonal si no se permiten bucles, o el grado de un nodo puede estar relacionado con la suma de los elementos de su fila o columna, y en algunos casos, con la diagonal de una matriz de grados.
Estas son solo algunas de las razones por las que la manipulación de diagonales es una habilidad esencial en el manejo de matrices.
Preguntas Frecuentes sobre las Diagonales en Matlab
¿Cómo determinar si una matriz es diagonal en Matlab?
Una matriz es diagonal si todos sus elementos fuera de la diagonal principal son cero. Para verificar esto en Matlab, podemos extraer la diagonal principal y luego construir una nueva matriz diagonal con esos elementos. Si esta nueva matriz es idéntica a la original, entonces la matriz es diagonal.
M_ejemplo = [5 0 0; 0 8 0; 0 0 12];
M_no_diag = [1 2 3; 0 4 0; 0 0 5];
es_diagonal_M_ejemplo = isequal(M_ejemplo, diag(diag(M_ejemplo))); % true (1)
es_diagonal_M_no_diag = isequal(M_no_diag, diag(diag(M_no_diag))); % false (0)La función isequal compara dos arrays o estructuras para determinar si son idénticos. diag(diag(M)) toma la diagonal principal de M y luego la usa para construir una matriz diagonal. Si M es verdaderamente diagonal, entonces esta operación la reconstruirá exactamente.

¿Cuál es la diferencia entre diag, triu y tril?
Aunque todas estas funciones están relacionadas con las estructuras de las matrices, cumplen roles distintos:
diag(A): Extrae solo los elementos de una diagonal específica (por defecto, la principal) y los devuelve como un vector. Si se usa con un vectorv(diag(v)), crea una matriz diagonal.triu(A): Devuelve la matriz triangular superior deA, es decir, todos los elementos en la diagonal principal y por encima de ella, con los elementos por debajo de la diagonal puestos a cero.tril(A): Devuelve la matriz triangular inferior deA, es decir, todos los elementos en la diagonal principal y por debajo de ella, con los elementos por encima de la diagonal puestos a cero.
Aquí hay una tabla comparativa para mayor claridad:
| Función | Propósito | Ejemplo (con A = [1 2 3; 4 5 6; 7 8 9]) |
|---|---|---|
diag(A) | Extrae la diagonal principal como vector. | [1; 5; 9] |
diag(A, k) | Extrae la diagonal k como vector. | diag(A, 1) → [2; 6] |
diag(v) | Crea matriz diagonal con v en la principal. | diag([1 2 3]) → [1 0 0; 0 2 0; 0 0 3] |
triu(A) | Devuelve la parte triangular superior. | [1 2 3; 0 5 6; 0 0 9] |
tril(A) | Devuelve la parte triangular inferior. | [1 0 0; 4 5 0; 7 8 9] |
¿Qué ocurre si intento extraer una diagonal que no existe (k muy grande o muy pequeño)?
Si intentas extraer una diagonal de una matriz M usando diag(M, k) y la diagonal especificada por k no contiene ningún elemento (es decir, k es demasiado grande o demasiado pequeño para las dimensiones de la matriz), Matlab devolverá un vector vacío []. Esto es un comportamiento esperado y no un error, lo que permite manejar casos límite de forma elegante en tus scripts.
Por ejemplo, para una matriz 3x3, si intentas diag(M, 3) o diag(M, -3), obtendrás un vector vacío porque esas diagonales están fuera de los límites de la matriz.
De manera similar, si usas diag(v, k) con un vector vacío v = [], o si el k es tan grande que no puede formarse una diagonal con los elementos del vector en una matriz significativa, la función puede devolver una matriz de ceros de dimensiones apropiadas para el contexto, o un resultado vacío si el vector de entrada se vuelve efectivamente vacío para esa diagonal.
Conclusión
La función diag es una de las herramientas más versátiles y fundamentales en Matlab para la manipulación de matrices. Su doble funcionalidad, que permite tanto extraer diagonales como construir matrices a partir de vectores, junto con la flexibilidad del parámetro k para especificar diagonales secundarias, la convierte en un pilar para cualquier tarea que involucre álgebra lineal computacional. Desde la simple inspección de una matriz hasta la construcción de modelos complejos, dominar diag te equipará con una habilidad esencial para optimizar tus cálculos y análisis en el potente entorno de Matlab. Esperamos que este artículo te haya proporcionado una comprensión profunda y práctica de esta crucial función.
Si quieres conocer otros artículos parecidos a Dominando la Diagonal de Matrices en Matlab puedes visitar la categoría Matemáticas.
