Feuille d’exercices 7#

Objectifs

  • Vecteurs

  • Matrices

  • Résolution de systèmes linéaires

Exercice 1. Opérations élémentaires#

Question 1 : Effectuer les opérations élémentaires suivantes sur des vecteurs :

  1. Créer le vecteur à coefficients réels \(v = (1.2, 0, -\sqrt{2})\).

  2. Stocker dans \(w\) le vecteur nul (à coefficients réels) de longueur \(3\), puis effectuer le produit scalaire entre \(v\) et \(w\).

  3. Créer le vecteur à coefficients réels \(u = (0.4, -1, \frac{\pi}{4})\), puis calculer \(v - 3u\).

v = vector(RR, [1.2, 0, -sqrt(2)])
print(v)

w = zero_vector(RR, 3)
print(w)

ps = v.inner_product(w)
print(ps)

u = vector(RR, [0.4, -1, pi/4])
print(v - 3 * u)
(1.20000000000000, 0.000000000000000, -1.41421356237310)
(0.000000000000000, 0.000000000000000, 0.000000000000000)
0.000000000000000
(-2.22044604925031e-16, 3.00000000000000, -3.77040805256544)

Question 2 : Effectuer les opérations élémentaires suivantes sur des matrices à coefficients rationnels :

  1. Construire la matrice \(A = \begin{pmatrix} 2 & 0 \\ 1 & 1 \end{pmatrix}\) sur le corps des rationnels.

  2. Calculer le déterminant de \(A\), puis l’inverse \(A^{-1}\) de \(A\).

  3. Calculer la trace de \(A\) de deux manières : en utilisant la méthode trace(), puis en sommant « à la main » les deux valeurs diagonales.

  4. Construire la matrice \(B = \begin{pmatrix} -1 & 3 & -1 \\ 0 & 2 & 4 \end{pmatrix}\).

  5. Construire la matrice identité \(I_2\) de taille \(2 \times 2\) (que l’on stockera dans la variable I2 pour ne pas écraser le nombre complexe imaginaire pur)

  6. Calculer \(B^\top (A + 7 I_2)\).

A = matrix(QQ, [ [2, 0], [1, 1] ])
print(A)
[2 0]
[1 1]
print("Le déterminant vaut :", A.det())
print(A**(-1))
Le déterminant vaut : 2
[ 1/2    0]
[-1/2    1]
print("La trace vaut :", A.trace())
print("La trace vaut :", A[0,0] + A[1,1])
La trace vaut : 3
La trace vaut : 3
B = matrix(QQ, 2, 3,  [-1, 3, -1, 0, 2, 4] )
print(B)
[-1  3 -1]
[ 0  2  4]
I2 = matrix.identity(QQ, 2)
print(I2)
[1 0]
[0 1]
C = B.transpose() * (A + 7 * I2)
print(C)
[-9  0]
[29 16]
[-5 32]

Exercice 2. Noyau, image et théorème du rang#

Question 1 : Construire la matrice à coefficients rationnels

\[\begin{split} M = \begin{pmatrix} 1 & 1 & 1 & 1 \\ 2 & 3 & 4 & 5 \\ -1 & -2 & -3 & -4 \\ \end{pmatrix} \end{split}\]

puis calculer le noyau et l’image de l’application \(x \in \mathbf{Q}^4 \mapsto Mx \in \mathbf{Q}^3\).

M = matrix(QQ, 3, 4, [1, 1, 1, 1, 2, 3, 4, 5, -1, -2, -3, -4])
noyau = M.right_kernel()
image = M.column_space()

print("Matrice :")
print(M)
print("\nNoyau :")
print(noyau)
print("\nImage :")
print(image)
Matrice :
[ 1  1  1  1]
[ 2  3  4  5]
[-1 -2 -3 -4]

Noyau :
Vector space of degree 4 and dimension 2 over Rational Field
Basis matrix:
[ 1  0 -3  2]
[ 0  1 -2  1]

Image :
Vector space of degree 3 and dimension 2 over Rational Field
Basis matrix:
[ 1  0  1]
[ 0  1 -1]

Question 2 : Vérifier que le théorème du rang est bien satisfait pour la matrice \(M\).

print(M.rank() + M.right_kernel().dimension() == M.ncols())
True

Exercice 3. Résolution de systèmes linéaires#

Question 1 : Trouver une solution au système linéaire :

