Main Content

La traducción de esta página está obsoleta. Haga clic aquí para ver la última versión en inglés.

Matrices en el entorno MATLAB

Este tema contiene una introducción a la creación de matrices y la realización de cálculos de matrices básicos en MATLAB®.

El entorno MATLAB utiliza el término matriz para indicar una variable que contiene números reales o complejos dispuestos en una cuadrícula bidimensional. Un arreglo es, más generalmente, un vector, una matriz o una cuadrícula de números de más dimensiones. Todos los arreglos de MATLAB son rectangulares. Esto quiere decir que los vectores que lo componen a lo largo de cualquier dimensión tienen todos la misma longitud. Las operaciones matemáticas que se definen en matrices conforman la temática del álgebra lineal.

Creación de matrices

MATLAB tiene múltiples funciones que crean diferentes tipos de matrices. Por ejemplo, puede crear una matriz simétrica con entradas basadas en el triángulo de Pascal:

A = pascal(3)
A =
       1     1     1
       1     2     3
       1     3     6

O bien, puede crear una matriz del cuadrado mágico asimétrica, cuyas filas y columnas sumen lo mismo:

B = magic(3)
B =
       8     1     6
       3     5     7
       4     9     2

Otro ejemplo es una matriz rectangular de 3 por 2 de números enteros aleatorios. En este caso, la primera entrada en randi describe el rango de posibles valores para los enteros, y las segundas dos entradas describen la cantidad de filas y columnas.

C = randi(10,3,2)
C =

     9    10
    10     7
     2     1

Un vector columna es una matriz de m por 1, un vector fila es una matriz de 1 por n y un escalar es una matriz de 1 por 1. Para definir una matriz de forma manual, use corchetes [ ] para indicar el inicio y el final del arreglo. Dentro de los corchetes, use un punto y coma ; para indicar el final de una fila. En el caso de un escalar (matriz de 1 por 1), los corchetes no son necesarios. Por ejemplo, estas instrucciones producen un vector columna, un vector fila y un escalar:

u = [3; 1; 4]

v = [2 0 -1]

s = 7
u =
       3
       1
       4

v =
       2     0    -1

s =
       7

Para obtener más información sobre la creación y el trabajo con matrices, consulte Crear, concatenar y ampliar matrices.

Adición y sustracción de matrices

La adición o la sustracción de matrices y arreglos se lleva a cabo elemento por elemento. Por ejemplo, si se suma A y B, y luego se sustrae A del resultado, se recupera B:

X = A + B
X =
       9     2     7
       4     7    10
       5    12     8
Y = X - A
Y =
       8     1     6
       3     5     7
       4     9     2

Tanto la adición como la sustracción requieren que ambas matrices tengan dimensiones compatibles. Si las dimensiones son incompatibles, se produce un error:

X = A + C
Error using  + 
Matrix dimensions must agree.

Para obtener más información, consulte Operaciones con matrices y operaciones con arreglos.

Productos y trasposición de vectores

Un vector fila y un vector columna de la misma longitud se pueden multiplicar en cualquier orden. El resultado es un escalar, conocido como producto interno, o una matriz, conocida como producto externo:

u = [3; 1; 4];
v = [2 0 -1];
x = v*u
x =

     2
X = u*v
X =

     6     0    -3
     2     0    -1
     8     0    -4

En el caso de matrices reales, la operación de trasposición intercambia aij y aji. En el caso de matrices complejas, también se debe decidir si tomar o no el conjugado complejo de entradas complejas del arreglo para formar la trasposición conjugada compleja. MATLAB utiliza el operador apóstrofo (') para realizar una trasposición conjugada compleja, y el operador punto y apóstrofo (.') para trasponer sin conjugación. En el caso de las matrices que contienen solo elementos reales, los dos operadores devuelven el mismo resultado.

La matriz de ejemplo A = pascal(3) es simétrica y por lo tanto A' es igual a A. Sin embargo, B = magic(3) no es simétrica, por lo que los elementos de B' se reflejan a lo largo de la diagonal principal:

B = magic(3)
B =

     8     1     6
     3     5     7
     4     9     2
X = B'
X =

     8     3     4
     1     5     9
     6     7     2

En el caso de los vectores, la trasposición convierte un vector fila en un vector columna (y viceversa):

x = v'

x =
       2
       0
      -1

Si tanto x como y son vectores columna reales, entonces, el producto x*y no está definido, pero los dos productos

x'*y

y

y'*x

producen el mismo resultado escalar. Esta cantidad se utiliza con tanta frecuencia que tiene tres nombres diferentes: producto interno, producto escalar o producto punto. Incluso existe una función dedicada para productos punto llamada dot.

