Centrotransposition-sol
Transcription
Centrotransposition-sol
Exercice 2015-016 : Algèbre linéaire, centro-transposition 1) import numpy as np def J(n): A=np.zeros((n,n)) for i in range(n): A[i,n-1-i]=1 return A 2) Là il suffit juste de lire la doc. ! import numpy.random as rd def randMatrix(n,p): # il suffit de lire la documentation !! return rd.randint(0,100,(n,p)) Comment conjecturer le rapport entre Jn et A ↦ Â ? >>>A=randMatrix(3,3) array([[75, 45, 78], [56, 28, 2], [11, 88, 19]]) >>>np.dot(A,J(3)) array([[ 78., 45., 75.], [ 2., 28., 56.], [ 19., 88., 11.]]) # on voit ça fait une symétrie par rapport à la colonne centrale. >>> np.dot(J(3),A) array([[ 11., 88., 19.], [ 56., 28., 2.], [ 75., 45., 78.]]) # cette fois symétrie par rapport à la ligne centrale .. d’où la solution >>> np.dot((np.dot(J(3),A)),J(3)) array([[ 19., 88., 11.], [ 2., 28., 56.], [ 78., 45., 75.]]) # qui donne bien l’image de A par la symétrie centrale demandée. Justification mathématique : montrons que ∀ A ∈ Mn (K), Jn .AJn = Â. n Soit (i, j) ∈ ⟦1, n⟧2 : (Jn AJn )(i, j) = ∑ (Jn A)(i, k)Jn (k, j). k=1 Par déf. de Jn le seul terme possiblement non nul est celui d’indice k = n + 1 − j. Donc (Jn AJn )(i, j) = (Jn A)(i, n + 1 − j) et encore par déf. du produit de matrices : n (Jn A)(i, n + 1 − j) = ∑ Jn (i, k)A(k, n + 1 − j). k=1 Encore par déf. de Jn ceci donne bien comme seul terme A(n + 1 − i, n + 1 − j). 3) def centro(A): n=len(A) C=np.zeros((n,n)) for i in range(n): for j in range(n): C[i,j]=A[n-1-i,n-1-j] return C 4) a) (M1) avec la déf. Linéarité évidente, et involutivité.... aussi puisque i ↦ (n + 1) − i est une involution et donc (i, j) ↦ (n + 1 − i, n + 1 − j) aussi. 1 ̂ = Jn AJn le produit étant bilinéaire on a la linéarité et (M2) Avec la relation A ̂ ̂ = J 2 AJ 2 , il suffit de montrer que J 2 = I. Or cela se calcule ou encore mieux, clairement A n n n ̂ Jn = Jn donc Jn3 = Jn et comme Jn est visiblement de rang n, donc inversible, on en déduit que Jn2 = I. b) (M1) avec la déf. Soit A, B dans Mn (K). n ̂ j) = (AB)(n + 1 − i, n + 1 − j) = ∑ A(n + 1 − i, k)B(k, n + 1 − j) Alors AB(i, (1) par déf. k=1 du produit de matrices. n n s=1 s=1 ̂B(i, ̂ j) = ∑ A(i, ̂ s)B(s, ̂ j) = ∑ A(n + 1 − i, n + 1 − s)B(n + 1 − s, n + 1 − j) Et A (2). ̂=A ̂B. ̂ Le changement de var. k = n + 1 − s permet de passer de (1) à (2) et donc AB 2 ̂ (M2) avec A = Jn AJn et Jn = In : c’est immédiat. ̂ −1 = I et donc ̂A Deuxième question : Comme Î = I, A.A−1 = In donne A n −1 ̂ −1 ̂ on a la seconde propriété A = A . ̂ = Jn AJn , en transposant, comme tJn = Jn , on a la conclusion. c) Avec A ̂ = Jn AJn on a det(A) ̂ = det(J 2 ) det(A) = det(A). d) Avec A n Remarque il peut être aussi amusant de déduire ce résultat des opérations d’échange de lignes et de colonnes que représentent les multiplications à gauche et à droite par Jn . 5) a) Analyse Soit M ∈ Mn (K) . Si on a un décomposition M = S + A avec S centrosymétrique ̂ ̂ = Ŝ − A ̂ ce qui donne nécessairement S = M + M et et A centroantisymétrique alors M 2 ̂ M −M A= . 2 Synthèse on vérifie que réciproquement les matrices ainsi définies conviennent bien (3 prop. à vérifier). b) Avec la décomposition précédente appliquée à une matrice M symétrique (resp. antisymétrique) , les deux matrices S et A obtenues sont encore symétriques (resp. antisymétriques) car la centrotransposition et la transpositions commutent Cela suffit pour conclure que Sn = (Sn ∩ Cn+ ) ⊕ (Sn ∩ Cn− ) et de même pour An et en recollant ces décompositions on a la somme directe demandée. Pour les dim. : on sait que dim(Sn ) = n(n + 1)/2 et dim(An ) = n(n − 1)/2. Si on note N = n(n + 1)/2. c) def decomp(M): MT=np.transpose(M) S=(M+MT)/2# la composante sym A=(M-MT)/2# la composante antisym S1=(S+centro(S))/2 S2=(S-centro(S))/2 A1=(A+centro(A))/2 A2=(A-centro(A))/2 return (S1,S2,A1,A2) 6) a) Comme dit dans la documentation np.concatenate permet de créer facilement des matrices par bloc. def Q(n): A=np.eye(n) B=J(n) M1=np.concatenate((A,-B),axis=1) M2=np.concatenate((B,A),axis=1) M=np.concatenate((M1,M2),axis=0) return M 2 b) Il est direct de vérifier que les colonnes de Qn sont toutes de normes 1 et deux à deux orthogonales pour le p.s. canonique. c) Si on n’a pas d’idée, on regarde la matrice de la dernière question ! Plus sérieusement : ou bien directement avec la déf. ou bien avec la caractérisation via J2n M J2n = M et le 0 Jn ̂ et C = B. ̂ produit par bloc en écrivant J2n = ( ), on obtient : D = A Jn 0 t B A ) alors tN = ( t D B Ensuite petit rappel si N = ( A C I Qn M Qn = ( n −Jn B In )( D Jn t Or ( In −Jn Jn A )( In C Jn A )( In C C ) et tJn = Jn donc D −Jn ). In B A + Jn C )=( D −Jn A + C A + Jn C Donc tQn M Qn = ( −Jn A + C t t B + Jn D ) −Jn B + D B + Jn D I )( n −Jn B + D Jn −Jn ). In A + Jn C + BJn + Jn DJn −AJn − Jn CJn + B + Jn D Donc tQn M Qn = ( ). −Jn A + C − Jn BJn + DJn Jn AJn − CJn − Jn B + D Comme Jn DJn = A et Jn BJn = C, on obtient : 2A + Jn C + BJn −AJn + Jn D t Qn M Qn = ( ). −Jn A + DJn 2D − CJn − Jn B Mais mieux comme Jn2 = I, l’égalité Jn DJn = A donna Jn D = AJn et de même avec B et C donc finalement : 2A + 2BJn 0 t Qn M Qn = ( ). 0 2D − 2Jn B 1 Comme par 4.b), Pn = √ Qn est une matrice orthogonale, la relation du 4.c) devient : 2 N = Pn−1 M Pn A + BJn 0 Donc det(M ) = det(N ) = det ( ) = det(A + BJn ) det(D − Jn B). 0 D − Jn B Enfin comme Jn2 = In , det(D − Jn B) = det(Jn (D − Jn B)Jn ) = det(A − BJn ). On a donc bien la conclusion : det(M ) = det(A + BJn ) det(A − BJn ). 7) Il faut bien penser aux résultats du 4. La matrice M est de la forme du 4. 1 Comme par 4.b) Pn = √ Qn est une matrice orthogonale, la relation du 4.c) devient : 2 N = Pn−1 M Pn A + BJn 0 Autrement dit les matrices M et N = ( ) sont semblables. 0 D − Jn B Il suffit de diagonaliser les matrices 2 × 2 formant les deux blocs. Si on est paresseux, on sait que numpy donne les valeurs propres : import numpy.linalg as alg M=[[4,1,-9,6],[3,2,-4,1],[1,-4,2,3],[6,-9,1,4]] print(alg.eigvals(M)) ## qui donne ici : [-4. 2. 6. 8.] 3