\[\begin{split} \left\{ \begin{array}{cccccccc} - &x & & & + &2 z & = & 1 \\ & & &y & + &z & = & 2 \\ &x & - &2 y & - &5z & = & 3 \end{array} \right. \end{split}\]

On vérifiera que la solution donnée par Sagemath est bien correcte.

A = matrix(3, 3, [-1, 0, 2, 0, 1, 1, 1, -2, -5])
b = vector([1, 2, 3])
x = A.solve_right(b)
print(x)
print(A*x == b)
(-17, 10, -8)
True

Question 2 : Décrire l’ensemble des solutions du système d’équations linéaires

\[\begin{split} \left\{ \begin{array}{cccccccccc} - &x & & & + &2 z & - & t & = & 1 \\ &3x & + &2y & + &z & + & 2t & = & 2 \\ &x & - &2 y & - &5z && & = & 3 \end{array} \right. \end{split}\]
A = matrix(3, 4, [-1, 0, 2, -1, 3, 2, 1, 2, 1, -2, -5, 0])
b = vector([1, 2, 3])
x = A.solve_right(b)
K = A.right_kernel()
print("Les solutions de la forme x + v avec")
print("x = ", x)
print("et v un élément de l'espace vectoriel engendré par ")
print(K.basis())
Les solutions de la forme x + v avec
x =  (7/2, -43/8, 9/4, 0)
et v un élément de l'espace vectoriel engendré par 
[
(0, 5, -2, -4)
]

Exercice 4 : transposée et matrice symétrique#

Question 1. Créer la matrice \(V\) de taille \(8 \times 8\) ayant comme coefficient \((i, j)\) l’entier \(j^{i-1}\) pour \(1 \le i \le 8\) et \(1 \le j \le 8\).

n = 8
L = [ [j**i for j in range(1, n+1)] for i in range(0, n) ]
V = matrix(QQ, L)
print(V)
[      1       1       1       1       1       1       1       1]
[      1       2       3       4       5       6       7       8]
[      1       4       9      16      25      36      49      64]
[      1       8      27      64     125     216     343     512]
[      1      16      81     256     625    1296    2401    4096]
[      1      32     243    1024    3125    7776   16807   32768]
[      1      64     729    4096   15625   46656  117649  262144]
[      1     128    2187   16384   78125  279936  823543 2097152]

Question 2. Calculer la transposée \(V^\top\) de la matrice \(V\). Puis, vérifier avec le mot-clef all que \(V_{i,j} = V^\top_{j ,i}\) pour tous \(1 \le i \le 8\) et \(1 \le j \le 8\).

Vt = V.transpose()
test = all( V[i,j] == Vt[j,i] for i in range(8) for j in range(8) )
print(test)
True

Question 3. Calculer \(S = V \cdot V^\top\) et vérifier que \(S\) est symétrique avec la méthode is_symmetric().

S = V * Vt
print(S.is_symmetric())
True

La matrice \(V\) est une matrice de Vandermonde. On sait donc théoriquement que son déterminant est

\[ {\rm det}(V) = \prod_{1 \le k < j \le 8} (j - k) \]

Question 4. Vérifier le résultat énoncé ci-dessus.

D = 1
for k in range(1, 9):
    for j in range(k+1, 9):
        D *= (j-k)
det = V.determinant()
print(det)
print(D)
print(D == det)
125411328000
125411328000
True

Exercice 5 : base et famille libre#

Soient \(u, v, w\) les trois vecteurs suivants :

\[\begin{split} u = \begin{pmatrix} -104 \\ 242 \\ -17 \\ 330 \end{pmatrix}, \quad v = \begin{pmatrix} 322 \\ -744 \\ 90 \\ -1119 \end{pmatrix}, \quad w = \begin{pmatrix} -19 \\ 43 \\ -9 \\ 76 \end{pmatrix} \end{split}\]

Question 1 : Les trois vecteurs \(u\), \(v\) et \(w\) forment-ils une famille libre dans \(\mathbb{Q}^4\) ?

u = [-104, 242, -17, 330]
v = [322, -744, 90, -1119]
w = [-19, 43, -9, 76]

M = matrix(QQ, [u, v, w])
print(M.rank())
3

Le rang est \(3\), donc la famille est libre.

Question 2 (plus ouverte) : Compléter \((u, v, w)\) avec un vecteur \(z \in \mathbb{Q}^4\) pour former une base de \(\mathbb{Q}^4\), de sorte que la matrice \(M\) formée des \(4\) vecteurs \((u, v, w, z)\) soit de déterminant égal à \(1\).

Idée : on tire des vecteurs \(z\) aléatoires dans l’espace \(\mathbb{Q}^4\), puis on teste si \(z\) complète la famille libre \((u, v, w)\) en une base. Si ce n’est pas le cas, on recommence. si c’est le cas, il ne reste plus qu’à normaliser \(z\).

z = vector(QQ, [randint(-5, 5) for i in range(4)])
while (z in M.row_space()):
    z = vector(QQ, [randint(-5, 5) for i in range(4)])
N = matrix(QQ, [u, v, w, z])
print(N.det())
z = z/N.det()
N = matrix(QQ, [u, v, w, z]) 
print(N)
print(N.det())
-33420
[   -104     242     -17     330]
[    322    -744      90   -1119]
[    -19      43      -9      76]
[-1/8355       0 1/33420 -1/6684]
1