Para obtener un vector o matriz complejo, z, la cantidad z' no solo traspone el vector o la matriz, sino que también convierte cada elemento complejo en su conjugado complejo. Es decir, el signo de la parte imaginaria de cada elemento complejo cambia. Por ejemplo, considere la matriz compleja

z = [1+2i 7-3i 3+4i; 6-2i 9i 4+7i]
z =

   1.0000 + 2.0000i   7.0000 - 3.0000i   3.0000 + 4.0000i
   6.0000 - 2.0000i   0.0000 + 9.0000i   4.0000 + 7.0000i

La trasposición conjugada compleja de z es:

z'
ans =

   1.0000 - 2.0000i   6.0000 + 2.0000i
   7.0000 + 3.0000i   0.0000 - 9.0000i
   3.0000 - 4.0000i   4.0000 - 7.0000i

La trasposición compleja no conjugada, donde la parte imaginaria de cada elemento conserva su signo, se indica mediante z.':

z.'
ans =

   1.0000 + 2.0000i   6.0000 - 2.0000i
   7.0000 - 3.0000i   0.0000 + 9.0000i
   3.0000 + 4.0000i   4.0000 + 7.0000i

Para los vectores complejos, el producto escalar x'*y y el producto escalar y'*x son conjugados complejos entre sí. El producto escalar x'*x de un vector complejo consigo mismo es real.

Multiplicación de matrices

La multiplicación de matrices se define de una forma que refleja la composición de las transformaciones lineales subyacentes y permite una representación compacta de sistemas de ecuaciones lineales simultáneas. El producto matricial C = AB está definido cuando la dimensión de columna de A es igual a la dimensión de fila de B, o cuando una de ellas es un escalar. Si A es m por p y B es p por n, su producto C es m por n. En realidad, el producto puede definirse a través de bucles for, notación de colon (dos puntos) y productos punto de vectores de MATLAB:

A = pascal(3);
B = magic(3);
m = 3; 
n = 3;
for i = 1:m
     for j = 1:n
        C(i,j) = A(i,:)*B(:,j);
     end
end

MATLAB utiliza un asterisco para expresar la multiplicación de matrices, como en C = A*B. La multiplicación de matrices no es conmutativa, es decir, comúnmente, A*B no es igual a B*A:

X = A*B
X =
      15    15    15
      26    38    26
      41    70    39
Y = B*A
Y =
      15    28    47
      15    34    60
      15    28    43

Una matriz se puede multiplicar a la derecha por un vector columna y a la izquierda por un vector fila:

u = [3; 1; 4];
x = A*u
x =

     8
    17
    30
v = [2 0 -1];
y = v*B
y =

    12    -7    10

Las multiplicaciones de matrices rectangulares deben satisfacer las condiciones de compatibilidad dimensional: En vista de que A es de 3 por 3 y C es de 3 por 2, puede multiplicarlas para obtener un resultado de 3 por 2 (la dimensión interior común se cancela):

X = A*C
X =

    24    17
    47    42
    79    77

Sin embargo, la multiplicación no funciona en el orden inverso:

Y = C*A
Error using  * 
Incorrect dimensions for matrix multiplication. Check that the number of columns 
in the first matrix matches the number of rows in the second matrix. To perform 
elementwise multiplication, use '.*'.

Puede multiplicar cualquier cosa con un escalar:

s = 10;
w = s*y
w =

   120   -70   100

Cuando multiplica un arreglo por un escalar, el escalar implícitamente se expande para adoptar el mismo tamaño que la otra entrada. A menudo, esto se conoce como expansión escalar.

Matriz identidad

La notación matemática generalmente aceptada utiliza la letra mayúscula I para nombrar a las matrices identidad, es decir, matrices de diversos tamaños con unos en la diagonal principal y ceros en los demás lugares. Estas matrices tienen la propiedad de que AI = A y IA = A siempre que las dimensiones sean compatibles.

La versión original de MATLAB no podía usar I para este fin, ya que no distinguía entre mayúsculas y minúsculas. Además, i ya servía como subíndice y como la unidad imaginaria. Por lo tanto, se introdujo un juego de palabras del idioma inglés. La función

eye(m,n)

devuelve una matriz identidad rectangular de m por n, mientras que eye(n) devuelve una matriz identidad cuadrada de n por n.

Inversa de la matriz

Si una matriz A es cuadrada y no singular (determinante distinto de cero), entonces, las ecuaciones AX = I y XA = I tienen la misma solución X. Esta solución se denomina la inversa de A y se indica mediante A-1. Tanto la función inv como la expresión A^-1 calculan la inversa de la matriz.

A = pascal(3)
A =
       1     1     1
       1     2     3
       1     3     6
X = inv(A)
X =

    3.0000   -3.0000    1.0000
   -3.0000    5.0000   -2.0000
    1.0000   -2.0000    1.0000
