Получение разных ответов между Numpy и ручным расчетом - PullRequest
0 голосов
/ 15 марта 2020

У меня есть несколько матриц:

A=np.array([[-4, -1, -3] ,[1, -4,5],[ 3,4,3],[-5, -1,2]])
b = np.array([[-1], [4],[-4],[-2]])
x=np.array([[ 0.58732799],[-1.19370936],[-0.22879177]])

Я хочу вычислить остаток, r = Ax-b

r=A@x-b

print(r)

[[ 0.53077272]
 [ 0.21820656]
 [ 0.30077121]
 [-0.20051414]]

Если я беру норму r, я получаю:

print(np.linalg.norm(r))
0.678235

Если я сделаю то же самое в numpy, я получу другой ответ:

x,residuals,rank,sigma=np.linalg.lstsq(A,b,rcond=None);
print("Vector x:\n " + repr(x))
print(residuals)


Vector x:
 array([[ 0.58732799],
       [-1.19370936],
       [-0.22879177]])
[0.46000302]

А именно, residuals не идентичны. Кто-то знает почему?

1 Ответ

1 голос
/ 15 марта 2020

https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.html говорит:

остатки:
суммы остатков; Euclidean 2-норма в квадрате

Это квадрат того, что вы рассчитали в первом примере.

>>> 0.678235 * 0.678235
0.460002715225
...