Я пытаюсь осуществить декомпозицию QR через отражатели домохозяина. При попытке сделать это на очень простом массиве я получаю странные числа. Любой, кто может сказать мне, также, почему использование оператора @ vs * между vec и vec.T в последней строке определения функции получает основные бонусные очки.
Это ставит в тупик две математические / компьютерные науки по состоянию на сегодняшнее утро.
import numpy as np
def householder(vec):
vec[0] += np.sign(vec[0])*np.linalg.norm(vec)
vec = vec/vec[0]
gamma = 2/(np.linalg.norm(vec)**2)
return np.identity(len(vec)) - gamma*(vec*vec.T)
array = np.array([1, 3 ,4])
Q = householder(array)
print(Q@array)
Вывод:
array([-4.06557377, -7.06557377, -6.06557377])
Где это должно быть:
array([5.09, 0, 0])