Produit de Kronecker de matrices [Python]

Les questions [P] utilisent Python. Pour {A=(a_{i,j})\in M_n(\mathbb C)} et {B\in M_p(\mathbb C)}, le produit de Kronecker {A\otimes B\in M_{np}(\mathbb C)} est défini par blocs : son bloc {(i,j)} est {a_{i,j}B}.

1. [P] Soit {A=\begin{pmatrix}4&2\\[4pt]1&3\end{pmatrix}}. Écrire Acroix(B) renvoyant {A\otimes B}. Former {C_1=A\otimes B_1} et {C_2=A\otimes B_2}, où
{B_1=\begin{pmatrix}1&2\\[4pt]2&1\end{pmatrix},\quad B_2=\begin{pmatrix}1&1&1\\[4pt]0&1&1\\[4pt]0&0&1\end{pmatrix}}Les matrices {C_1,C_2} sont-elles diagonalisables ?

2. Montrer que {(A,B)\mapsto A\otimes B} est bilinéaire.

Pour les questions 3 et 4, on pourra illustrer les résultats avec les exemples Python de la question 1.

3. Calculer {\operatorname{tr}(A\otimes B)}.

4. (a) Pour {A,A'\in M_n(\mathbb C)} et {B,B'\in M_p(\mathbb C)}, montrer que {(A\otimes B)(A'\otimes B')=AA'\otimes BB'}.

4. (b) Qu’en déduire si {A} et {B} sont inversibles ?

4. (c) Que dire de {A\otimes B} et {A'\otimes B'} si {A,A'} sont semblables et {B,B'} sont semblables ?

4. (d) Exprimer le rang de {A\otimes B}.

5. Si {A} et {B} sont diagonalisables, montrer que {A\otimes B} l’est.

Réciproquement, on suppose {A,B} non nulles et {A\otimes B} diagonalisable sur {\mathbb C}.

6. (a) Montrer que {B} n’est pas nilpotente.

6. (b) Si {A} est triangulaire, montrer que {B} est diagonalisable.

6. (c) On admet que {A\otimes B} et {B\otimes A} sont semblables. Démontrer le résultat général.

6. (d) Le résultat est-il vrai pour la diagonalisabilité sur {\mathbb R} ?

Compléments du corrigé

7. Calculer {\det(A\otimes B)}.

Une fonction générale, valable aussi pour des matrices rectangulaires, est :

Indications Python

np.array forme une matrice et np.block assemble des blocs. np.linalg.eig renvoie les valeurs propres et des vecteurs propres en colonnes ; np.linalg.matrix_rank calcule un rang numérique. np.trace, np.linalg.det et np.linalg.inv donnent trace, déterminant et inverse.