В этом конкретном случае 2-норма M
совпадает с нормой Фробениуса, которая дается формулой (np.sum(np.abs(M**2)))**(1/2)
, поэтому мы можем видеть, что:
import numpy as np
M = np.array([[ 1., -0.5301332 , 0.80512845],
[ 0., 0., 0.],
[ 0., 0., 0.]])
np.sqrt(np.sum(np.abs(M**2)))
1.388982732341062
np.sqrt(np.sum(np.abs(M**2))) == np.linalg.norm(M,ord=2) == np.linalg.norm(M, ord='fro')
True
В частности, можно докажите, что 2-норма - это квадрат root наибольшего собственного значения M.T@M
, т.е.
np.sqrt(np.linalg.eigvals(M.T@M)[0])
1.388982732341062
И это его связь с собственными значениями матрицы. Теперь вспомним, что сингулярные значения - это квадрат root собственных значений M. T@M, и мы раскрываем тайну.
Используя характеристику нормы Фробениуса (квадрат root сумма следа M. T@M):
np.sqrt(np.sum(np.diag(M.T@M)))
1.388982732341062
Сопоставление результатов:
np.sqrt(np.linalg.eigvals(M.T@M)[0]) == np.sqrt(np.sum(np.diag(M.T@M))) == np.linalg.svd(M)[1][0]
True