Voor een reële, vierkante, symmetrische matrix kan steeds
een orthonormale basis van eigenvectoren gevonden worden. Deze basis kan gevonden worden door
in NumPy de eigenvectoren van de matrix te bepalen. In deze opdracht
zoeken we de ontbinding van een willekeurige kolomvector (dimensie )
als lineaire combinatie van deze eigenvectoren, namelijk
waarbij dus eigenvectoren van voorstellen.
Merk op dat je de grootheden makkelijk kan vinden uit
vermits de vectoren onderling loodrecht op elkaar staan en lengte 1 hebben. Hierin
staat voor het inwendig product van en .
Schrijf een functie ontbinding()
met twee argumenten, namelijk:
- de matrix (reëel, vierkant en symmetrisch), dimensie
- de te ontbinden kolomvector (reëel en met dimensie )
Deze argumenten zijn 2-dimensionale NumPy-tabellen (dus van het type array). Het resultaat
is een NumPy-rij (dus in 1 dimensie), die de gezochte ontbinding (dus de coëfficiënten
in bovenstaande uitdrukking) van voorstelt.
LET OP: je gebruikt hierbij de volgorde EN de basisvectoren zoals ze door de ingebouwde functies
van NumPy gegenereerd worden.
TIP: maak voor deze oefening o.a. gebruik van de functies uit de module
np.linalg
.
Voorbeeld
A = np.array([[ 0., 0., 5., -2.],
[ 0., -4., 7., 4.],
[ 5., 7., 18., 3.],
[ -2., 4., 3., 0.]])
x = np.array([[1.], [2.], [3.], [4.]])
print(ontbinding(A, x))
#[ 4.17551397 -2.63672248 2.34077227 0.36546242]