En matemáticas , la iteración de potencia (también conocida como método de potencia ) es un algoritmo de valor propio : dada una matriz diagonalizable , el algoritmo producirá un número , que es el mayor valor propio (en valor absoluto) de , y un vector distinto de cero , que es un vector propio correspondiente de , es decir, . El algoritmo también se conoce como iteración de Von Mises . [1]
La iteración de potencia es un algoritmo muy simple, pero puede converger lentamente. La operación que consume más tiempo del algoritmo es la multiplicación de una matriz por un vector, por lo que es eficaz para una matriz dispersa muy grande con una implementación adecuada. La velocidad de convergencia es similar a (consulte una sección posterior). En palabras, la convergencia es exponencial y la base es la brecha espectral .
El método
El algoritmo de iteración de potencia comienza con un vector , que puede ser una aproximación al vector propio dominante o un vector aleatorio. El método se describe mediante la relación de recurrencia
Entonces, en cada iteración, el vector se multiplica por la matriz y se normaliza.
Si suponemos que tiene un valor propio que es estrictamente mayor en magnitud que sus otros valores propios y el vector inicial tiene un componente distinto de cero en la dirección de un vector propio asociado con el valor propio dominante, entonces una subsecuencia converge a un vector propio asociado con el valor propio dominante.
Sin los dos supuestos anteriores, la secuencia no necesariamente converge. En esta secuencia,
,
donde es un vector propio asociado con el valor propio dominante, y . La presencia del término implica que no converge a menos que . Bajo los dos supuestos enumerados anteriormente, la secuencia definida por
Esto se puede calcular con el siguiente algoritmo (mostrado en Python con NumPy):
#!/usr/bin/env python3importar numpy como npdef power_iteration ( A , num_iterations : int ): # Idealmente elija un vector aleatorio # Para disminuir la probabilidad de que nuestro vector # Sea ortogonal al vector propio b_k = np . random . rand ( A . shape [ 1 ])para _ en rango ( num_iterations ): # calcula el producto matriz-vector Ab b_k1 = np . dot ( A , b_k )# Calcular la norma b_k1_norm = np . linalg . norm ( b_k1 )# volver a normalizar el vector b_k = b_k1 / b_k1_normdevolver b_kpotencia_iteración ( np . matriz ([[ 0.5 , 0.5 ], [ 0.2 , 0.8 ]]), 10 )
El vector converge a un vector propio asociado. Lo ideal sería utilizar el cociente de Rayleigh para obtener el valor propio asociado.
Este algoritmo se utiliza para calcular el Google PageRank .
El método también se puede utilizar para calcular el radio espectral (el valor propio con la mayor magnitud, para una matriz cuadrada) calculando el cociente de Rayleigh.
Análisis
Sea descompuesto en su forma canónica de Jordan : , donde la primera columna de es un vector propio de correspondiente al valor propio dominante . Dado que genéricamente , el valor propio dominante de es único, el primer bloque de Jordan de es la matriz donde es el valor propio más grande de A en magnitud. El vector inicial se puede escribir como una combinación lineal de las columnas de V :
Por supuesto, tiene un componente distinto de cero en la dirección del valor propio dominante, por lo que .
donde la expresión: es más susceptible al siguiente análisis.
La expresión anterior se simplifica como
El límite se deduce del hecho de que el valor propio de es menor que 1 en magnitud, por lo que
Resulta que:
Usando este hecho, se puede escribir en una forma que enfatiza su relación con cuando k es grande:
Dónde y como
La secuencia está acotada, por lo que contiene una subsecuencia convergente. Nótese que el vector propio correspondiente al valor propio dominante solo es único hasta un escalar, por lo que, aunque la secuencia puede no converger, es casi un vector propio de A para valores grandes de k .
Alternativamente, si A es diagonalizable , entonces la siguiente prueba arroja el mismo resultado
Sean λ 1 , λ 2 , ..., λ m los m valores propios (contados con multiplicidad) de A y sean v 1 , v 2 , ..., v m los vectores propios correspondientes. Supóngase que es el valor propio dominante, de modo que para .
El vector inicial se puede escribir:
Si se elige aleatoriamente (con probabilidad uniforme), entonces c 1 ≠ 0 con probabilidad 1. Ahora,
Por otro lado:
Por lo tanto, converge a (un múltiplo de) el vector propio . La convergencia es geométrica , con razón
donde denota el segundo valor propio dominante. Por lo tanto, el método converge lentamente si hay un valor propio cercano en magnitud al valor propio dominante.
Aplicaciones
Aunque el método de iteración de potencia se aproxima sólo a un valor propio de una matriz, sigue siendo útil para ciertos problemas computacionales . Por ejemplo, Google lo utiliza para calcular el PageRank de los documentos en su motor de búsqueda, [2] y Twitter lo utiliza para mostrar a los usuarios recomendaciones de a quién seguir. [3] El método de iteración de potencia es especialmente adecuado para matrices dispersas , como la matriz web, o como el método sin matriz que no requiere almacenar la matriz de coeficientes explícitamente, sino que puede acceder a una función que evalúa productos matriz-vector . Para matrices no simétricas que están bien condicionadas , el método de iteración de potencia puede superar a la iteración de Arnoldi más compleja . Para matrices simétricas, el método de iteración de potencia rara vez se utiliza, ya que su velocidad de convergencia se puede aumentar fácilmente sin sacrificar el pequeño coste por iteración; véase, por ejemplo, la iteración de Lanczos y LOBPCG .
Algunos de los algoritmos de valores propios más avanzados pueden entenderse como variaciones de la iteración de potencia. Por ejemplo, el método de iteración inversa aplica la iteración de potencia a la matriz . Otros algoritmos observan todo el subespacio generado por los vectores . Este subespacio se conoce como el subespacio de Krylov . Puede calcularse mediante la iteración de Arnoldi o la iteración de Lanczos . La iteración de Gram [4] es un método superlineal y determinista para calcular el par propio más grande.
^ Richard von Mises y H. Pollaczek-Geiringer, Praktische Verfahren der Gleichungsauflösung , ZAMM - Zeitschrift für Angewandte Mathematik und Mechanik 9, 152-164 (1929).
^ Ipsen, Ilse y Rebecca M. Wills (5–8 de mayo de 2005). "7º Simposio internacional IMACS sobre métodos iterativos en computación científica" (PDF) . Instituto Fields, Toronto, Canadá.{{cite news}}: CS1 maint: multiple names: authors list (link)
^ Pankaj Gupta, Ashish Goel, Jimmy Lin, Aneesh Sharma, Dong Wang y Reza Bosagh Zadeh WTF: El sistema de a quién seguir en Twitter, Actas de la 22.ª conferencia internacional sobre la World Wide Web
^ Delattre, B.; Barthélemy, Q.; Araujo, A.; Allauzen, A. (2023), "Límite eficiente de la constante de Lipschitz para capas convolucionales mediante iteración de Gram", Actas de la 40.ª Conferencia internacional sobre aprendizaje automático