En esta guía se desarrollará las operaciones con matrices. Es decir, la matemática desarrollada en los cursos de álgebra lineal. Adicionalmente se realiza la gráfica de la determinante de una matriz, la cual es el área del paralelogramo formado por la suma de vetores.

OPERACIONES BÁSICAS.

En la siguiente tabla se mostrará la sintaxis de las operaciones básicas.

OPERACIÓN SINTAXIS
Adición +
Sustracción -
Multiplicación por un escalar *
Producto de Matrices %*%
Potencia de una matriz mtx.exp()

A continuación definimos las matrices que nos servirán para desarrollar los ejemplos:

# Definiendo la Matriz A:
A<-matrix(1:9, nrow = 3, byrow = TRUE)
A
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6
## [3,]    7    8    9
# Para definir la matriz B:
a<-c(4,5,4)       # El primer vector.
b<-c(3,4,4)       # El segundo vector.
d<-c(8,7,7)       # El tercer vector.

B<-rbind(a,b,d)    # La matriz B.
B
##   [,1] [,2] [,3]
## a    4    5    4
## b    3    4    4
## d    8    7    7

Si se desea calcular la adición de matrices se tendría que usar el comando +.

M1<-A+B        # Suma de matrices.
M1
##   [,1] [,2] [,3]
## a    5    7    7
## b    7    9   10
## d   15   15   16

Definimos a la matriz M1 como la adición de las matrices A+B.

Para la sustracción de matrices se usará el comando -.

M2<-A-B        # Sustracción de matrices.
M2
##   [,1] [,2] [,3]
## a   -3   -3   -1
## b    1    1    2
## d   -1    1    2

Si deseamos calcular la multiplicación de una matriz con un escalar, se usará el comando *.

M3<-4*A        # Multiplicación por un escalar.
M3
##      [,1] [,2] [,3]
## [1,]    4    8   12
## [2,]   16   20   24
## [3,]   28   32   36

Lo que se hizo es multiplicar a la matriz A por el escalar 4.

Unas de las operaciones más importantes es la multiplicación de matrices. Para esto es necesario usar el comando %*%.

AB<-A%*%B      # Multiplicación de matrices.
AB
##      [,1] [,2] [,3]
## [1,]   34   34   33
## [2,]   79   82   78
## [3,]  124  130  123

Es importante recordar que no es lo mismo premultiplicar y postmultiplicar. Ya que se obtendrían resultados distintos. Así mismo, sólo se pueden multiplicar matrices en las cuales el número de filas de la primera matriz sea igual al número de columnas de la segunda matriz.

Para el caso de la potencia de una matriz, se puede usar el comando anterior, pero sólo si se desea obtener de orden 2. Si se desea a un exponente mayor se tendría que escribir las veces que se desea menos 1 el comando %*%. Pero eso sería ineficiente. Veamos unos ejemplos.

A2<-A%*%A     # Para calcular el cuadrado de la matriz A.
A2
##      [,1] [,2] [,3]
## [1,]   30   36   42
## [2,]   66   81   96
## [3,]  102  126  150

Entonces si se desea la matriz A al cubo, se tendría que usar dos veces (3-1) el comando %*%, la sintaxis sería así.

A3<-A%*%A%*%A   # Para calcular la matriz cubica de A.
A3
##      [,1] [,2] [,3]
## [1,]  468  576  684
## [2,] 1062 1305 1548
## [3,] 1656 2034 2412

Pero como se señalo este procedemiento sería ineficiente si se desea un exponente alto, por ejemplo 8.

Para solucionar esto, instalaremos el paquete “Biodem”.

install.packages("Biodem")

Y cargamos el paquete:

library(Biodem)

Una vez cargado usamos el comando mtx.exp(). Que tiene la siguiente sintaxis.

mtx.exp(X, n)

Donde X es la matriz que se desea elevar a la potencia, y n es el orden del exponente. Si deseamos calcular la matriz A al cuadrado, se tendría que realizar la siguiente sintaxis.

AA<-mtx.exp(A,2)  # La matriz A elevado al cuadrado.

# Comprobemos si es igual al hallado con el comando %*%.
AA==A2
##      [,1] [,2] [,3]
## [1,] TRUE TRUE TRUE
## [2,] TRUE TRUE TRUE
## [3,] TRUE TRUE TRUE

En efecto, las dos matrices son iguales.

Ahora, si deseamos elevar la matriz al exponente 8.

A8<-mtx.exp(A,8)   # La matriz A elevado a la 8.
A8
##            [,1]       [,2]       [,3]
## [1,]  510008400  626654232  743300064
## [2,] 1154967822 1419124617 1683281412
## [3,] 1799927244 2211595002 2623262760

