Matrices de Householder [Python]

On munit {\mathbb R^n} de sa base canonique {(e_1,\ldots,e_n)} et de son produit scalaire canonique. On note {[v]} la colonne des coordonnées de {v}. Pour {v\ne0}, {h(v)} est la réflexion par rapport à {(\mathbb Rv)^\perp}, et {H(v)} sa matrice. On pose {h(0)=\operatorname{Id}} et {H(0)=I_n}.

1. Montrer que {H(v)=I_n-2[v][v]^T/\|v\|^2} pour {v\ne0}.

Dans la question 2, on prend {n=4} et l’on utilise Python. On considère {M=\begin{pmatrix}23&-15&30&15\\[4pt]-4&-30&-15&55\\[4pt]-4&20&35&5\\[4pt]-8&40&-80&-65\end{pmatrix}}et les colonnes {v_1=(-12,1,1,2)^T}, {v_2=(0,-5,1,2)^T}, {v_3=(0,0,2,-1)^T}.

2. (a) [P] Former {M} et les colonnes {v_1,v_2,v_3}.

2. (b) [P] Écrire une fonction H(v) transformant une colonne {v} en {H(v)}. Former {H_1=H(v_1)}, {H_2=H(v_2)} et {H_3=H(v_3)}.

2. (c) [P] Calculer {M_1=H_1M}, {M_2=H_2M_1}, {M_3=H_3M_2}, et afficher les résultats arrondis à dix décimales.

2. (d) [P] En déduire {M=\Omega T}, où {\Omega} est orthogonale et {T} triangulaire supérieure.

2. (e) Pourquoi les {H_i} commutent-elles deux à deux ? Interpréter l’application associée à {\Omega}.

On revient au cas général {n\geq2}.

3. (a) Soit {u=(a_1,\ldots,a_n)} et {j\in\{1,\ldots,n\}}. Posons {u_j=(0,\ldots,0,a_j,\ldots,a_n)} et {v_j=u_j+\varepsilon\|u_j\|e_j}, avec {\varepsilon=1} si {a_j\geq0} et {-1} sinon. Montrer que {v_j=0} équivaut à {u_j=0}, puis que {h(v_j)(u)=(a_1,\ldots,a_{j-1},-\varepsilon\|u_j\|,0,\ldots,0)}

3. (b) Soit {M\in\mathcal M_n(\mathbb R)} inversible. Construire {v_1,\ldots,v_{n-1}} tels que les coefficients sous-diagonaux des {k} premières colonnes de {T_k=H(v_k)\cdots H(v_1)M} soient nuls. En déduire {M=\Omega T}.