Recherche…


Remarques

Depuis la version 1.8, plusieurs routines de np.linalg peuvent fonctionner sur une «pile» de matrices. Autrement dit, la routine peut calculer les résultats pour plusieurs matrices si elles sont empilées ensemble. Par exemple, A est interprété comme deux matrices empilées 3 par 3:

np.random.seed(123)
A = np.random.rand(2,3,3)
b = np.random.rand(2,3)
x = np.linalg.solve(A, b)

print np.dot(A[0,:,:], x[0,:])
# array([ 0.53155137,  0.53182759,  0.63440096])

print b[0,:]
# array([ 0.53155137,  0.53182759,  0.63440096])

Les documents officiels np spécifient via des spécifications de paramètres telles a : (..., M, M) array_like .

Résoudre des systèmes linéaires avec np.solve

Considérons les trois équations suivantes:

x0 + 2 * x1 + x2 = 4
         x1 + x2 = 3
x0 +          x2 = 5

Nous pouvons exprimer ce système comme une équation matricielle A * x = b avec:

A = np.array([[1, 2, 1],
              [0, 1, 1],
              [1, 0, 1]])
b = np.array([4, 3, 5])

Ensuite, utilisez np.linalg.solve pour résoudre x :

x = np.linalg.solve(A, b)
# Out: x = array([ 1.5, -0.5,  3.5])

A doit être un carré et une matrice complète: toutes ses lignes doivent être linéairement indépendantes. A doit être inversible / non singulier (son déterminant n'est pas zéro). Par exemple, si une ligne de A est un multiple d'un autre, l'appel de linalg.solve soulèvera LinAlgError: Singular matrix :

A = np.array([[1, 2, 1], 
              [2, 4, 2],   # Note that this row 2 * the first row
              [1, 0, 1]])
b = np.array([4,8,5])

De tels systèmes peuvent être résolus avec np.linalg.lstsq .

Trouver la solution des moindres carrés à un système linéaire avec np.linalg.lstsq

Les moindres carrés constituent une approche standard des problèmes comportant plus d'équations que d'inconnues, également connus sous le nom de systèmes surdéterminés.

Considérons les quatre équations:

x0 + 2 * x1 + x2 = 4
x0 + x1 + 2 * x2 = 3
2 * x0 + x1 + x2 = 5
x0 + x1 + x2 = 4

Nous pouvons exprimer cela comme une multiplication matricielle A * x = b :

A = np.array([[1, 2, 1],
              [1,1,2],
              [2,1,1],
              [1,1,1]])
b = np.array([4,3,5,4])

Ensuite, résolvez avec np.linalg.lstsq :

x, residuals, rank, s = np.linalg.lstsq(A,b)

x est la solution, les residuals la somme, rank le rank la matrice de l'entrée A et s les valeurs singulières de A Si b a plus d'une dimension, lstsq résoudra le système correspondant à chaque colonne de b :

A = np.array([[1, 2, 1],
              [1,1,2],
              [2,1,1],
              [1,1,1]])
b = np.array([[4,3,5,4],[1,2,3,4]]).T # transpose to align dimensions
x, residuals, rank, s = np.linalg.lstsq(A,b)
print x # columns of x are solutions corresponding to columns of b
#[[ 2.05263158  1.63157895]
# [ 1.05263158 -0.36842105]
# [ 0.05263158  0.63157895]]
print residuals # also one for each column in b
#[ 0.84210526  5.26315789]

rank et s ne dépendent que de A et sont donc les mêmes que ci-dessus.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow