2017-10-17 4 views
-3

J'essaye d'utiliser python pour résoudre une fonction de matrice Ax = b. Dans ce cas, nous avonsJ'ai une mauvaise sortie de numpy.linalg.solve

A = [[-1. 1. 0.] 
    [-1. 0. 1.] 
    [-2. 0. 0.]] 
b = [ 1. 1. 2.] 

je tentais d'utiliser numpy.linalg.solve pour résoudre ce que mon code ci-dessous

result = np.linalg.solve(A,b) 

la sortie est comme ce

[ -1.00000000e+00 2.22044605e-16 2.22044605e-16] 

qui est apparemment différent de la bonne réponse. J'ai donc essayé de mettre en œuvre ce dans le terminal comme ci-dessous

>>> import numpy as np 
>>> T = np.matrix([[-1.0,1.0,0.0],[-1.0,0.0,1.0],[-2.0,0.0,0.0]]) 
>>> b = np.array([1.0,1.0,2.0]) 
>>> np.linalg.solve(T,b) 
array([-1., 0., 0.]) 
>>> type(b[0]) 
<type 'numpy.float64'> 

Je pense sur le type de données peut provoquer ce genre de résultat, mais à la fois A et b de mon code sont « numpy.float64 ». Donc, je ne peux pas comprendre quelle est la raison de cette situation.

+3

Cela me semble bien. (Notez les 'e-16's.) – user2357112

+1

Le premier commentaire est correct. Pour le plaisir: ajouter '' 'np.set_printoptions (supprimer = True)' '' après avoir importé numpy et observer. Recherchez la notation scientifique et les documents de numpy s'ils ne sont toujours pas clairs. – sascha

Répondre

0

Vous pouvez vérifier que c'est une solution en procédant comme suit

r = np.linalg.solve(T,b) 
[email protected] # Matrix mutiplication if you have a modern python 

Cela renverra le vecteur b vous aviez.