Soy un novato en los algoritmos de valores propios, pero algo me llama la atención. El algoritmo QR funciona con matrices reales / complejas que producen valores propios reales / complejos. Sin embargo, no puede producir valores propios complejos a partir de una matriz real . Aquí un ejemplo simplista escrito en Julia y derivado de aquí y aquí :
using LinearAlgebra
A = [7 3 4 11 -9 -2;
-6 4 -5 7 1 12;
-1 -9 2 2 9 1;
-8 0 -1 5 0 8;
-4 3 -5 7 2 10;
6 1 4 -11 -7 -1]
M = copy(A)
for i=1:100
global M
Q,R = LinearAlgebra.qr(M);
M=R*Q;
end
display(diag(M))
display(eigvals(A))
6-element Array{Float64,1}:
-2.8415406888480472
8.675063708533656
3.658872985794657
6.3411270142053695
0.12201942568224483
3.0444575546321087
6-element Array{Complex{Float64},1}:
2.916761509842819 + 13.248032079355992im
2.916761509842819 - 13.248032079355992im
5.000000000000005 + 6.000000000000003im
5.000000000000005 - 6.000000000000003im
1.5832384901571723 + 1.4155521348117128im
1.5832384901571723 - 1.4155521348117128im
Definir la matriz A como compleja, con solo componentes reales, no hace ninguna diferencia.
Mis preguntas son:
- ¿Cuál es mi malentendido conceptual sobre el tema?
- ¿Qué paso estoy haciendo mal?
- Y como arreglarlo ?
Gracias
linear-algebra
eigenvalues
iterative-method
Noel Araujo
fuente
fuente
Respuestas:
En pocas palabras, el algoritmo QR aplicarse a una matriz es un procedimiento iterativo que converge a la verdadera descomposición de Schur: una matriz unitaria y una matriz en bloque de forma superior triangular (ver abajo) tal que . De ello se deduce que las columnas de son los vectores propios (que son los principales objetos que se calculan!) Y que tiene los mismos valores propios como .UNA Q R A = Q R Q T Q R AA = Q R QT Q R UNA
El punto clave es la forma triangular superior del bloque , lo que significa que donde son reales bloques de cualquieraR = ⎛⎝⎜⎜R110 0⋱∗Rm m⎞⎠⎟⎟, Ryo i
Como puede calcular valores propios de matrices analíticamente (como raíces de un polinomio cuadrático), es un paso barato extraer los valores propios complejos de la calculada (aproximación de) al final, y esto es lo que hace.2×2 R
eigvals
Entonces, su malentendido conceptual es el siguiente: cada matriz real tiene valores propios, pero no tienen que ser reales (o distintos): mire el ejemplo ahora eliminado de Richard Zhang, , que tiene los valores propios . Solo si la matriz es simétrica, se garantiza que los valores propios sean reales (y que la matriz sea diagonal), por lo que su código solo funciona para matrices simétricas. Si la matriz de entrada no es simétrica, también debe extraer los valores propios (complejos) identificando losn×n n A=(01−10) ±i R 2 × 2R 2×2 bloques (por ejemplo, comprobando si un elemento subdiagonal es mayor que una tolerancia) y, de ser así, calculando los valores propios mediante una fórmula.
Esto es un poco tedioso, pero si está dispuesto a hacer trampa y usarlo2×2
eigenvalues
para los bloques , la siguiente modificación de su código lo hará:fuente
M
, no solo la diagonaldiag(M)
(yaM
que no es ni diagonal ni triangular). Luego verás los bloques de 2x2. Puede comprobar mi reclamo con, por ejemplo,eigvals(M[1:2,1:2])
. (@BrianBorchers ¡Es un buen truco!)Olvídese del algoritmo QR y recuerde qué son los valores propios: son las raíces del polinomio característico de la matriz (consulte, por ejemplo, https://en.wikipedia.org/wiki/Characteristic_polynomial ). Para una matriz real de orden N, este es un polinomio de orden N con coeficientes reales. Pero los coeficientes reales no significan necesariamente raíces reales, es posible que tenga pares conjugados complejos. Por lo tanto, una matriz real general puede tener valores propios complejos.
fuente
He usado esta ecuación muchas veces para probar la convergencia. El 11 en la primera fila debe ser -11. Ejecutar el algoritmo QR sin cambios, tal como lo hace la matriz, durante aproximadamente 60 iteraciones da como resultado una matriz con valores propios que se muestran casi exactamente en diagonal, incluso los complejos. Los 5 + -6i están en las dos primeras líneas, los 4 y 3 en las siguientes dos y finalmente el 1 + -21 en el bloque inferior derecho. No piense que los valores complejos generalmente aparecen claramente sin calcular los valores propios de la matriz 2x2.
fuente