2017-02-20 1 views
2

Compte tenu de l'équation matricielle suivante:Numpy linalg: système linéaire avec des résultats peu probables

x=Ab 

où:

In[1]:A 
Out[1]: 
matrix([[ 0.477, -0.277, -0.2 ], 
     [-0.277, 0.444, -0.167], 
     [-0.2 , -0.167, 0.367]]) 

In[2]: b 
Out[2]: [0, 60, 40] 

comment se fait que lorsque j'utilise numpy.linalg() je reçois les résultats suivants?

import numpy as np 
x = np.linalg.solve(A, b) 
res=x.tolist() 
# res=[1.8014398509481981e+18, 1.801439850948198e+18, 1.8014398509481984e+18] 

Ces chiffres sont énormes! Quel est le problème ici? Je soupçonne que A est dans la mauvaise forme, car il multiplie b dans mon équation, tandis que numpy.linalg() considère A comme si elle multiplie x.

Répondre

2

Ce que vous donnez comme une équation (x=A b) est juste un matrix multiplication plutôt que d'un ensemble d'équations linéaires pour résoudre (A x=b) pour lesquels vous utiliseriez np.linalg.solve. Ce que vous devez faire pour obtenir x dans votre cas est simplement utiliser np.dot (A.dot(b)).

1

Votre matrice est singulière, comme on peut le voir en ajoutant ses colonnes qui somme à zéro. Mathématiquement, ce système n'est résoluble que pour un très petit nombre de vecteurs b.

La solution que vous obtenez est probablement le bruit numérique.