We noemen een kolomvector $$\mathbf{x}$$, verschillend van de nulvector, die voldoet aan $$\mathbf{A x} = \lambda \mathbf{x}$$ een eigenvector van de reële matrix $$\mathbf{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 $$\mathbf{A}$$ kunnen we een eenvoudig iteratief schema gebruiken.

We construeren de rij van kolomvectoren $$\mathbf{x}$$, gegeven door

$$ \mathbf{x}_{n+1} = \frac{1}{||\mathbf{A} \mathbf{x}_n||} \mathbf{A} \mathbf{x}_n $$

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

Schrijf een functie 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 $$\mathbf{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 $$ || \mathbf{A} \mathbf{x}_n ||$$.

Argumenten

Resultaat

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

Voorbeeld

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

grootste_eigenwaarde(a, x0, 0.001) =
	(array([ 0.05415981,  0.29764915,  0.54113849,  0.78462783]), 68.93663131468722)