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?

InformationsquelleAutor Ecir Hana | 2014-03-07
Schreibe einen Kommentar