ÁLGEBRA LINEAL DE MATRICES.

Ahora entrarenos a las operaciones que se realizan en cualquier curso básico de álgebra lineal. En la siguiente tabla se muestras las operaciones que se desarrollarán.

OPERACIÓN SINTAXIS
Transpuesta t()
Diagonal diag()
Traza sum(diag())
Determinante det()
Inversa solve()
Descomposición qr()
Rango qr()$rank
Descomposición de cholesky chol()
Varianza var()

Al igual que en las operaciones anteriores, se usarán de ejemplos las matrices A y B.

Para calcular la transpuesta usaremos el comando t().

A.t<-t(A)    # La transpuesta de la matriz A.
A.t
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9

Definimos al vector A.t como la transpuesta de la matriz A. Como usted sabe, lo que se hizo fue cambiar filas por columnas.

Si se dese la diagonal de la matriz se usa el comando diag().

A.d<-diag(A)   # La Diagonal de la matriz.
A.d
## [1] 1 5 9

Como se sabe la traza de una matriz es la suma de elementos de la diagonal de la matriz. Por tanto, se podrá calcular a la traza, como sigue:

A.tz<-sum(diag(A))    # Traza de la matriz A.
A.tz
## [1] 15

como ya se vio en anteriores guías el comando sum(), lo que hace es sumar los elementos del vector.

