Я сделал простой метод наименьших квадратов, используя код ниже.В конце, вычисляя остатки вручную, я не получаю то же значение, что и scipy.Таким образом, мне интересно, как scipy вычисляет остатки?
from scipy.linalg import lstsq
np.random.seed(30042019)
A = np.random.uniform(0, 500, (100, 2))
A = np.hstack((A, np.ones((100, 1))))
B = np.dot(A, [4, 5, -2])
X, residues, rank, s = lstsq(A, B)
print("X = ", X)
print("rank = ", rank)
print("residues = ", residues)
print("calc res =", ((np.dot(A, X) - B) ** 2).mean())
Результаты
X = [ 4. 5. -2.]
rank = 3
residues = 5.43023571273382e-24
calc res = 6.2083782381226065e-25
Значения остатков scipy и остатков вычисляются вручную.Есть ли какая-нибудь ссылка с рангом?