Python pour le calcul scientifique/Algèbre linéaire
Rappelons que dorénavant les programmes commencent tous par :
#!/usr/bin/python3
import numpy as np
import matplotlib.pyplot as plt
L'algèbre linéaire consiste essentiellement en la manipulation de matrices.
- Pour plus de détails voir : Python pour le calcul scientifique/Manipulation de matrices.
Modules à utiliser
modifierDeux modules fournissent les fonctions utiles pour l'algèbre linéaire : numpy.linalg
et scipy.linalg
. Le module SciPy est plus complet et est parfois plus rapide que le module NumPy. Nous considérons donc que nous utilisons le premier et ajoutons en en-tête :
from scipy import linalg
Norme et déterminant
modifierLa norme « classique » s'obtient par linalg.norm()
; pour les vecteurs, il s'agit de la norme d'ordre 2 (L2) et pour les matrice, la norme de Frobénius
A = np.array([[1,2],[3,4]])
linalg.norm(A) # 5.4772...
Pour les vecteurs, on peut utiliser une norme d'ordre n quelconque, avec
linalg.norm(x, n)
Si n prend pour valeur inf
, cela renvoie max(|xi|) ; pour valeur -inf
, min(|xi|).
Pour une matrice, les valeurs d'ordre possibles sont ±1
, ±2
, ±inf
et "fro"
(pour Frobenius, valeur par défaut)[1].
Si la matrice est un assemblage de vecteurs, alors on peut calculer la norme de chaque vecteur en indiquant le numéro de l'indice (l'axe) selon lequel on calcule la norme. Par exemple, si on a une matrice de vecteurs colonne M = [[X1, X2, …], [Y1, Y2, …]], alors linalg.norm(M, axis=0)
va calculer la norme selon l'indice 0 (le numéro de ligne) : [|(X1, Y1)|, |(X2, Y2)|, …].
Le déterminant s'obtient avec
linalg.det(A)
Résolution d'un système linéaire
modifierUn système linéaire d'équations peut se représenter par une équation matricielle :
avec
Si le système possède une solution, alors la matrice A est inversible et le résultat peut s'obtenir par :
En Python, cela peut s'obtenir de deux manières :
X = linalg.inv(A).dot(b)
;X = linalg.solve(A, b)
;
la seconde méthode étant plus rapide.
Par exemple, pour résoudre le système
A = np.array([[1, 2], [3, 4]])
b = np.array([[5], [6]])
X = linalg.solve(A, b)
print(X)
# [[-4. ]
# [ 4.5]]
Notes et références
modifier- ↑ voir (en) « Computing norms », sur SciPy.org (consulté le 3 mai 2022).
Régression et optimisation < ↑ > Calcul différentiel et intégral