Una matriz es considerada ortogonal cuando todas sus filas y columnas son mutuamente ortonormales. En términos de álgebra lineal, esto significa que, si nuestras filas y columnas son tratadas como vectores, estos deben ser mutuamente ortonormales. Veamos cómo comprobar si una matriz es ortogonal utilizando Python y la biblioteca numpy.
¿Cómo construir una matriz ortogonal en Python?
Para ilustrar el concepto de matrices ortogonales, podemos hacer un ejemplo práctico usando Python y la biblioteca numpy. Python es ampliamente utilizado en la programación matemática debido a sus potentes bibliotecas como numpy para cálculos numéricos.
import numpy as np
# Definimos una matriz de ejemplomatrix = np.array([[1,0,0],[0,1,0],[0,0,1]])# Imprimimos la matrizprint(matrix)
La matriz definida es la matriz identidad, que es trivialmente una matriz ortogonal.
¿Cómo comprobar si una matriz es ortogonal?
Para verificar que una matriz es ortogonal, debemos:
Comprobar ortogonalidad de las columnas: Todas las columnas deben ser ortogonales entre sí, lo cual implica que el producto interno de cualquier par de columnas distintas sea cero.
Validar sus normas: Cada columna debe tener norma uno.
Verificación de ortogonalidad de las columnas
# Producto interno de columnasdot_product_12 = np.dot(matrix[:,0], matrix[:,1])dot_product_13 = np.dot(matrix[:,0], matrix[:,2])dot_product_23 = np.dot(matrix[:,1], matrix[:,2])print(dot_product_12, dot_product_13, dot_product_23)# Debería ser 0
Los vectores son ortonormales si tienen norma 1, como vemos en el ejemplo anterior.
¿Qué es una matriz ortonormal?
Aunque comunmente los términos "matriz ortogonal" y "ortonormal" se usan indistintamente, técnicamente todas las matrices ortogonales consisten en vectores ortonormales. No hay necesidad de distinguir entre los dos términos, ya que cualquier matriz ortogonal tiene por definición vectores ortonormales.
¿Cómo generar matrices ortogonales con Python y trigonometría?
Podemos usar funciones trigonométricas para generar matrices ortogonales. Veamos un ejemplo usando las funciones seno y coseno:
theta = np.pi /4# Ángulo de 45 grados# Definición de la matrizmatrix = np.array([[np.cos(theta),-np.sin(theta)],[np.sin(theta), np.cos(theta)]])print(matrix)
Ahora, para verificar la propiedad ortogonal, podemos comprobar que la multiplicación de la matriz por su transpuesta da como resultado la matriz identidad:
# Calcular transpuesta y multiplicartranspose = matrix.T
identity_check = np.dot(transpose, matrix)print(identity_check)# Debería ser la matriz identidad
La práctica de construir y verificar matrices ortogonales nos ayuda a comprender y aplicar estos conceptos en problemas matemáticos reales, a la vez que desarrollamos cuidado al trabajar con cálculos numéricos en Python, evitando la amplificación de errores debido a imprecisiones computacionales. ¡Sigue explorando la magia de las matemáticas y la programación!
El profesor nunca menciona por que elige la matriz con seno y coseno. Resulta que esa matriz, se llama una “matriz de rotación”. La cual me permite rotar un vector 90 grados. Es por esta razón que es una matriz ortogonal.
Gracias por el dato.
Para ser más exactos la "matriz de rotación" funciona con cualquier angulo no solo con 90 grados.
Aqui les va un pequeño truco para hacer las aproximaciones a cero.
Se trata de definir un valor muy pequeño (épsilon) contra el que se comparan los elementos de la matriz y si son menores que él entonces ajustarlos a cero:
eps=1e-17A[np.abs(A)< eps]=0
Gracias 🥇👍
Matriz Ortogonal
Es la matriz cuyos vectores filas son ortonormales mutuamente (lo mismo con los vectores columnas)
Cumplen con la siguiente identidad:
A_tA = AA_t = I
A_t = inv(A)
Nota:
Cuidado con los errores que podemos propagar al operar con las aproximaciones que hace python
Una matriz es ortogonal cuando todas sus filas son mutuamente ortonormales y todas sus columnas son mutuamente ortonormales.
Así mismo, una matriz ortogonal es una matriz cuadrada cuya matriz inversa coincide con su matriz transpuesta.
Para los que estan haciendo el curso ahora(16/8/2020) no les va a dar el resultado de print(1/A_t.dot(A)) y
A_t=A.Tprint(A_t.dot(A))print(A.dot(A_t))```
como al profe ya que a traves del tiempo los lenguajes tienen actualizaciones y ahora el resultado de esos calculos es 0 e infinito ya que se entiende que el profesor no obtiene esos resultados por limitaciones de la computadora
De acuerdo al teorema no es necesario probar tanto que las filas y las columnas son ortonormales entre si, solo con las columnas basta
excelente aporte! cual es el texto del que sale ese teorema?
Por si alguien al igual que yo, tiene la duda del uso de las "rebanadas" en python con matrices:
import numpy as np
matriz = np.array([[1,0,0],[0,1,0],[0,0,1]])print(matriz[0,:]) #imprime la primera fila de la matriz
print(matriz[1,:]) #imprime la segunda fila de la matriz
print(matriz[:,0]) #imprime la primera columna de la matriz
print(matriz[:,1]) #imprime la segunda columna de la matriz
Gracias, igual lo entendía, pero un resumen siempre ayuda a todos!
Una matriz ortogonal debe cumplir: que todas sus filas sean ortogonales mutuamente, igual que sus columnas y ademas que sean ortonormales(Que sus normas sean igual a 1)
¿?
Resultado diferente en Colab.
¿Por qué será que el resultado es diferente en Colab?
Probé subiendo el mismo archivo de los recursos en Jupyter y en Colab y el resultado es diferente. ¿Alguien tendrá alguna idea?
!
La imagen no se subió, aún presentas ese problema?
Hola, no se pudo subir la imagen anteriormente, pero este es el resultado que me aparece en Colab.
En Jupyter si sale como a él en el vídeo (minuto 10:08).
¿Tiene numpy alguna función para saber si una matriz es ortogonal?
No sé si exista, no la he visto, pero verificarla es fácil así no haya una función. Una forma es verificar si tiene inversa, calcularla y compararla con la transpuesta. En este caso con una resta y con el valor de la norma. Si el valor de la norma es cero, entonces la transpuesta es igual a la inversa y cumpliría con la definición de ortogonal. Hay que agregarle un valor de error aceptable porque los cálculos no son perfectos. El código sería algo así:
Var=np.linalg.norm(np.linalg.inv(Matrix)-Matrix.transpose())e=0.00001 #valor aceptable
ifVar<e:print('Es ortogonal')else:print('No es ortogonal')
Que opinan del codigo que cree para verificar si una matriz es ortogonal?
def ortogonal(matriz): cero =Truefor i inrange(3):for j inrange(3):if i != j and i < j: punto = matriz[:,i].dot(matriz[:,j])if punto !=0: cero =Falsereturn cero
matriz = np.eye(3)print(matriz)ifortogonal(matriz) and ortogonal(matriz.T):print('Matriz Ortogonal')else:print('NO es Matriz Ortogonal')
A mi me da lo que indica el profe.
A mi igual
existe una propiedad similar de ortonormalidad para los tensores?
Porque no usamos Transpuesta en el segundo vector de la matriz ???
Al multiplicara A.A_t obtuve esto :
[[1. 0.]
[0. 1.]]
[[1. 0.]
[0. 1.]]
Yo también
Nota.
Propiedades de las matrices ortogonales:
(A)(A.T) = (A.T)(A) = matriz_identidad
A.T = A^-1
Cuando quiero comprobar si una matriz es ortogonal se me hace mejor hacerlo de esta manera:
#Verificar si es ortogonal
matriz_trans = np.dot(matriz, matriz.T)matriz_identidad = np.eye(matriz.shape[0])ortogonal = np.allclose(matriz_trans, matriz_identidad)print(ortogonal)
Si la salida es True es que lo es.
Cual es la aplicación de una matriz ortogonal?
En mecánica cuántica son muy usadas, también en mecánica clásica, por ejemplo las matrices de giro de Pauli, son ortonormales. Las matrices de rotación también lo son.
para casi todo lo que maneje entornos 3D, por ejemplo las pantallas de los computadores tienen que hacer una transformación lineal de un R3 a un R2, en el caso de juego y programas CAD. esas matrices para poder resolverse de una manera mas sencilla se les hace unos procesos para que sean homogéneas y por ende ortogonales.
Otro ejemplo es en la visión artificial, si quieres darle las coordenadas a un robot de como se debe mover por medio de la información que le entregue una cámara o una imagen, para poder traducir esa información se utilizan de igual manera las matrices ortogonales para facilitar el computo.
El ultimo ejemplo que puedo recordar es, en la creación de imágenes medicas digitales, por ejemplo los resonadores magneticos tienen sensores que detectan señales de cuando una parte de los atomos de hidrogeno en tu cuerpo resonan, esa información para poder ser organizada necesita de estas matrices que contienen la información espacial del paciente y de la maquina.
✅ ¿Qué es una Matriz Ortogonal?
Una matriz cuadrada Q∈Rn×nQ \in \mathbb{R}^{n \times n} es ortogonal si:
QTQ=QQT=IQ^T Q = Q Q^T = I
Es decir:
Su transpuesta es igual a su inversa:Q−1=QTQ^{-1} = Q^T
Las columnas y filas de QQ son vectores ortonormales:
Ortogonales entre sí (producto punto = 0)
Norma igual a 1
🎯 Propiedades Clave
PropiedadExplicaciónQ−1=QTQ^{-1} = Q^TInversa fácil de calcular∥Qx∥=∥x∥\|Qx\| = \|x\|Preserva la norma (rotaciones/reflexiones)det(Q)=±1\det(Q) = \pm 1Conserva volumen / orientaciónColumnas y filas ortonormalesBase ortonormal del espacio
🧪 Ejemplo en Python – Verificar Ortogonalidad
import numpy as np
# Matriz de rotación 90 grados en 2D
Q = np.array([[0, -1],
[1, 0]])
# Verificar si Q^T @ Q = Identidad
es_ortogonal = np.allclose(Q.T @ Q, np.eye(2))
# Revisar columnas ortonormales
for i in range(Q.shape[1]):
print(f"Norma columna {i}:", np.linalg.norm(Q[:, i]))
for i in range(Q.shape[1]):
for j in range(i + 1, Q.shape[1]):
print(f"Producto interno entre columna {i} y {j}:", np.dot(Q[:, i], Q[:, j]))
🧠 Aplicaciones
PCA (Análisis de Componentes Principales)
Rotaciones y transformaciones geométricas
Descomposición QR
Procesamiento de señales
Reducción de dimensionalidad
🎓 Resumen
ConceptoDescripciónMatriz ortogonalTranspuesta = inversa; columnas y filas ortonormalesOrtonormalidadVectores ortogonales entre sí y de norma 1Verificación PythonQ.T @ Q == I, np.allclose(...), np.linalg.norm(...)
Una matriz ortogonal es una matriz cuyas columnas (o filas) son vectores ortonormales entre sí. Para que un conjunto de vectores sea ortonormal, cada par de vectores debe ser ortogonal (es decir, su producto interno debe ser cero) y cada vector debe tener una norma (longitud) de uno.
Propiedades de una Matriz Ortonormal
Ortogonalidad: Los vectores columna (o fila) son ortogonales entre sí. Esto significa que el producto interno de cualquier par de vectores diferentes es cero.
Normalización: Cada vector columna (o fila) tiene una longitud (norma) de uno.
Inversa: La matriz ortonormal tiene la propiedad especial de que su inversa es igual a su transpuesta. Es decir, si Q es una matriz ortonormal, entonces Q−1=QT.