Voor een reële, vierkante $$N \times N$$ matrix $$\mathbf{A}$$ definiëren we dat
de reële, vierkante $$N \times N$$ matrix $$\mathbf{C}$$ een vierkantswortel van $$\mathbf{A}$$ is
indien $$\mathbf{C}^2 = \mathbf{A}$$. In deze opdracht gaan we op zoek naar een dergelijke vierkantswortel, gebruik makend van
een iteratief schema, namelijk
$$
\mathbf{Y}_0 = \mathbf{A}
$$
$$
\mathbf{Z}_0 = \mathbf{I_N}
$$
waarin $$\mathbf{I_N}$$ de $$N \times N$$ eenheidsmatrix voorstelt.
Voor $$k \gt 0$$:
$$
\mathbf{Y}_k = \frac{1}{2}(\mathbf{Y}_{k-1} + \mathbf{Z}_{k-1}^{-1})
$$
$$
\mathbf{Z}_k = \frac{1}{2}(\mathbf{Z}_{k-1} + \mathbf{Y}_{k-1}^{-1})
$$
Indien dit schema convergeert, dan convergeert $$\mathbf{Y_k}$$ naar een vierkantswortel uit $$\mathbf{A}$$.
Schrijf een functie wortel()
met als argumenten
np.linalg
.
A = np.array([[ 2.80149813, 0.54307116, -0.20599251, -0.23220974], [ 1.47565543, 3.42509363, -0.40262172, -0.72659176], [ 1.20599251, -0.32771536, 2.67602996, 1.07116105], [-1.98127341, 0.78838951, 0.42509363, 1.09737828]]) C = wortel(A, 3) print(C) #[[ 1.64791585 0.15904161 -0.05520955 -0.06493405] # [ 0.38273092 1.85084907 -0.09986797 -0.2300906 ] # [ 0.48781352 -0.15470858 1.62012923 0.40301925] # [-0.81562569 0.32728456 0.15588511 1.02807415]]