Согласно теореме 18.4 книги IR ошибка Фробениуса между матрицей и ее приближением, полученная путем обнуления k наименьших сингулярных значений, равна наибольшему удаленному сингулярному значению.Но в следующем коде Python эта норма Фробениуса равна 1,07, в то время как мы ожидаем 1, поскольку единственные значения:
array([2.16250096, 1.59438237, 1.27529025, 1. , 0.39391525])
В чем проблема?
import numpy as np
la = np.linalg
a = np.array([[1,0,1,0,0,0], [0,1,0,0,0,0], [1,1,0,0,0,0], [1,0,0,1,1,0], [0,0,0,1,0,1]])
svd = la.svd(a, full_matrices=False)
U = svd[0]
S = np.diag(svd[1])
Vt = svd[2]
S[3,3] = 0
S[4,4] = 0
b = np.dot(np.dot(U, S), Vt)
la.norm(a-b)