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

modifier

Deux 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

modifier

La 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

modifier

Un 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
  1. voir (en) « Computing norms », sur SciPy.org (consulté le 3 mai 2022).

Régression et optimisation < > Calcul différentiel et intégral