2017-02-20 1 views
2

Unter Berücksichtigung der folgenden Matrixgleichung:Numpy linalg: lineares System mit unwahrscheinlich Ergebnisse

x=Ab 

wo:

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] 

wie kommt es, dass, wenn ich numpy.linalg() verwende ich die folgenden Ergebnisse erhalten?

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

Diese Zahlen sind riesig! Was ist hier falsch? Ich vermute, A ist in der falschen Form, wie es b in meiner Gleichung multipliziert, während numpy.linalg()A als ob es x multipliziert.

Antwort

2

Was Sie als eine Gleichung geben (x=A b) ist nur ein matrix multiplication eher als ein Satz von linearen Gleichungen zu lösen (A x=b), für die Sie np.linalg.solve verwenden würden. Was Sie tun müssen, um x in Ihrem Fall zu bekommen, verwenden Sie einfach np.dot (A.dot(b)).

1

Ihre Matrix ist singulär, wie Sie sehen können, indem Sie ihre Spalten addieren, die zu Null summieren. Mathematisch ist dieses System nur für einen sehr kleinen Satz von b Vektoren lösbar.

Die Lösung, die Sie erhalten, ist wahrscheinlich nur numerisches Rauschen.

Verwandte Themen