27/05/24
Abstract
En Rpubs:: toc se pueden ver otros documentos de posible interés.
library(matlib) # Dibujar un vector en 2D
library(rgl) # Dibujar un vector en 3D
Un vector es un conjunto ordenado de números. Ejemplos:
\[\mathbf{u} \; = \; \begin{bmatrix} 4 \\ 2 \end{bmatrix}, \qquad\mathbf{v} \; = \; \begin{bmatrix} 1 \\ 3 \end{bmatrix}, \qquad \mathbf{v}_1 \; = \; \begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix}\]
Ejemplo para generar un vector en R.
Primera forma: con la función c
de concatenación.
# Vector en R
u <- c(4, 2)
v <- c(1, 3)
Segunda forma: con la función matrix
.
v1 <- matrix(c(1, 2, 3), nrow = 3); v1
## [,1]
## [1,] 1
## [2,] 2
## [3,] 3
Una matriz es una tabla de números organizados en filas y columnas. Ejemplos:
\[M_1 \; = \; \begin{bmatrix} 1 & 3 &5\\ 2 & 4 & 6\end{bmatrix}, \qquad M_2 \; = \; \begin{bmatrix} 1 & 4 \\ 2 & 5\\ 3& 6 \end{bmatrix}, \qquad A \; = \; \begin{bmatrix} 1 & 3 \\ 2 & 4 \end{bmatrix}, \qquad B \; = \; \begin{bmatrix} 5 & 7 \\-6 & 1 \end{bmatrix}, \qquad C \; = \; \begin{bmatrix} -1 & 3 \\2 & 4 \end{bmatrix}\]
Ejemplo para generar las matrices anteriores en R:
M1 <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2); M1
## [,1] [,2] [,3]
## [1,] 1 3 5
## [2,] 2 4 6
M2 <- matrix(c(1, 2, 3, 4, 5, 6), ncol = 2); M2
## [,1] [,2]
## [1,] 1 4
## [2,] 2 5
## [3,] 3 6
A <- matrix(c(1, 2, 3, 4), ncol = 2); A
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
B <- matrix(c(5, -6, 7, 1), ncol = 2); B
## [,1] [,2]
## [1,] 5 7
## [2,] -6 1
C <- matrix(c(-1, 2, 3, 4), ncol = 2); C
## [,1] [,2]
## [1,] -1 3
## [2,] 2 4
De una matriz.
La transpuesta de una matriz es una operación que involucra cambiar las filas por columnas y las columnas por filas. La matriz transpuesta \(A^T\) de \(A\) es: \[A^T \; = \; \begin{bmatrix} 1 & 3 \\ 2 & 4 \end{bmatrix}^T \; = \; \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}\]
En R, la transpuesta de \(A\) se genera así:
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
De un vector.
Se define de manera análoga.
\[u^T \; = \; \begin{bmatrix} 4 \\ 2 \end{bmatrix}^T \; = \; \begin{bmatrix} 4 & 2 \end{bmatrix}, \qquad v_1^T \; = \; \begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix}^T \; = \; \begin{bmatrix} 1 & 2 &3\end{bmatrix}\]
En R, por ejemplo, la transpuesta de \(v\) se genera así:
## [,1] [,2] [,3]
## [1,] 1 2 3
Gráficamente, dos vectores \(u\) y \(v\) (y su suma) se pueden visualizar en el plano como se muestra en la figura de abajo.
library(matlib)
# Configurando el gráfico
xlim <- c(0,6)
ylim <- c(0,6)
par(mar=c(3,3,1,1)+.1)
plot(xlim, ylim, type="n", xlab="X", ylab="Y", asp=1)
grid()
# Definiendo algunos vectores
u=c(4,2)
v=c(1,3)
# Graficando los vectores
vectors(v, labels="v", pos.lab=4, frac.lab=.5, col="darkgreen")
vectors(u, labels="u", pos.lab=4, frac.lab=.5, col="darkblue")
# vector u+v se obtiene comenzando desde u hasta v
vectors(u+v, labels="u+v", pos.lab=4, frac.lab=.5, col="red")
# vector v comenzando desde u hasta u+v
vectors(u+v, labels="v", pos.lab=4, frac.lab=.5, origin=u, col="lightgreen")
# vector u comenzando desde v hasta u+v
vectors(u+v, labels="u", pos.lab=4, frac.lab=.5, origin=v, col="lightblue")
Consideremos los vectores vector \(u\) y \(v\), definidos anteriormente. A continuación, se graficarán en el plano.
Sus gráficas: primera forma
plot(c(0,4),c(0,2), xlim = c(0,5), ylim = c(0,4), type="n", xlab="X", ylab="Y", asp=1)
arrows(0,0,4,2)
arrows(0,0,1,3)
Sus gráficas: segunda forma
library(matlib)
# Configurando el gráfico
xlim <- c(0,5)
ylim <- c(0,4)
par(mar=c(3,3,1,1)+.1)
plot(xlim, ylim, type="n", xlab="X", ylab="Y", asp=1)
grid()
# Definiendo algunos vectores
u=c(4,2)
v=c(1,3)
# Graficando los vectores
vectors(v, labels="v", pos.lab=4, frac.lab=.5, col="darkgreen")
vectors(u, labels="u", pos.lab=4, frac.lab=.5, col="darkblue")
Consideremos los siguientes vectores y la matriz formada por ellos:
\[ \mathbf{{\color{Pink}X}} \; = \; \begin{bmatrix} 1 \\ 0 \\0\end{bmatrix}, \qquad\mathbf{{\color{Green}Y}} \; = \; \begin{bmatrix} 0 \\ 1 \\ 0\end{bmatrix}, \qquad \mathbf{{\color{Blue}Z}} \; = \; \begin{bmatrix} 0 \\ 0 \\ 1 \end{bmatrix}, \qquad\mathbf{{\color{Orange}W}} \; = \; \begin{bmatrix} 1 \\ 1 \\ 1\end{bmatrix}, \]
\[M \; = \; \begin{bmatrix} \mathbf{{\color{Pink}X}} & \mathbf{{\color{Green}Y}} & \mathbf{{\color{Blue}Z}} & \mathbf{{\color{Orange}W}} \end{bmatrix} \; = \;\begin{bmatrix} {\color{Pink}1} & {\color{Green}0} &{\color{Blue}0} & {\color{Orange}1}\\ {\color{Pink}0} & {\color{Green}1} & {\color{Blue}0} & {\color{Orange}1}\\ {\color{Pink}0} & {\color{Green}0} &{\color{Blue}1} & {\color{Orange}1}\end{bmatrix}\]
En el código de abajo, el objeto vec
es la matriz \(M^T\), donde cada fila representa un vector en 3D.
vec <- rbind(diag(3), c(1,1,1))
rownames(vec) <- c("X", "Y", "Z", "W")
vec
## [,1] [,2] [,3]
## X 1 0 0
## Y 0 1 0
## Z 0 0 1
## W 1 1 1
Se utilizará la librería rgl
para generar vectores 3D en R. En la función vectors3d
que se muestra en el código de abajo, los primeros tres vectores son de color negro y el último vector es de color rojo. El parámetro lwd
establece el grosor de la línea para todos los vectores.
Para abrir un gráfico 3D.
#library(rgl)
open3d()
## wgl
## 1
Para trazar vectores tridimensionales en un espacio 3D.
rgl::plot3d(vec, type = "s", col=c(rep("black",3), "red"), lwd=2)
Para Dibujar el plano XZ (cuya ecuacion es Y=0).
planes3d(0, 0, 1, 0, col="gray", alpha=0.2)
plot3d(c(1,1,0), col="green", lwd=2)
Para mostrar proyecciones del vector unitario W.
segments3d(rbind(c(1,1,1), c(1, 1, 0)))
segments3d(rbind(c(0,0,0), c(1, 1, 0)))
segments3d(rbind(c(1,0,0), c(1, 1, 0)))
segments3d(rbind(c(0,1,0), c(1, 1, 0)))
Para dibujar el paralepípedo.
p1 <- c(0,0,0)
p2 <- c(1,1,0)
p3 <- c(1,1,1)
p4 <- c(1,0,0)
Se definen colores de las líneas que formarán la esquina y se dibujan éstas.
# Definir los colores
color1 <- "red"
color <- "darkgreen"
# Dibujar las líneas que forman la esquina
lines3d(rbind(p1, p2), col = color)
lines3d(rbind(p1, p4), col = color)
lines3d(rbind(p1, p3), col = color1)
lines3d(rbind(p2, p3), col = color)
lines3d(rbind(p2, p4), col = color)
lines3d(rbind(p3, p4), col = color)
Si se tiene múltiples gráficos abiertos y se quiere asegurar de que el gráfico actual esté en la parte superior y sea visible, llamar a esta función
rgl.bringtotop()
Para salvar la gráfica como un archivo html.
htmlwidgets::saveWidget(rglwidget(), file = "3d_vector.html")
El gráfico se visualiza en el archivo html al escribir el siguiente código (fuera del chunk):
<iframe src="3d_vector.html" width="400" height="400"></iframe>
Consideremos la matriz: \[M \; = \; \begin{bmatrix} \mathbf{{\color{Blue}u}} & \mathbf{{\color{Green}v}} \end{bmatrix} \; = \;\begin{bmatrix} {\color{Blue}4} & {\color{Green}1} \\ {\color{Blue}2} & {\color{Green}3}\end{bmatrix}\]
Geométricamente, la matriz \(M\) se puede representar como una región comprendidad entre los vectores \(u\) y \(V\) (como se muetra en la figura de abajo).
library(matlib)
# Configurando el gráfico
xlim <- c(0,5)
ylim <- c(0,4)
par(mar=c(3,3,1,1)+.1)
plot(xlim, ylim, type="n", xlab="X", ylab="Y", asp=1)
grid()
# Definiendo algunos vectores
u <- c(4,2)
v <- c(1,3)
# Graficando los vectores
#vectors(v, labels="v", pos.lab=4, frac.lab=.5, col="darkgreen")
#vectors(u, labels="u", pos.lab=4, frac.lab=.5, col="darkblue")
vectors(v, labels = "", pos.lab = 4, frac.lab = 0.5, col = "darkgreen")
vectors(u, labels = "", pos.lab = 4, frac.lab = 0.5, col = "darkblue")
# Coordenadas de los vértices del triángulo
triangle_vertices <- rbind(c(0.02, 0.01), v+c(0.06,0.05), u+c(0.04,0.06), c(0, 0.02))
# Dibujar el triángulo
polygon(triangle_vertices, col = "pink", border = NA)
# Agregar etiqueta a los vectores
text(v[1] - 0.6, v[2] -1.2, "v", col = "darkgreen", cex = 1.8) # v
text(u[1] - 1.7, u[2] -1, "u", col = "darkblue", cex = 1.8) # u
# Agregar etiqueta a la matriz M
text(1.5, 1.5, "M", col = "red", cex = 1.5) # u
# Posición de la imagen fuera del área
#image_x <- mean(triangle_vertices[, 1]) + 0.5
#image_y <- mean(triangle_vertices[, 2]) + 0.5
image_x <- 2
image_y <- 3
# Cargar la imagen
img <- png::readPNG("MatrizM.png")
# Dibujar la imagen
rasterImage(img, image_x, image_y-0.2, image_x + 3.5, image_y + 0.7, interpolate = FALSE)
\[ D \; = \;C + B \; = \; \begin{bmatrix} -1 & 3 \\2 & 4 \end{bmatrix} \;+\; \begin{bmatrix} 5 & 7 \\-6 & 1 \end{bmatrix} \; = \; \begin{bmatrix} 4 & 10 \\ -4 & 5 \end{bmatrix}\]
# Suma de matrices en R
C + B
## [,1] [,2]
## [1,] 4 10
## [2,] -4 5
Graficamente:
library(matlib)
# Configurando el gráfico
xlim <- c(-1,12)
ylim <- c(-8,7)
par(mar=c(3,3,1,1)+.1)
plot(xlim, ylim, type="n", xlab="X", ylab="Y", asp=1)
grid()
# Definiendo algunos vectores
c1=c(-1,2)
c2=c(3,4)
b1=c(5,-6)
b2=c(7,1)
d1=c1+b1
d2=c2+b2
# Graficando los vectores
vectors(c1, labels="c1", pos.lab=4, frac.lab=.5, col="darkgreen")
vectors(c2, labels="c2", pos.lab=4, frac.lab=.5, col="darkblue")
vectors(b1, labels="b1", pos.lab=4, frac.lab=.5, col="darkgreen")
vectors(b2, labels="b2", pos.lab=4, frac.lab=.5, col="darkblue")
vectors(d1, labels="d1", pos.lab=4, frac.lab=.5, col="lightgreen")
vectors(d2, labels="d2", pos.lab=4, frac.lab=.5, col="lightblue")
Compare el resultado obtenido en el código de abajo con el de \(C+B\).
cbind(d1,d2)
## d1 d2
## [1,] 4 10
## [2,] -4 5
\[ D \; = \;C - B \; = \; \begin{bmatrix} -1 & 3 \\2 & 4 \end{bmatrix} \;-\; \begin{bmatrix} 5 & 7 \\-6 & 1 \end{bmatrix} \; = \; \begin{bmatrix} -6 & -4 \\ 8 & 3 \end{bmatrix}\]
# Diferencia de matrices en R
C - B
## [,1] [,2]
## [1,] -6 -4
## [2,] 8 3
Con un vector.
\[ w \; = \; -2u \; = \; -2 \begin{bmatrix} 4 \\ 2 \end{bmatrix} \; = \; \begin{bmatrix} -8 \\ -4 \end{bmatrix}\] En R:
# Multiplicación por escalar en R
w = -2 * u; w
## [1] -8 -4
Graficamente:
library(matlib)
# Configurando el gráfico
xlim <- c(-9,5)
ylim <- c(-5,3)
par(mar=c(3,3,1,1)+.1)
plot(xlim, ylim, type="n", xlab="X", ylab="Y", asp=1)
grid()
# Definiendo algunos vectores
u=c(4,2)
w = -2*u
# Graficando los vectores
vectors(u, labels="u", pos.lab=4, frac.lab=.5, col="darkgreen")
vectors(w, labels="w", pos.lab=4, frac.lab=.5, col="darkblue")
Con una matriz.
\[2 A \; = \; 2 \begin{bmatrix} 1 & 3 \\ 2 & 4 \end{bmatrix} \; = \; \begin{bmatrix} 2 & 6 \\ 4 & 8 \end{bmatrix}\]
# Multiplicación por escalar en R
2 * A
## [,1] [,2]
## [1,] 2 6
## [2,] 4 8
Para que el producto \(AB\) esté definido, el número de columnas de \(A\) debe ser igual al número de filas de \(B\).
\[AB \; = \; \begin{bmatrix} 1 & 3 \\ 2 & 4 \end{bmatrix} \begin{bmatrix} 5 & 7 \\-6 & 1 \end{bmatrix} \; = \; \begin{bmatrix} -13 & 10 \\-14 & 18 \end{bmatrix}\]
# Producto de matrices en R
prod <- A %*% B
# Imprimir el producto
cat("Producto de A y B:\n")
print(prod)
## Producto de A y B:
## [,1] [,2]
## [1,] -13 10
## [2,] -14 18
El determinante de una matriz cuadrada \(A\) se denota como |\(A\)| o det(\(A\)). \[|A| \; = \; \begin{vmatrix} 1 & 3 \\ 2 & 4 \end{vmatrix} \; = \; -2\]
# Calcular el determinante
det_A <- det(A)
# Imprimir el resultado
cat("Determinante de A:", det_A, "\n")
## Determinante de A: -2
Una matriz cuadrada \(A\) tiene inversa si \[A A^{-1} \; = \; A^{-1} A \; = \; I\] donde \(I\) es la matriz identidad.
\[A^{-1} \; = \; \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}^{-1} \; = \; \begin{bmatrix} -2 & 1.5 \\ 1 & -0.5 \end{bmatrix}\]
# Calcular la inversa
A_inv <- solve(A)
# Imprimir la matriz inversa
cat("Inversa de A:\n")
print(A_inv)
## Inversa de A:
## [,1] [,2]
## [1,] -2 1.5
## [2,] 1 -0.5
Hay que tener cuenta que la inversa de una matriz no siempre existe. Esto sucede cuando el determinante de la matriz es cero. Por esta razón, en algunos casos, puede haber problemas numéricos al intentar calcularla.
# Calcular el determinante
H <- matrix(c(5, 6, 10, 12), nrow = 2)
det(H)
## [1] 0
# Calcular la matriz inversa
H_inv <- solve(H)
cat("Inversa de H:\n")
print(H_inv)
Sale el error que se muestra en la Figura 2.1.
Figure 2.1: Error al invertir una matriz con determinante cero.
La traza de una matriz es la suma de los elementos en su diagonal principal. Para una matriz cuadrada \(A\) de orden \(n\), la traza se denota como \(tr(A)\). Por ejemplo, sea
\[A = \begin{bmatrix} {\color{red}4} & -2 \\ 1 & {\color{red}1} \end{bmatrix}\]
Su traza es 5: \[\text{tr}(A) \;= \; {\color{red}4} + \color{red}1 \; = \; 5\]
# Matriz A
A <- matrix(c(4, -2, 1, 1), nrow = 2, byrow = TRUE)
# Calcular la traza
trace_A <- sum(diag(A))
print(trace_A)
## [1] 5
Para cualquier vector \(u\), su norma es la longitud que tiene y se define como
\[\parallel u \parallel \; = \; \sqrt{u^T \cdot u}\]
Gráficamente (véase la Figura 2.2):
Figure 2.2: Representación de un vector propio.
Si
\[\mathbf{u} \; = \; \begin{bmatrix} 4 \\ 2 \end{bmatrix}, \] entonces
\[\parallel u \parallel \; = \;\sqrt{u^T \cdot u} \; = \; \sqrt{\begin{bmatrix} 4 & 2 \end{bmatrix} \begin{bmatrix} 4 \\ 2 \end{bmatrix}} \; = \; \sqrt{(16 +4)} \;=\; \sqrt{20}\;\approx 4.47\;\]
# Norma de un vector
u <- matrix(c(4, 2), nrow = 2)
as.numeric(sqrt(t(u)%*% u))
## [1] 4.472136
library(matlib)
# Configurando el gráfico
xlim <- c(0,4.4)
ylim <- c(0,2.2)
par(mar=c(3,3,1,1)+.1)
plot(xlim, ylim, type="n", xlab="X", ylab="Y", asp=1)
grid()
# Definiendo algunos vectores (los de la matriz A)
u <- c(4,2)
vectors(u, labels = "", pos.lab = 4, frac.lab = 0.5, col = "red") #A
# Agregar etiqueta a los vectores
text(4.1,2.1, "u", col = "darkblue", cex = 1.5) # a
# Agregar etiqueta a la matriz A
text(2.7, 1, "||u||= 4.47", col = "darkblue", cex = 1.5) # u
Un vector \(\tilde{u}\) está normalizado si su norma es 1. En general, se obtiene de un vector \(u\) así: \[\tilde{u} \;=\; \frac{u}{\parallel u \parallel}\]
Sea \(u\) como en el ejemplo anterior. Entonces
\[\tilde{u} \;=\; \frac{u}{\parallel u \parallel} \; =\; \begin{bmatrix} 4/\sqrt{20} \\ 2/\sqrt{20} \end{bmatrix}\; =\; \begin{bmatrix} 0.8944272 \\ 0.4472136 \end{bmatrix}, \qquad \parallel \tilde{u} \parallel \; =\; 1\]
# vector normalizado y su norma
u <- matrix(c(4, 2), nrow = 2)
n <- as.numeric(sqrt(t(u)%*% u))
# vector normalizado
u_tilde <- (1/n)*u
u_tilde
## [,1]
## [1,] 0.8944272
## [2,] 0.4472136
# Su norma
sqrt(t(u_tilde)%*% u_tilde)
## [,1]
## [1,] 1
Gráficamente:
library(matlib)
# Configurando el gráfico
xlim <- c(0,1.4)
ylim <- c(0,0.5)
par(mar=c(3,3,1,1)+.1)
plot(xlim, ylim, type="n", xlab="X", ylab="Y", asp=1)
grid()
# Definiendo vector normalizado w
w <- c(u_tilde[1], u_tilde[2])
vectors(w, labels = "", pos.lab = 4, frac.lab = 0.5, col = "red")
# Agregar etiqueta a vector normalizado
text(0.9,0.5, "w= vector normalizado", col = "darkblue", cex = 1.2)
# Agregar etiqueta a w
text(0.6, 0.2, "||w||= 1", col = "darkblue", cex = 1.2)
Los valores propios (también llamados autovalores o eigenvalores) y los vectores propios (también conocidos como autovectores o eigenvectores) son conceptos fundamentales en álgebra lineal. Sea \(A\) una matriz cuadrada de tamaño \(n\). Un escalar \(\lambda\) es llamado un valor propio (autovalor o eigenvalor) de \(A\) si existe un vector \(v\) distinto de cero tal que \[A v\;=\; \lambda v\] Un vector \(v\) de esta naturaleza se conoce como vector propio de \(A\) correspondiente al valor propio \(\lambda\). A la matriz \(A\) se le llama una matriz de transformación (o una transformación lineal).
En otras palabras, existen ciertos vectores \(v\) para los cuales \(Av\) sólo modifica su norma, como se muestra en la Figura 3.1.
Figure 3.1: Representación de un vector propio.
Para encontrarlos, consideramos una matriz cuadrada \(A\) y resolvemos la ecuación característica: \[\text{det}\left(A - \lambda I\right) \; = \; 0\] donde \(\lambda\) es el valor propio e \(I\) es la matriz identidad. Después, los vectores propios se encuentran resolviendo el sistema de ecuaciones homogéneas asociado:
\[(A−\lambda I)v \; = \; 0\]
donde \(v\) es el vector propio correspondiente.
Considere el problema de esparcir queso en crema sobre una tajada de pan. La pregunta es cómo sería la forma más eficiente de hacerlo teniendo en cuenta la matriz \(A\) mostrada en la Figura 3.2.
Figure 3.2: Problema del pan y la mantequilla.
Sea dada la matriz \(A\): \[A \; = \; \begin{bmatrix} 3 & 0 \\ 0 & 1 \end{bmatrix}\]
Encontrar Valores Propios: \[\text{det}\left(A - \lambda I\right) \; = \; \begin{vmatrix} 3 - \lambda& 0 \\ 0 & 1 -\lambda \end{vmatrix} \; = \; (3-\lambda)(1-\lambda) \; = \; 0\] Esto nos dará los valores propios \(\lambda =(1,3)^T\).
Encontrar Vectores Propios:
Sea \(\mathbf{v} = (v_1, v_2)^T\) un vector diferente de cero. Entonces, al resolver el sistema siguiente, encontramos a \(\mathbf{v}\).
\[(A - \lambda I) \mathbf{v}\; = \;\begin{bmatrix} 3 - \lambda& 0 \\ 0 & 1 -\lambda \end{bmatrix} \begin{bmatrix} v_1 \\ v_2 \end{bmatrix} \; = \; \mathbf{0}\]
Si \(\lambda=3\), entonces,
\[\mathbf{v} \; = \; \begin{bmatrix} 1 \\ 0 \end{bmatrix}v_1 \qquad (\mbox{vector a lo largo del eje X})\] Si \(\lambda=1\), entonces,
\[\mathbf{v} \; = \; \begin{bmatrix} 0 \\ 1 \end{bmatrix}v_2 \qquad (\mbox{vector a lo largo del eje Y})\]
En este ejemplo, ¿qué indican los valores y los vectores propios?
Dicho de otro modo, el valor propio indica el porcentaje de transformación en una dirección determinada 75% a lo largo del eje \(X\) y 25% en el eje \(Y\).
La situación se puede visualizar gráficamente en la Figura 3.3.
Figure 3.3: Solución del problema del pan y la mantequilla.
En R, se puede usar librerías como eigen
para encontrar los valores y vectores propios. Aquí hay un ejemplo en donde encontraremos los valores y vectores propios de la matriz \(A\).
# Matriz A
A <- matrix(c(3, 0, 0, 1), nrow = 2, byrow = TRUE)
A
## [,1] [,2]
## [1,] 3 0
## [2,] 0 1
# Aplicamos la función eigen() para hallar los valores y vectores propios
eig <- eigen(A)
eig
## eigen() decomposition
## $values
## [1] 3 1
##
## $vectors
## [,1] [,2]
## [1,] -1 0
## [2,] 0 -1
Ahora calculamos los valores y vectores propios:
# Valores propios
lambda <- eig$values; lambda
## [1] 3 1
# Vectores propios
v <- eig$vectors; v
## [,1] [,2]
## [1,] -1 0
## [2,] 0 -1
Autovectores individuales:
v[,1] # Primer autovector
## [1] -1 0
v[,2] # Segundo autovector
## [1] 0 -1
Podemos mostrar que estos son los eigenvectores asociados:
round(A %*% v[,1], 5) == round(lambda[1] * v[,1], 5)
## [,1]
## [1,] TRUE
## [2,] TRUE
round(A %*% v[,2], 5) == round(lambda[2] * v[,2], 5)
## [,1]
## [1,] TRUE
## [2,] TRUE
Sea dada la matriz \(A\): \[A \; = \; \begin{bmatrix} 4 & -2 \\ 1 & 1 \end{bmatrix}\]
Encontrar Valores Propios: \[\text{det}\left(A - \lambda I\right) \; = \; \begin{vmatrix} 4 - \lambda& -2 \\ 1 & 1 -\lambda \end{vmatrix} \; = \; (3-\lambda)(2-\lambda) \; = \; 0\] Esto nos dará los valores propios \(\lambda =(3,2)^T\).
Encontrar Vectores Propios:
Sea \(\mathbf{v} = (v_1, v_2)^T\) un vector diferente de cero. Entonces, al resolver el sistema siguiente, encontramos a \(\mathbf{v}\).
\[(A - \lambda I) \mathbf{v}\; = \;\begin{bmatrix} 4 - \lambda& -2 \\ 1 & 1 -\lambda \end{bmatrix} \begin{bmatrix} v_1 \\ v_2 \end{bmatrix} \; = \; \mathbf{0}\] Si \(\lambda=3\), entonces,
\[\mathbf{v} \; = \; \begin{bmatrix} 2 \\ 1 \end{bmatrix}v_2\]
Si \(\lambda=2\), entonces,
\[\mathbf{v} \; = \; \begin{bmatrix} 1 \\ 1 \end{bmatrix}v_2\]
En R, se puede usar librerías como eigen
para encontrar los valores y vectores propios. Aquí hay un ejemplo en donde encontraremos los valores y vectores propios de la matriz \(A\).
# Matriz A
A <- matrix(c(4, -2, 1, 1), nrow = 2, byrow = TRUE)
A
## [,1] [,2]
## [1,] 4 -2
## [2,] 1 1
Gráficamente:
library(matlib)
# Configurando el gráfico
xlim <- c(-2.5,4.4)
ylim <- c(0,1)
par(mar=c(3,3,1,1)+.1)
plot(xlim, ylim, type="n", xlab="X", ylab="Y", asp=1)
grid()
# Definiendo algunos vectores (los de la matriz A)
a <- c(4,1)
b <- c(-2,1)
# Coordenadas de los vértices del triángulo
triangle_vertices <- rbind(c(0.02, 0.01), b, a, c(0, 0.02))
# Dibujar el triángulo
polygon(triangle_vertices, col = "pink", border = NA)
# Graficando los vectores
#vectors(v, labels="v", pos.lab=4, frac.lab=.5, col="darkgreen")
#vectors(u, labels="u", pos.lab=4, frac.lab=.5, col="darkblue")
vectors(b, labels = "", pos.lab = 4, frac.lab = 0.5, col = "black") #A
vectors(a, labels = "", pos.lab = 4, frac.lab = 0.5, col = "black") #A
# Agregar etiqueta a los vectores
text(2.6,0.4, "a", col = "black", cex = 1.8) # a
text(-1.4, 0.4, "b", col = "black", cex = 1.8) # b
# Agregar etiqueta a la matriz A
text(0.3, 0.7, "A", col = "red", cex = 1.8) # A
Aplicamos la función eigen
para hallar los valores y vectores propios:
# Valores y vectores propios
eig <- eigen(A)
eig
## eigen() decomposition
## $values
## [1] 3 2
##
## $vectors
## [,1] [,2]
## [1,] 0.8944272 0.7071068
## [2,] 0.4472136 0.7071068
Ahora calculamos los valores y vectores propios por separado:
# Valores propios
lambda <- eig$values; lambda
## [1] 3 2
# Vectores propios
v <- eig$vectors; v
## [,1] [,2]
## [1,] 0.8944272 0.7071068
## [2,] 0.4472136 0.7071068
Autovectores individuales:
v[,1] # Primer autovector
## [1] 0.8944272 0.4472136
v[,2] # Segundo autovector
## [1] 0.7071068 0.7071068
Podemos mostrar que estos son los eigenvectores asociados:
round(A %*% v[,1], 5) == round(lambda[1] * v[,1], 5)
## [,1]
## [1,] TRUE
## [2,] TRUE
round(A %*% v[,2], 5) == round(lambda[2] * v[,2], 5)
## [,1]
## [1,] TRUE
## [2,] TRUE
Los resultados encontrados se pueden visualizar en la figura de abajo:
library(matlib)
# Configurando el gráfico
xlim <- c(-3,6.5)
ylim <- c(0,3)
par(mar=c(3,3,1,1)+.1)
plot(xlim, ylim, type="n", xlab="X", ylab="Y", asp=1)
grid()
# Definiendo algunos vectores (los de la matriz A)
a <- c(4,1)
b <- c(-2,1)
# Vectores propios
v2 <- c(1,1)
v3 <- c(2,1)
# Vectores propios transformados por A
Av2 <- c(2,2)
Av3 <- c(6,3)
# Coordenadas de los vértices del triángulo
triangle_vertices <- rbind(c(0.02, 0.01), b, a, c(0, 0.02))
# Dibujar el triángulo
polygon(triangle_vertices, col = "pink", border = NA)
# Graficando los vectores
#vectors(v, labels="v", pos.lab=4, frac.lab=.5, col="darkgreen")
#vectors(u, labels="u", pos.lab=4, frac.lab=.5, col="darkblue")
vectors(b, labels = "", pos.lab = 4, frac.lab = 0.5, col = "black") #A
vectors(a, labels = "", pos.lab = 4, frac.lab = 0.5, col = "black") #A
vectors(Av2, labels = "", pos.lab = 4, frac.lab = 0.5, col = "lightgreen") #Av2
vectors(Av3, labels = "", pos.lab = 4, frac.lab = 0.5, col = "lightblue") #Av3
vectors(v2, labels = "", pos.lab = 4, frac.lab = 0.5, col = "darkgreen") #V2
vectors(v3, labels = "", pos.lab = 4, frac.lab = 0.5, col = "darkblue") #v3
# Agregar etiqueta a los vectores
text(2.6,0.4, "a", col = "black", cex = 1.2) # a
text(-1.4, 0.4, "b", col = "black", cex = 1.2) # b
text(2.1,2.3, "Av2", col = "lightgreen", cex = 1.8) # Av2
text(6, 3.3, "Av3", col = "lightblue", cex = 1.8) # Av1
text(0.5,0.9, "v2", col = "darkgreen", cex = 1.2) # v2
text(1.8, 0.7, "v3", col = "darkblue", cex = 1.2) # v3
# Agregar etiqueta a la matriz A
text(-1, 1.3, "A", col = "pink", cex = 1.5) # u
Dados dos vectores \(\mathbf{u}\) y \(\mathbf{v}\), la proyección de \(\mathbf{u}\) sobre \(\mathbf{v}\) se denota como \(\text{proj}_{\mathbf{v}}(\mathbf{u})\) y se calcula mediante la fórmula:
\[\text{proj}_{\mathbf{v}}(\mathbf{u}) \; = \; \frac{\mathbf{u} \cdot \mathbf{v}}{\|\mathbf{v}\|^2} \cdot \mathbf{v}\]
donde representa el producto punto entre estos dos vectores y \(\|\mathbf{v}\|\) es la norma (longitud) de \(\mathbf{v}\).
Gráficamente, la proyección se puede visualizar como se muestra en la Figura 4.1.
Figure 4.1: Proyección de \(u\) sobre \(v\).
Dado los vectores: \[ \mathbf{u} \; = \; \begin{bmatrix} 1 \\ 2 \end{bmatrix}, \qquad \mathbf{v} \; = \; \begin{bmatrix} 3 \\ 1 \end{bmatrix}\]
Proyección de \(\mathbf{u}\) sobre \(\mathbf{v}\): \[\text{proj}_{\mathbf{v}}(\mathbf{u}) \; = \; \frac{\mathbf{u} \cdot \mathbf{v}}{\|\mathbf{v}\|^2} \cdot \mathbf{v} \; = \; \frac{5}{10} \cdot \begin{bmatrix} 3 \\ 1 \end{bmatrix} \; = \; \begin{bmatrix} 1.5 \\ 0.5 \end{bmatrix}\]
u <- c(1,2)
v <- c(3,1)
# Proyección de u sobre v
projection <- as.vector((u %*% v) / v %*% v) * v
print(projection)
## [1] 1.5 0.5
Gráficamente, estos resultados se pueden visualizar como se muestra en la Figura 4.2.
Figure 4.2: Proyección de \(u\) sobre \(v\).
El rango de una matriz es el máximo número de columnas linealmente independientes en la matriz. Puedes encontrar el rango de una matriz utilizando operaciones de eliminación gaussiana para llevar la matriz a su forma escalonada reducida.
Hallar el rango de \(B\):
\[B = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix}\]
# Matriz B
B <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), nrow = 3, byrow = TRUE)
B
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
Operaciones de Eliminación Gaussiana:
Encontramos la matriz inversa usando las operaciones elementales. Para ello se aumenta la matriz dada con una matriz identidad (véase la Figura 5.1):
Figure 5.1: Método de eliminación de Gauss-Jordan
Un poco más resumido, el proceso fue:
\[ \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix} \qquad \Rightarrow\qquad \begin{bmatrix} 1 & 2 & 3 \\ 0 & -3 & -6 \\ 0 & -6 & -12 \end{bmatrix} \qquad \Rightarrow\qquad \begin{bmatrix} 1 & 2 & 3 \\ 0 & -3 & -6 \\ {\color{Green}0} & {\color{Green}0} & {\color{Green}0} \end{bmatrix} \]
Contar filas (o columnas) no nulas:
Como las dos primeras filas de \(A\) son no nulas, entonces, el rango es 2.
En R, una forma de obtener el rango es por medio de la función qr
que hace una descomposición QR de la matriz. Otra forma para obtener el rango de la matriz es por medio de la función rankMatrix
del paquete Matrix
.
# Calcular el rango
qr(B)$rank
## [1] 2
library(Matrix)
rankMatrix(B)[1]
## [1] 2
Las matrices ortogonales son matrices cuadradas \(Q\) cuya transpuesta es igual a su inversa. Es decir,
\[Q^T \cdot Q = I\]
Esto implica que los vectores columna (y, por lo tanto, también los vectores fila) forman un conjunto ortonormal, es decir, son ortogonales entre sí y tienen una longitud unitaria.
\[Q = \begin{bmatrix} \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \end{bmatrix}\]
Se cumple que \[Q^T \cdot Q = I\] Por lo tanto, \(Q\) es ortogonal.
# Matriz Q
Q <- matrix(c(1/sqrt(2), -1/sqrt(2), 1/sqrt(2), 1/sqrt(2)), nrow = 2, byrow = TRUE)
# Verificar ortogonalidad
is.orthogonal <- all(round(t(Q) %*% Q) == diag(2))
print(is.orthogonal)
## [1] TRUE
Dos vectores ortogonales en el plano son dos vectores que forman un ángulo de 90 grados y su producto escalar es cero. En otras palabras, dos vectores son ortogonales si forman un ángulo recto y, por tanto, su producto escalar es cero.
Justificación
Supongamos que tenemos dos vectores \(u\) y \(v\). Si ambos están separados por un ángulo \(\theta\), podemos determinar el valor de éste último mediante la fórmula:
\[\cos(\theta) \; = \; \frac{u\cdot v}{\parallel u\parallel \; \parallel v\parallel}\]
Si los vectores son perpendiculares entre sí, es decir,\(\theta=90\) grados, entonces, \(\cos(90) =0\). Por lo tanto, \[u\cdot v \; =\; 0\] En consecuencia dos vectores son perpendiculares u ortogonales si forman un ángulo recto y por ende, su producto escalar es cero.
Los vectores ortonormales son casos especiales de vectores ortogonales. Además de ser perpendiculares, cada uno de ellos debe tener magnitud 1.
Gráficamente, los vectores ortogonales y ortonormales se pueden visualizar como se muestra en la Figura 6.1:
Figure 6.1: Método de eliminación de Gauss-Jordan
Conjunto de puntos que pueden ser obtenidos por combinaciones lineales de algún conjunto de vectores “bases” (véase la Figura 7.1.
Figure 7.1: Espacios vectoriales
Es un conjunto de vectores que pueden “generar” (mediante una combinación lineal) todos los puntos en un espacio vectorial (véase la Figura 8.1:
Figure 8.1: Bases vectoriales
Resuelva los siguientes ejercicios a mano y con el software R (cuando sea posible). Haga dibujos en los ejercicios donde sea posible.
Dados dos vectores \(\vec{v} = \begin{bmatrix} 2 \\ -3 \\ 1 \end{bmatrix}\) y \(\vec{w} = \begin{bmatrix} 4 \\ 1 \\ -2 \end{bmatrix}\), encuentra: (a) \(\vec{v} + \vec{w}\); (b) \(3\vec{v}\); (c) Las proyecciones correspondientes de \(u\) sobre \(v\) y de \(v\) sobre \(u\).
Encuentra la norma del vector \(\vec{v} = \begin{bmatrix} 3 \\ -4 \\ 5 \end{bmatrix}\) y su transpuesta.
Dadas las matrices \(A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}\) y \(B = \begin{bmatrix} -1 & 0 \\ 2 & -3 \end{bmatrix}\), calcula \(A + B\), \(AB\) y \(3B\).
Calcula el determinante de la matriz \(C = \begin{bmatrix} 2 & 1 \\ -3 & 4 \end{bmatrix}\) y su inversa (si exsite).
Encuentra los valores propios y vectores propios de las matrices: \(D = \begin{bmatrix} 3 & 0 \\ 0 & 2 \end{bmatrix}\), \(E = \begin{bmatrix} 3 & 1 \\ 1 & 2 \end{bmatrix}\) y \(F = \begin{bmatrix} 3 & 1 \\ -1 & 2 \end{bmatrix}\).
Encuentra los valores propios y vectores propios de la matriz \(E = \begin{bmatrix} 3 & 0 & 0\\ 0 & 2 &0 \\ 0 & 0& 5 \end{bmatrix}\) y su inversa.
Calcula el rango de la matriz \(F = \begin{bmatrix} 1 & 0 & 2 \\ 0 & 1 & -3 \\ 2 & -3 & 5 \end{bmatrix}\).
Encuentra una base para el espacio nulo de la matriz \(G = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix}\).
Verifica si los vectores \(\vec{v} = \begin{bmatrix} 1 \\ 0 \\ -1 \end{bmatrix}\) y \(\vec{w} = \begin{bmatrix} 2 \\ 1 \\ 2 \end{bmatrix}\) son: (a) Ortogonales; (b) Ortonormales.
Encuentra una base ortonormal para el subespacio generado por los vectores \(\vec{v} = \begin{bmatrix} 1 \\ -1 \\ 0 \end{bmatrix}\) y \(\vec{w} = \begin{bmatrix} 1 \\ 1 \\ 2 \end{bmatrix}\).
Verifica si el conjunto de vectores \({ \begin{bmatrix} 1 \\ 0 \\ 0 \end{bmatrix}, \begin{bmatrix} 0 \\ 1 \\ 0 \end{bmatrix}, \begin{bmatrix} 0 \\ 0 \\ 1 \end{bmatrix} }\) forma una base para \(\mathbb{R}^3\).
Encuentra una base para el espacio generado por las columnas de la matriz \(H = \begin{bmatrix} 1 & 2 & 1 \\ 0 & 1 & 1 \\ 2 & 3 & 2 \end{bmatrix}\).
Consultar el documento RPubs :: Análisis multivariado (bibliografía).
If you found any ERRORS or have SUGGESTIONS, please report them to my email. Thanks.