Voor een reële, vierkante, symmetrische $$N \times N$$ matrix $$\mathbf{A}$$ kan steeds een orthonormale basis van eigenvectoren gevonden worden. Deze basis kan gevonden worden door in NumPy de eigenvectoren van de matrix $$\mathbf{A}$$ te bepalen. In deze opdracht zoeken we de ontbinding van een willekeurige kolomvector $$\mathbf{x}$$ (dimensie $$N \times 1$$) als lineaire combinatie van deze eigenvectoren, namelijk

$$ \vec{x} = \sum_{i = 0}^{N - 1} c_i \vec{e_i} $$

waarbij $$\vec{e_i}$$ dus eigenvectoren van $$\mathbf{A}$$ voorstellen.
Merk op dat je de grootheden $$c_i$$ makkelijk kan vinden uit

$$ \vec{x} \cdot \vec{e_i} = c_i $$

vermits de vectoren $$\vec{e_i}$$ onderling loodrecht op elkaar staan en lengte 1 hebben. Hierin staat $$\vec{x} \cdot \vec{e_i} $$ voor het inwendig product van $$\vec{x}$$ en $$\vec{e_i}$$. Schrijf een functie ontbinding() met twee argumenten, namelijk:

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 $$c_i$$ in bovenstaande uitdrukking) van $$\mathbf{x}$$ 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]