Power-iteration
Ich versuche zu verstehen, die power-iteration zur Berechnung der Eigenwerte einer matrix.
Folgte ich dem Algorithmus von en.wikipedia.org/wiki/Power_iteration#The_method:
from math import sqrt
def powerIteration(A):
b = [random() for i in range(len(A))]
tmp = [0] * len(A)
for iteration in range(10000):
for i in range(0, len(A)):
tmp[i] = 0
for j in range(0, len(A)):
tmp[i] += A[i][j] * b[j]
normSq = 0
for k in range(0, len(A)):
normSq += tmp[k] * tmp[k]
norm = sqrt(normSq)
for i in range(len(A)):
b[i] = tmp[i] / norm
return b
Wenn ich powerMethod([[0.0, 1.0], [1.0, 0.0]])
gibt es zufällig paar zahlen, wie zum Beispiel: [0.348454142915605, 0.9373258293064111]
oder [0.741752215683863, 0.6706740270266026]
Frage #1 - warum sind diese zahlen zufällig? Natürlich begann ich mit dem random Vektor b
aber ich hoffte, es würde konvergieren.
Frage #2 - da ist dieser Online Matrix Calculator zu denen, wenn ich feed:
0 1
1 0
gibt es:
Eigenvalues:
( 1.000, 0.000i)
(-1.000, 0.000i)
Eigenvectors:
( 0.707, 0.000i) (-0.707, 0.000i)
( 0.707, 0.000i) ( 0.707, 0.000i)
Wenn ich das richtig verstanden habe, zurückgeben b
sollte man diese Eigenvektoren, aber es funktioniert nicht. Warum ist die Ausgabe so anders?
Frage #3 - was soll ich den oben beschriebenen Algorithmus, so dass es gibt einen Eigenwert (In diesem Beispiel ist es entweder 1 oder -1)? (Wenn richtig verstanden, die power-iteration gibt nur einen Eigenwert.) Wie kann ich eigentlich berechnen einen Eigenwert?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die power-Methode nicht konvergiert, für Ihre matrix.
Aus der wikipedia-Seite:
Lambda_1 und lambda_2 sind die zwei höchsten Absolutwert der Eigenwerte. In Ihrem Fall, Sie sind 1 und -1, so dass die Konvergenz-Verhältnis|1/-1| = 1. In anderen Worten, der Fehler bleibt der gleiche, die bei jedem Durchlauf, so dass die power-Methode funktioniert nicht.
Andere Art zu verstehen ist, dass die matrix nimmt ein paar (a,b) und kehrt es um (b,a). Die Antwort, die Sie erhalten, wird einfach davon abhängen, ob Sie eine gerade oder ungerade Anzahl von Iterationen.
lambda_{1, 2}
überhaupt? Wenn ich verwendet verschiedene matrix, sagen[[0.0, 2.0], [1.0, 0.0]]
es immer noch nicht konvergieren..?