A*X
ans =

    1.0000         0         0
    0.0000    1.0000   -0.0000
   -0.0000    0.0000    1.0000

El determinante calculado por la función det es una medida del factor de escalado de la transformación lineal descrita por la matriz. Cuando el determinante es exactamente cero, la matriz es singular y no existe la inversa.

d = det(A)
d =

     1

Algunas matrices son casi singulares y, pese al hecho de que existe una matriz inversa, el cálculo es susceptible de devolver errores numéricos. La función cond calcula el número de condición para la inversión, lo que indica el grado de precisión de los resultados de la inversión de la matriz. El número de condición oscila desde 1 para una matriz numéricamente estable hasta Inf para una matriz singular.

c = cond(A)
c =

   61.9839

Rara vez es necesario formar la inversa explícita de una matriz. A la hora de resolver el sistema de ecuaciones lineales Ax = b, con frecuencia se utiliza erróneamente la función inv. La mejor forma de resolver esta ecuación, desde el punto de vista del tiempo de ejecución y de la precisión numérica, es usando el operador de barra invertida x = A\b de la matriz. Para obtener más información, consulte mldivide.

Producto tensorial de Kronecker

El producto de Kronecker, kron(X,Y), de dos matrices es la matriz de mayor tamaño que se obtiene a partir de todos los productos posibles de los elementos de X con los elementos de Y. Si la matriz X es m por n, y la matriz Y es p por q, entonces kron(X,Y) es mp por nq. Los elementos están dispuestos de manera tal que cada elemento de X se multiplica por la matriz Y completa:

[X(1,1)*Y  X(1,2)*Y  . . .  X(1,n)*Y
                     . . .
 X(m,1)*Y  X(m,2)*Y  . . .  X(m,n)*Y]

El producto de Kronecker a menudo se utiliza con matrices de ceros y unos para crear copias repetidas de matrices pequeñas. Por ejemplo, si X es la matriz de 2 por 2

X = [1   2
     3   4]

e I = eye(2,2) es la matriz identidad de 2 por 2, entonces:

kron(X,I)
ans =

     1     0     2     0
     0     1     0     2
     3     0     4     0
     0     3     0     4

y

kron(I,X)
ans =

     1     2     0     0
     3     4     0     0
     0     0     1     2
     0     0     3     4

Además de la función kron, también sirven para replicar arreglos las funciones repmat, repelem y blkdiag.

Normas de vectores y matrices

La norma-p de un vector x,

xp=(|xi|p)1p,

se calcula mediante norm(x,p). La operación está definida para cualquier valor de p > 1, pero los valores más comunes de p son 1, 2 e ∞. El valor por defecto es p = 2, que corresponde a la longitud euclidiana o la magnitud del vector:

v = [2 0 -1];
[norm(v,1) norm(v) norm(v,inf)]
ans =

    3.0000    2.2361    2.0000

La norma-p de una matriz A,

Ap=maxxAxpxp,

se puede calcular para p = 1, 2, e ∞ usando norm(A,p). Nuevamente, el valor predeterminado es p = 2:

A = pascal(3);
[norm(A,1) norm(A) norm(A,inf)]
ans =

   10.0000    7.8730   10.0000

Cuando desee calcular la norma de cada fila o columna de una matriz, puede usar vecnorm:

vecnorm(A)
ans =

    1.7321    3.7417    6.7823

Uso de multiprocesos con funciones de álgebra lineal

MATLAB admite multiprocesos computacionales para varias funciones de álgebra lineal y funciones numéricas que actúan elemento por elemento. Estas funciones se ejecutan automáticamente en varios procesos. Para que una función o expresión se ejecute más rápido en varias CPU, se deben cumplir una serie de condiciones:

  1. La función debe realizar operaciones que se dividan fácilmente en secciones ejecutadas de manera simultánea. Estas secciones se deben poder ejecutar con poca comunicación entre los procesos. Además, estas deben requerir pocas operaciones secuenciales.

  2. El tamaño de los datos debe ser lo suficientemente grande para que cualquier ventaja propia de la ejecución simultánea justifique el tiempo que se requiere para dividir los datos y administrar procesos de ejecución separados. Por ejemplo, la mayoría de las funciones se acelera solo cuando el arreglo contiene varios miles de elementos o más.

  3. La operación no debe estar limitada por la memoria; el tiempo de procesamiento no debe estar dominado por el tiempo de acceso de la memoria. Como regla general, las funciones complicadas se aceleran más que las funciones simples.

Los operadores de multiplicación de matrices (X*Y) y potencia de matrices (X^p) muestran un importante aumento de la velocidad en arreglos de doble precisión de gran tamaño (del orden de diez mil elementos). Las funciones de análisis de matrices det, rcond, hess y expm también muestran un incremento significativo de la velocidad en arreglos de doble precisión de gran tamaño.

Temas relacionados