Diapositive 2 / 159
L1 - Mathématiques
Diapositive 2 / 159
Diapositive 3 / 159
Diapositive 4 / 159
Diapositive 5 / 159
Diapositive 6 / 159
Diapositive 7 / 159
Diapositive 8 / 159
Diapositive 9 / 159
Diapositive 10 / 159
Diapositive 11 / 159
Diapositive 12 / 159
Diapositive 13 / 159
Diapositive 14 / 159
def transpose(A):
"""
Transpose une matrice A.
A est une liste de listes.
"""
if not A or not A[0]:return []
n = len(A) # nombre de lignes
p = len(A[0]) # nombre de colonnes
# Matrice transposee (p lignes, n colonnes)
AT = []
for j in range(p):
ligne = []
for i in range(n):
ligne.append(A[i][j])
AT.append(ligne)
return ATDiapositive 15 / 159
# Exemple
A = [[1.5, -2.3], [4.0, 0.5], [-1.2, 3.7]]
AT = transpose(A)
print("A^T =", AT)
# Resultat : [[1.5, 4.0, -1.2], [-2.3, 0.5, 3.7]]Diapositive 16 / 159
import numpy as np
# Exemple 1 : matrice reelle
A = np.array([[1.5, -2.3],
[4.0, 0.5],
[-1.2, 3.7]])
AT = A.T
print("A^T =\n", AT)
# Exemple 2 : matrice binaire
B = np.array([[1, 0, 1, 1],
[0, 1, 0, 1]])
BT = B.T
print("\nB^T =\n", BT)Diapositive 17 / 159
# Exemple 3 : matrice modulo 2
C = np.array([[0, 1, 1],
[1, 0, 1],
[1, 1, 0],
[0, 0, 1]])
CT = C.T
print("\nC^T =\n", CT)Diapositive 18 / 159
Diapositive 19 / 159
Diapositive 20 / 159
Diapositive 21 / 159
Diapositive 22 / 159
Diapositive 23 / 159
Diapositive 24 / 159
Diapositive 25 / 159
def addition(A, B, modulo=None):
"""
Additionne deux matrices A et B.
Si modulo est specifie, effectue l'addition modulo
"""
n = len(A)
p = len(A[0])
C = []
for i in range(n):
ligne = []
for j in range(p):
somme = A[i][j] + B[i][j]
if modulo is not None:
somme = somme % modulo
ligne.append(somme)
C.append(ligne)
return CDiapositive 26 / 159
# Exemple modulo 2
E = [[1, 0, 1], [0, 1, 0], [1, 1, 0]]
F = [[1, 1, 0], [1, 1, 1], [0, 1, 1]]
EplusF = addition(E, F, modulo=2)
print("E + F (mod 2) =", EplusF)Diapositive 27 / 159
import numpy as np
# Exemple 1 : matrices reelles
A = np.array([[2.5, -1.0, 3.2],
[0.5, 4.1, -2.3]])
B = np.array([[1.5, 2.0, -1.2],
[3.0, -0.1, 1.8]])
C = A + B
print("A + B =\n", C)
# Exemple 2 : matrices binaires
C = np.array([[1, 0], [1, 1], [0, 1]])
D = np.array([[0, 1], [1, 0], [1, 1]])
CD = C + D
print("\nC + D =\n", CD)Diapositive 28 / 159
# Exemple 3 : matrices modulo 2
E = np.array([[1, 0, 1], [0, 1, 0], [1, 1, 0]])
F = np.array([[1, 1, 0], [1, 1, 1], [0, 1, 1]])
EF = (E + F) % 2
print("\nE + F (mod 2) =\n", EF)Diapositive 29 / 159
Diapositive 30 / 159
Diapositive 31 / 159
Diapositive 32 / 159
Diapositive 33 / 159
Diapositive 34 / 159
Diapositive 35 / 159
Diapositive 36 / 159
Diapositive 37 / 159
def produit(A, B, modulo=None):
"""
Calcule le produit de deux matrices A et B.
"""
n = len(A) # lignes de A
p = len(A[0]) # colonnes de A = lignes de B
q = len(B[0]) # colonnes de B
C = []
for i in range(n):
ligne = []
for j in range(q):
somme = 0
for k in range(p):
somme += A[i][k] * B[k][j]
if modulo is not None:
somme = somme % modulo
ligne.append(somme)
C.append(ligne)
return CDiapositive 38 / 159
# Exemple
E = [[1, 0, 1], [1, 1, 0]]
F = [[0, 1], [1, 1], [1, 0]]
EF = produit(E, F, modulo=2)
print("EF (mod 2) =", EF)Diapositive 39 / 159
import numpy as np
# Exemple 1 : matrices reelles
A = np.array([[1, 2, 3], [4, 5, 6]])
B = np.array([[1, 2], [0, 1], [-1, 0]])
AB = np.dot(A, B) # ou A @ B
print("AB =\n", AB)
# Exemple 2 : matrices binaires
C = np.array([[1, 0], [1, 1], [0, 1]])
D = np.array([[1, 1, 0], [0, 1, 1]])
CD = np.dot(C, D)
print("\nCD =\n", CD)
# Exemple 3 : matrices modulo 2
E = np.array([[1, 0, 1], [1, 1, 0]])
F = np.array([[0, 1], [1, 1], [1, 0]])
EF = np.dot(E, F) % 2
print("\nEF (mod 2) =\n", EF)Diapositive 40 / 159
Diapositive 41 / 159
Diapositive 42 / 159
Diapositive 43 / 159
Diapositive 44 / 159
def mult_scalaire(lambda_val, A, modulo=None):
"""
Multiplie une matrice A par un scalaire lambda_val.
"""
n = len(A)
p = len(A[0])
C = []
for i in range(n):
ligne = []
for j in range(p):
produit = lambda_val * A[i][j]
if modulo is not None:
produit = produit % modulo
ligne.append(produit)
C.append(ligne)
return CDiapositive 45 / 159
# Exemple 1
A = [[4, -2, 6], [0, 8, -4]]
lambda_A = mult_scalaire(2.5, A)
print("2.5 * A =", lambda_A)
# Exemple 2 (modulo 2)
C = [[1, 0, 1, 1], [0, 1, 0, 1]]
lambda_C = mult_scalaire(1, C, modulo=2)
print("1 * C (mod 2) =", lambda_C)Diapositive 46 / 159
import numpy as np
# Exemple 1 : matrice reelle
A = np.array([[4, -2, 6],
[0, 8, -4]])
lambda_A = 2.5 * A
print("2.5 * A =\n", lambda_A)
# Exemple 2 : matrice binaire (mult par 0)
B = np.array([[1, 1],
[0, 1],
[1, 0]])
lambda_B = 0 * B
print("\n0 * B =\n", lambda_B)
# Exemple 3 : matrice modulo 2
C = np.array([[1, 0, 1, 1],
[0, 1, 0, 1]])
lambda_C = (1 * C) % 2
print("\n1 * C (mod 2) =\n", lambda_C)Diapositive 47 / 159
Diapositive 48 / 159
Diapositive 49 / 159
Diapositive 50 / 159
Diapositive 51 / 159
Diapositive 52 / 159
Diapositive 53 / 159
Diapositive 54 / 159
Diapositive 55 / 159
Diapositive 56 / 159
def matrice_base(n, p, i, j):
"""
Cree la matrice de base E_ij de M_n,p.
"""
E = []
for k in range(n):
ligne = []
for l in range(p):
if k == i and l == j:
ligne.append(1)
else:
ligne.append(0)
E.append(ligne)
return E
def decomposition(A):
"""
Decompose A sur la base canonique.
"""
n = len(A)
p = len(A[0])
decomp = []
for i in range(n):
for j in range(p):
if A[i][j] != 0:
decomp.append((A[i][j], i, j))
return decomp
# Exemple
A = [[3, -2], [5, 1]]
dec = decomposition(A)
print("Decomposition :", dec)Diapositive 57 / 159
import numpy as np
def matrice_base_np(n, p, i, j):
"""
Cree la matrice de base E_ij de M_n,p.
"""
E = np.zeros((n, p))
E[i, j] = 1
return E
# Exemple 1 : Base de M_2,2
E11 = matrice_base_np(2, 2, 0, 0)
E12 = matrice_base_np(2, 2, 0, 1)
E21 = matrice_base_np(2, 2, 1, 0)
E22 = matrice_base_np(2, 2, 1, 1)Diapositive 58 / 159
# Decomposition d'une matrice
A = np.array([[3, -2], [5, 1]])
print("A =\n", A)
print("\nA = 3*E11 - 2*E12 + 5*E21 + 1*E22")
verif = 3*E11 - 2*E12 + 5*E21 + 1*E22
print("\nVerification :\n", verif)Diapositive 59 / 159
Diapositive 60 / 159
Diapositive 61 / 159
Diapositive 62 / 159
Diapositive 63 / 159
def est_diagonale(A):
"""Verifie si A est diagonale."""
n = len(A)
for i in range(n):
for j in range(len(A[0])):
if i != j and A[i][j] != 0:
return False
return True
def est_symetrique(A):
"""Verifie si A est symetrique."""
n = len(A)
if n != len(A[0]):
return False
for i in range(n):
for j in range(n):
if A[i][j] != A[j][i]:
return False
return TrueDiapositive 64 / 159
# Exemple
S = [[1, 2, 3], [2, 4, 5], [3, 5, 6]]
print("S est symetrique :", est_symetrique(S))
D = [[2, 0, 0], [0, -3, 0], [0, 0, 5]]
print("D est diagonale :", est_diagonale(D))Diapositive 65 / 159
import numpy as np
# Creation de matrices particulieres
D = np.diag([2, -3, 5]) # Matrice diagonale
print("Matrice diagonale D :\n", D)
# Matrice triangulaire superieure
U = np.triu([[1, 4, 7], [8, 2, 5], [9, 6, 3]])
print("\nMatrice triangulaire sup. U :\n", U)
# Test de symetrie
S = np.array([[1, 2, 3], [2, 4, 5], [3, 5, 6]])
est_sym = np.allclose(S, S.T)
print("\nS est symetrique :", est_sym)
# Matrice antisymetrique
A = np.array([[0, 1, -2], [-1, 0, 3], [2, -3, 0]])
est_antisym = np.allclose(A, -A.T)
print("A est antisymetrique :", est_antisym)Diapositive 66 / 159
Diapositive 67 / 159
Diapositive 68 / 159
Diapositive 69 / 159
Diapositive 70 / 159
Diapositive 71 / 159
Diapositive 72 / 159
def trace(A, modulo=None):
"""
Calcule la trace d'une matrice carree A.
"""
n = len(A)
tr = 0
for i in range(n):
tr += A[i][i]
if modulo is not None:
tr = tr % modulo
return trDiapositive 73 / 159
# Exemple 1
A = [[5, 2, -1], [3, -4, 7], [0, 6, 2]]
print("tr(A) =", trace(A))
# Exemple 2
B = [[1, 0, 1, 1], [0, 1, 0, 1],
[1, 1, 0, 0], [0, 1, 1, 1]]
print("tr(B) =", trace(B))
# Exemple 3 (modulo 2)
C = [[1, 0, 1], [1, 1, 0], [0, 1, 1]]
print("tr(C) mod 2 =", trace(C, modulo=2))Diapositive 74 / 159
import numpy as np
# Exemple 1 : matrice reelle
A = np.array([[5, 2, -1],
[3, -4, 7],
[0, 6, 2]])
tr_A = np.trace(A)
print("tr(A) =", tr_A)
# Exemple 2 : matrice binaire
B = np.array([[1, 0, 1, 1],
[0, 1, 0, 1],
[1, 1, 0, 0],
[0, 1, 1, 1]])
tr_B = np.trace(B)
print("tr(B) =", tr_B)Diapositive 75 / 159
# Exemple 3 : matrice modulo 2
C = np.array([[1, 0, 1],
[1, 1, 0],
[0, 1, 1]])
tr_C = np.trace(C) % 2
print("tr(C) mod 2 =", tr_C)Diapositive 76 / 158
| Opération | Notation | Dimensions |
| Transposition | $A^T$ | $\mathcal{M}_{n,p} \to \mathcal{M}_{p,n}$ |
| Addition | $A + B$ | $\mathcal{M}_{n,p} \times \mathcal{M}_{n,p} \to \mathcal{M}_{n,p}$ |
| Mult. scalaire | $\lambda A$ | $\mathbb{K} \times \mathcal{M}_{n,p} \to \mathcal{M}_{n,p}$ |
| Produit | $AB$ | $\mathcal{M}_{n,p} \times \mathcal{M}_{p,q} \to \mathcal{M}_{n,q}$ |
| Trace | $\text{tr}(A)$ | $\mathcal{M}_n \to \mathbb{K}$ |
Diapositive 77 / 159
Diapositive 78 / 159
Diapositive 79 / 159
Diapositive 80 / 159
Diapositive 81 / 159
Diapositive 82 / 159
Diapositive 83 / 159
Diapositive 84 / 159
Diapositive 85 / 159
Diapositive 86 / 159
Diapositive 87 / 159
Diapositive 88 / 159
Diapositive 89 / 159
Diapositive 90 / 159
Diapositive 91 / 159
Diapositive 92 / 159
def det_2x2(A):
"""
Calcule le determinant d'une matrice 2x2.
"""
a, b = A[0][0], A[0][1]
c, d = A[1][0], A[1][1]
return a * d - b * c
# Exemple 1
A = [[3, 5], [2, 4]]
print("det(A) =", det_2x2(A))
# Exemple 2
B = [[2, 4], [1, 2]]
print("det(B) =", det_2x2(B))
# Exemple 3
C = [[0.5, 0.75], [-2/3, 1/6]]
print("det(C) =", det_2x2(C))Diapositive 93 / 159
# Test d'inversibilite
def est_inversible(A):
return det_2x2(A) != 0
print("A inversible ?", est_inversible(A))
print("B inversible ?", est_inversible(B))Diapositive 94 / 159
import numpy as np
# Exemple 1
A = np.array([[3, 5],
[2, 4]])
det_A = np.linalg.det(A)
print("det(A) =", det_A)
# Exemple 2
B = np.array([[2, 4],
[1, 2]])
det_B = np.linalg.det(B)
print("det(B) =", det_B)
# Exemple 3
C = np.array([[0.5, 0.75],
[-2/3, 1/6]])
det_C = np.linalg.det(C)
print("det(C) =", det_C)Diapositive 95 / 159
# Test d'inversibilite
print("A inversible ?", det_A != 0)
print("B inversible ?", np.abs(det_B) > 1e-10)Diapositive 96 / 159
Diapositive 97 / 158
| 1 | 2 | 3 | 1 | 2 |
| 0 | 1 | 4 | 0 | 1 |
| 5 | 6 | 0 | 5 | 6 |
Diapositive 98 / 159
Diapositive 99 / 159
Diapositive 100 / 159
Diapositive 101 / 159
Diapositive 102 / 159
def det_3x3(A):
"""
Calcule le determinant d'une matrice 3x3
par la regle de Sarrus.
"""
# Diagonales descendantes (positives)
diag_desc = (A[0][0]*A[1][1]*A[2][2] +
A[0][1]*A[1][2]*A[2][0] +
A[0][2]*A[1][0]*A[2][1])
# Diagonales montantes (negatives)
diag_mont = (A[0][2]*A[1][1]*A[2][0] +
A[0][0]*A[1][2]*A[2][1] +
A[0][1]*A[1][0]*A[2][2])
return diag_desc - diag_montDiapositive 103 / 159
# Exemples
A = [[1, 2, 3], [0, 1, 4], [5, 6, 0]]
print("det(A) =", det_3x3(A))
D = [[2, 0, 0], [0, -3, 0], [0, 0, 5]]
print("det(D) =", det_3x3(D))
B = [[1, 2, 3], [2, 4, 6], [1, 1, 1]]
print("det(B) =", det_3x3(B))Diapositive 104 / 159
import numpy as np
# Exemple 1
A = np.array([[1, 2, 3],
[0, 1, 4],
[5, 6, 0]])
det_A = np.linalg.det(A)
print("det(A) =", det_A)
# Exemple 2 : matrice diagonale
D = np.array([[2, 0, 0],
[0, -3, 0],
[0, 0, 5]])
det_D = np.linalg.det(D)
print("det(D) =", det_D)Diapositive 105 / 159
# Exemple 3 : matrice singuliere
B = np.array([[1, 2, 3],
[2, 4, 6],
[1, 1, 1]])
det_B = np.linalg.det(B)
print("det(B) =", det_B)
print("B inversible ?", np.abs(det_B) > 1e-10)Diapositive 106 / 159
Diapositive 107 / 159
Diapositive 108 / 159
Diapositive 109 / 159
Diapositive 110 / 159
def inverse_2x2(A):
"""
Calcule l'inverse d'une matrice 2x2.
Retourne None si non inversible.
"""
a, b = A[0][0], A[0][1]
c, d = A[1][0], A[1][1]
det = a * d - b * c
if det == 0:
return None
inv = [[d/det, -b/det],
[-c/det, a/det]]
return invDiapositive 111 / 159
# Exemples
A = [[3, 5], [2, 4]]
A_inv = inverse_2x2(A)
print("A^-1 =", A_inv)
B = [[1, 2], [3, 7]]
B_inv = inverse_2x2(B)
print("B^-1 =", B_inv)Diapositive 112 / 159
import numpy as np
# Exemple 1
A = np.array([[3, 5],
[2, 4]])
A_inv = np.linalg.inv(A)
print("A^-1 =\n", A_inv)
# Verification
verif = np.dot(A, A_inv)
print("\nAA^-1 =\n", verif)
# Exemple 2 : Identite
I = np.eye(2)
I_inv = np.linalg.inv(I)
print("\nI^-1 =\n", I_inv)
# Exemple 3
B = np.array([[1, 2],
[3, 7]])
B_inv = np.linalg.inv(B)
print("\nB^-1 =\n", B_inv)Diapositive 113 / 158
| Opération | Notation | Dimensions |
| Transposition | $A^T$ | $\mathcal{M}_{n,p} \to \mathcal{M}_{p,n}$ |
| Addition | $A + B$ | $\mathcal{M}_{n,p} \times \mathcal{M}_{n,p} \to \mathcal{M}_{n,p}$ |
| Mult. scalaire | $\lambda A$ | $\mathbb{K} \times \mathcal{M}_{n,p} \to \mathcal{M}_{n,p}$ |
| Produit | $AB$ | $\mathcal{M}_{n,p} \times \mathcal{M}_{p,q} \to \mathcal{M}_{n,q}$ |
| Trace | $\text{tr}(A)$ | $\mathcal{M}_n \to \mathbb{K}$ |
| det | $\text{det}(A)$ | $\mathcal{M}_n \to \mathbb{K}$ |
| Inverse | $A^{-1}$ | $\mathcal{M}_n \to \mathcal{M}_n$ |
Diapositive 114 / 159
Diapositive 115 / 159
Diapositive 116 / 159
Diapositive 117 / 159
Diapositive 118 / 159
Diapositive 119 / 159
Diapositive 120 / 159
Diapositive 121 / 159
Diapositive 122 / 159
def resoudre_systeme_2x2(A, B):
"""
Resout AX = B pour un systeme 2x2.
"""
A_inv = inverse_2x2(A)
if A_inv is None:
return None
# Produit matrice-vecteur
x = A_inv[0][0]*B[0] + A_inv[0][1]*B[1]
y = A_inv[1][0]*B[0] + A_inv[1][1]*B[1]
return [x, y]Diapositive 123 / 159
# Exemple 1
A = [[3, 5], [2, 4]]
B = [16, 12]
solution = resoudre_systeme_2x2(A, B)
print("Solution :", solution)
# Exemple 2
A2 = [[1, 2], [3, 7]]
B2 = [5, 16]
solution2 = resoudre_systeme_2x2(A2, B2)
print("Solution 2 :", solution2)Diapositive 124 / 159
import numpy as np
# Exemple 1 : Systeme 2x2
A = np.array([[3, 5],
[2, 4]])
B = np.array([16, 12])
X = np.linalg.solve(A, B)
print("Solution :", X)
# Verification
verif = np.dot(A, X)
print("AX =", verif, " B =", B)Diapositive 125 / 159
# Exemple 2
A2 = np.array([[1, 2],
[3, 7]])
B2 = np.array([5, 16])
X2 = np.linalg.solve(A2, B2)
print("\nSolution 2 :", X2)
# Exemple 3 : Systeme 3x3
A3 = np.array([[1, 2, 3], [0, 1, 4], [5, 6, 0]])
B3 = np.array([14, 13, 19])
X3 = np.linalg.solve(A3, B3)
print("\nSolution 3 :", X3)Diapositive 126 / 159
Diapositive 127 / 158
Diapositive 128 / 159
Diapositive 129 / 159
Diapositive 130 / 159
Diapositive 131 / 159
def cramer_2x2(A, B):
"""
Resout un systeme 2x2 avec Cramer.
"""
det_A = det_2x2(A)
if det_A == 0:
return None
# Determinant pour x (remplacer col 1 par B)
A1 = [[B[0], A[0][1]],
[B[1], A[1][1]]]
det_A1 = det_2x2(A1)
x = det_A1 / det_A
# Determinant pour y (remplacer col 2 par B)
A2 = [[A[0][0], B[0]],
[A[1][0], B[1]]]
det_A2 = det_2x2(A2)
y = det_A2 / det_A
return [x, y]Diapositive 132 / 159
# Exemple
A = [[3, 5], [2, 4]]
B = [16, 12]
sol = cramer_2x2(A, B)
print("Solution (Cramer) :", sol)Diapositive 133 / 159
import numpy as np
def cramer_np(A, B):
"""Resout avec Cramer."""
n = A.shape[0]
det_A = np.linalg.det(A)
if abs(det_A) < 1e-10:
return None
solution = []
for i in range(n):
A_i = A.copy()
A_i[:, i] = B
det_A_i = np.linalg.det(A_i)
solution.append(det_A_i / det_A)
return np.array(solution)Diapositive 134 / 159
# Exemple 1 : 2x2
A = np.array([[3, 5], [2, 4]], dtype=float)
B = np.array([16, 12], dtype=float)
sol = cramer_np(A, B)
print("Solution (Cramer) :", sol)
# Exemple 2 : 3x3
A3 = np.array([[1, 2, 3], [0, 1, 4], [5, 6, 0]],
dtype=float)
B3 = np.array([14, 13, 19], dtype=float)
sol3 = cramer_np(A3, B3)
print("\nSolution 3x3 :", sol3)Diapositive 135 / 159
Diapositive 136 / 159
Diapositive 137 / 159
Diapositive 138 / 159
Diapositive 139 / 159
Diapositive 140 / 159
import math
def valeurs_propres_2x2(A):
"""
Calcule les valeurs propres d'une matrice 2x2.
"""
tr = A[0][0] + A[1][1]
det = det_2x2(A)
delta = tr**2 - 4*det
if delta < 0: return None
lambda1 = (tr + math.sqrt(delta)) / 2
lambda2 = (tr - math.sqrt(delta)) / 2
return [lambda1, lambda2]Diapositive 141 / 159
def vecteur_propre_2x2(A, lambda_val):
"""Trouve un vecteur propre."""
a = A[0][0] - lambda_val
b = A[0][1]
if abs(b) > 1e-10:
return [1, -a/b]
else:
return [0, 1]Diapositive 142 / 159
# Exemple 1
A = [[4, 1], [2, 3]]
vp = valeurs_propres_2x2(A)
print("Valeurs propres de A :", vp)
for i, lambda_val in enumerate(vp):
v = vecteur_propre_2x2(A, lambda_val)
print(f"Vecteur propre {i+1} :", v)
# Exemple 2 : Matrice diagonale
D = [[3, 0], [0, -5]]
vp_D = valeurs_propres_2x2(D)
print("\nValeurs propres de D :", vp_D)
# Exemple 3 : Matrice symetrique
S = [[2, 1], [1, 2]]
vp_S = valeurs_propres_2x2(S)
print("\nValeurs propres de S :", vp_S)Diapositive 143 / 159
for i, lambda_val in enumerate(vp_S):
v = vecteur_propre_2x2(S, lambda_val)
print(f"Vecteur propre {i+1} :", v)Diapositive 144 / 159
import numpy as np
# Exemple 1
A = np.array([[4, 1],
[2, 3]])
valeurs_propres, vecteurs_propres = np.linalg.eig(A)
print("Valeurs propres de A :", valeurs_propres)
print("Vecteurs propres de A :\n", vecteurs_propres)
# Verification : A*v = lambda*v
v1 = vecteurs_propres[:, 0]
lambda1 = valeurs_propres[0]
print("\nAv1 =", np.dot(A, v1))
print("lambda1*v1 =", lambda1 * v1)Diapositive 145 / 159
# Exemple 2 : Matrice diagonale
D = np.array([[3, 0],
[0, -5]])
vp_D, vec_D = np.linalg.eig(D)
print("\n\nValeurs propres de D :", vp_D)
print("Vecteurs propres de D :\n", vec_D)Diapositive 146 / 159
Diapositive 147 / 159
Diapositive 148 / 159
Diapositive 149 / 159
Diapositive 150 / 159
import numpy as np
# Exemple 1 : Matrice diagonale
D = np.array([[2, 0, 0],
[0, -1, 0],
[0, 0, 4]])
vp_D, vec_D = np.linalg.eig(D)
print("Valeurs propres de D :", vp_D)
print("Vecteurs propres de D :\n", vec_D)
# Exemple 2 : Matrice triangulaire
T = np.array([[3, 1, 2],
[0, 3, 5],
[0, 0, -2]])
vp_T, vec_T = np.linalg.eig(T)
print("\nValeurs propres de T :", vp_T)Diapositive 151 / 159
# Exemple 3 : Matrice symetrique
S = np.array([[1, 0, 0],
[0, 1, 1],
[0, 1, 1]])
vp_S, vec_S = np.linalg.eig(S)
print("\nValeurs propres de S :", vp_S)
print("Vecteurs propres de S :\n", vec_S)Diapositive 152 / 159
Diapositive 153 / 159
Diapositive 154 / 159
Diapositive 155 / 159
Diapositive 156 / 159
def diagonaliser_2x2(A):
"""
Diagonalise une matrice 2x2 : A = P*D*P^-1
Retourne P, D, P_inv
"""
# Calcul des valeurs propres
vp = valeurs_propres_2x2(A)
if vp is None:
return None
# Calcul des vecteurs propres
v1 = vecteur_propre_2x2(A, vp[0])
v2 = vecteur_propre_2x2(A, vp[1])Diapositive 157 / 159
# Matrice P
P = [[v1[0], v2[0]],
[v1[1], v2[1]]]
# Matrice D
D = [[vp[0], 0],
[0, vp[1]]]
# P^-1
P_inv = inverse_2x2(P)
return P, D, P_invDiapositive 158 / 159
import numpy as np
# Diagonalisation automatique
A = np.array([[4, 1],
[2, 3]], dtype=float)
valeurs_propres, P = np.linalg.eig(A)
D = np.diag(valeurs_propres)
P_inv = np.linalg.inv(P)
print("Matrice A :\n", A)
print("\nValeurs propres :", valeurs_propres)
print("\nMatrice P (vecteurs propres) :\n", P)
print("\nMatrice D (diagonale) :\n", D)
# Verification : A = P*D*P^-1
A_reconstruit = P @ D @ P_inv
print("\nA reconstruit :\n", A_reconstruit)Diapositive 159 / 159
# Calcul de A^10
A_10 = P @ np.linalg.matrix_power(D, 10) @ P_inv
print("\nA^10 :\n", A_10)