We noemen een kolomvector $$x$$, verschillend van de nulvector, die voldoet aan $$A x = \lambda x$$ een eigenvector van de reële matrix $$A$$, met bijhorende eigenwaarde $$\lambda$$. Het vinden van alle eigenvectoren en eigenwaarden van een matrix is vrij rekenintensief. Om echter de eigenvector te vinden die hoort bij de grootste, positieve eigenwaarde van $$A$$ kunnen we een eenvoudig iteratief schema gebruiken.

We construeren de rij van kolomvectoren $$x$$, gegeven door

$$ x_{n+1} = \frac{1}{||A x_n||} A x_n $$

Hierin stelt $$||v||$$ de norm van de vector $$v$$ voor, gedefinieerd als de vierkantswortel uit de som van de kwadraten van zijn componenten. Om de iteratie te starten, wordt een startvector $$x_0$$ opgegeven.

Schrijf een functie $$\verb!grootste_eigenwaarde()!$$ die van een gegeven reële matrix $$A$$ , met minstens één positieve reële eigenwaarde, een eigenvector horend bij de grootste positieve eigenwaarde van $$A$$ oplevert, volgens de geschetste procedure.

De functie heeft drie argumenten, namelijk:

De functie levert een tuple op bestaande uit de gezochte eigenvector samen met de bijhorende eigenwaarde op. Neem als waarde voor de eigenwaarde $$ || Ax_n ||$$.

Argumenten

Een NumPy-matrix, $$M>0$$ rijen en $$N>0$$ kolommen.

Resultaat

Een tuple bestaande uit een kolomvector en een reëel getal.

Voorbeeld

a =  np.matrix([[ 0.,  1.,  2.,  3.], [10., 11., 12., 13.], [20., 21., 22., 23.], [30., 31., 32., 33.]]) 
x0 = np.matrix([[1.], [1.], [1.], [1.]])  

grootste_eigenwaarde(a, x0, 0.001) =
	(matrix([[ 0.05415981],
        [ 0.29764915],
        [ 0.54113849],
        [ 0.78462783]]), 68.93663131468723)