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