Otra de las operaciones importantísimas en álgebra lineal es la determinante de la matriz. Para ello se usará el comando `det().

B.d<-det(B)    # Determinante de la matriz B.
B.d
## [1] 11

Recordar que para poder calcular la determinante de una matriz, esta debe de ser cuadrada.

En la parte final de esta guía se podrá observar la gráfica de la determinante de una matriz.

Para el caso de la inversa de la matriz se usará el comando solve().

B.i<-solve(B)   # Inversa de la matriz B.
B.i
##                  a          b           d
## [1,] -1.110223e-16 -0.6363636  0.36363636
## [2,]  1.000000e+00 -0.3636364 -0.36363636
## [3,] -1.000000e+00  1.0909091  0.09090909

Recordar que para poder hallar la inversa de la matriz, el rango de la matriz tiene que ser completo, es decir, determinante diferente de cero. A estas matrices se las llama matrices no singulares.

Si usted desea calcular la descomposición de la matriz, que también es llamado factorización, se usará el comando qr().

qr(B)        # Factorización de la matriz B.
## $qr
##         [,1]       [,2]       [,3]
## a -9.4339811 -9.3279813 -8.9039822
## b  0.3179994 -1.7288042 -1.1243727
## d  0.8479983 -0.8863823  0.6744533
## 
## $rank
## [1] 3
## 
## $qraux
## [1] 1.4239992 1.4629541 0.6744533
## 
## $pivot
## [1] 1 2 3
## 
## attr(,"class")
## [1] "qr"

Si usted se ha podido dar cuenta, al usar el anterior comando uno de los resultados es $rank que representa el rango de la matriz. Por tanto, si se desea calcular el rango de la matriz se usa el comando qr()$rank.

qr(B)$rank     # Rango de la matriz B.
## [1] 3
qr(A)$rank
## [1] 2

Si puede observar la matriz A es una matriz singular. Ya que tiene rango igual a 2.

Para calcular la descomposición de cholesky, se usará el comando chol(). Recordar que sólo se puede factorizar a la manera de Cholesky si la matriz es simétrica y definida positiva.

Ninguna de las matrices (A o B) cumplen estas condiciones. Por tanto, no se puede calcular la descomposición de Cholesky. Tendremos que definir una matriz que cumpla tales condiciones

# Definiendo la matriz C.
C<-matrix(c(2,3,3,7), nrow = 2)
C
##      [,1] [,2]
## [1,]    2    3
## [2,]    3    7
chol(C)   # Factorización a lo Cholesky.
##          [,1]     [,2]
## [1,] 1.414214 2.121320
## [2,] 0.000000 1.581139

Por último, para calcular la matriz de varianzas y covarianza se usará el comando var().

var(B)    # Matriz de varianzas de B.
##      [,1]     [,2] [,3]
## [1,]  7.0 4.000000  4.5
## [2,]  4.0 2.333333  2.5
## [3,]  4.5 2.500000  3.0

Lo que se muestra en la diagonal son las varianzas y lo que está en la triángulo superior e inferior son las covarianzas.

SOLUCIÓN A SISTEMAS DE ECUACIONES.

Por ejemplo, si tenemos el siguiente problema matemático:

\(2x+3y=1\)

\(3x-7y=2\)

Para poder desarrollarlo se puede hacer uso del cálculo matricial, lo que se tendrá que hacer es convertir las dos ecuaciones en matrices.

\(\begin{pmatrix} 2 & 3\\ 3 & -7 \end{pmatrix}\) \(\begin{pmatrix} x \\ y \end{pmatrix}\) \(=\) \(\begin{pmatrix} 1\\2 \end{pmatrix}\)

Las matrices que nos interesan son la primera y la tercera. Las creamos.

# La primera matriz.
D<-matrix(c(2,3,3,-7), nrow = 2, byrow = TRUE)
D
##      [,1] [,2]
## [1,]    2    3
## [2,]    3   -7
# La segunda Matriz.
v<-matrix(1:2, ncol = 1)
v
##      [,1]
## [1,]    1
## [2,]    2

Como se puede ver las matrices son iguales a las de las ecuaciones.

Para poder obtener respuesta se hace uso del comando solve()

solucion<-solve(D,v)    # Para solucionar el sistema de ecuaciones.
solucion
##             [,1]
## [1,]  0.56521739
## [2,] -0.04347826

En efecto, los valores de x y y se han podido calcularlos.

dimnames(solucion)<-list(c("x", "y"), NULL)
solucion
##          [,1]
## x  0.56521739
## y -0.04347826

Ahora se puede ver más claro.

VALORES Y VECTORES PROPIOS.

Si usted desea calcular, los valores y vectores propios de una matriz tendrá que usar el comando eigen().

Se calculará los valores y vectores propios de la matriz C, la que se usó para la factorización a lo cholesky.

eigen(C)     # Para el cálculo de valores y vectores propios.
## eigen() decomposition
## $values
## [1] 8.4051248 0.5948752
## 
## $vectors
##           [,1]       [,2]
## [1,] 0.4241554 -0.9055894
## [2,] 0.9055894  0.4241554

Si sólo desea los valores propios se tendría que usar el comando eigen()$values, así mismo, si sólo deseo los vectores propios, el comando eigen()$vectors se tendría que usar.

eigen(C)$values  # Sólo para los valores propios.
## [1] 8.4051248 0.5948752
eigen(C)$vectors # Sólo para los vectores propios.
##           [,1]       [,2]
## [1,] 0.4241554 -0.9055894
## [2,] 0.9055894  0.4241554

Como se puede dar cuenta, la matriz C es definida positivo, por lo cual se pudo realizar la factorización de Cholesky.

GRÁFICA DEL DETERMINANTE DE UNA MATRIZ DE 2X2.

Es sabido que si se tiene una matriz de 2x2 la determinane será el área formada por el paralelogramo de la suma los dos vectores columna.

Se tendrá la siguiente matriz:

H<-matrix(c(3,8,10,2), nrow = 2)
H
##      [,1] [,2]
## [1,]    3   10
## [2,]    8    2

Como se puede ver el primer vector columna es c(3,8) y el segundo es c(10,2).

El gráfico de la determinante se muestra a continuación:

# Para graficar el primer vector (vector m):
plot(3,8, xlim=c(0,14), ylim=c(0,12), 
     xlab="Eje x", ylab="Eje y", lwd=3,
     col="blue", bty="n", 
     main = "Gráfica de la Determinante de la matriz H")
axis(side = 1, 0:14)
axis(side = 2, 0:12)
arrows(0,0,3,8,col="blue")
abline(h = pretty(0:12, 12), v = pretty(0:14, 14), col = "lightgray")

# Para graficar el segundo vector (vector p):
points(10,2,lwd=3,col="green")
arrows(0,0,10,2,col="green")

# Para graficar el vector resultante de la adición de los 2 vectores (a=m+p)
points(13,10,lwd=3,col="black")
arrows(0,0,13,10,col="black")

# Agregando las líneas imaginarias par formar el paralelogramo que representa la adición de 2 vectores.
arrows(3,8,13,10,col="blue",lty=3)
arrows(10,2,13,10,col="green",lty=3)

# Graficando el área.
polygon(c(0,3,13,10),c(0,8,10,2),
        col = rgb(0, 206/255, 209/255, 0.5),
        density = c(20, 40), angle = c(-45, 45))
text(6.3,5.3, "DETERMINANTE \n DE LA \n MATRIZ H", col = "brown")

Si usted realiza el cálculo a través de un método geométrico, le saldrá que el área es de 74. Para comprobarlo, veamos cuánto es el determinante de la matriz H.

det(H)
## [1] -74

En efecto, los resultados son iguales. Ya que el área es el valor absoluto del determinante.

En la siguiente guía se desarrollará el tema de manipulación de caracteres.