2017-02-20 94 views
2

с учетом следующего матричного уравнения:Numpy linalg: линейная система с маловероятными результатами

x=Ab 

где:

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] 

, как получилось, что когда я использую numpy.linalg() я получаю следующие результаты?

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

Эти цифры огромны! Что здесь не так? Я подозреваю, что A находится в неправильной форме, так как он умножает b в моем уравнении, тогда как numpy.linalg() считает A, как если бы он умножался x.

ответ

2

Что вы даете как уравнение (x=A b) просто matrix multiplication, а не набор линейных уравнений для решения (A x=b), для которых вы будете использовать np.linalg.solve. Что вам нужно сделать, чтобы получить x в вашем случае, просто используйте np.dot (A.dot(b)).

1

Ваша матрица является сингулярной, что видно из добавления ее столбцов, которые суммируются до нуля. Математически эта система разрешима только для очень небольшого набора векторов b.

Решение, которое вы получаете, скорее всего, просто числовой шум.