singular value и соответствующие singular vectors прямоугольных A матрицы являются, соответственно, скалярным σ и парой векторов u и v, которые удовлетворяют
где - эрмитова транспозиция A. Сингулярные векторы u и v обычно масштабируются, чтобы иметь норму 1. Кроме того, если u и v являются сингулярными векторами A, то -u и -v являются сингулярными векторами A
также.
σ сингулярных значений всегда действительны и неотрицательны, даже если A комплексна. С сингулярными значениями в диагональной матрице и соответствующими сингулярными векторами Σ образующими столбцы двух ортогональных матриц U и V, вы получаете уравнения
Поскольку U и V являются унитарными матрицами, умножение первого уравнения на справа приводит к сингулярному разложению уравнению
Полное разложение сингулярных значений матрицы m -by n включает:
m -by - m матрица U
m -by - n матрица Σ
n -by - n матрица V
Другими словами, U и V оба квадратные, и Σ такой же размер, как и A. Если у A намного больше строк, чем столбцов (m > n
), затем получившееся m
-by- m
матричная U большая. Однако большинство столбцов в U умножены на нули в Σ. В этой ситуации разложение размера экономики экономит и время и хранение, производя m <reservedrangesplaceholder5> <reservedrangesplaceholder4>
, n <reservedrangesplaceholder2> <reservedrangesplaceholder1> и тем же V:
Разложение собственных значений является подходящим инструментом для анализа матрицы, когда она представляет отображение из вектора пространства в себя, как это делается для обыкновенного дифференциального уравнения. Однако сингулярное разложение является подходящим инструментом для анализа отображения из одного векторного пространства в другое векторное пространство, возможно, с другой размерностью. Большинство систем одновременных линейных уравнений попадают в эту вторую категорию.
Если A квадратная, симметричная и положительно определённая, то её собственное значение и сингулярные разложения одинаковы. Но, когда A отходит от симметрии и положительной определенности, различие между двумя декомпозициями увеличивается. В частности, сингулярное разложение действительной матрицы всегда реально, но собственное значение разложение действительной, несимметричной матрицы может быть комплексным.
Для матрицы примера
A = 9 4 6 8 2 7
полное сингулярное разложение
[U,S,V] = svd(A) U = 0.6105 -0.7174 0.3355 0.6646 0.2336 -0.7098 0.4308 0.6563 0.6194 S = 14.9359 0 0 5.1883 0 0 V = 0.6925 -0.7214 0.7214 0.6925
Можно проверить, что U*S*V'
равно A
в рамках округления. Для этой небольшой задачи разложение размера экономики лишь немного меньше.
[U,S,V] = svd(A,0) U = 0.6105 -0.7174 0.6646 0.2336 0.4308 0.6563 S = 14.9359 0 0 5.1883 V = 0.6925 -0.7214 0.7214 0.6925
Снова, U*S*V'
равно A
в рамках округления.
Для больших разреженных матриц, использование svd
вычислить все сингулярные значения и сингулярные векторы не всегда практично. Например, если вам нужно знать всего несколько самых больших сингулярных значений, то вычисление всех сингулярных значений разреженной матрицы 5000 на 5000 является дополнительной работой.
В случаях, когда требуется только подмножество сингулярных значений и сингулярных векторов, svds
и svdsketch
функции предпочтительнее svd
.
Функция | Использование |
---|---|
svds | Использовать svds для вычисления ранга - k приближения SVD. Можно задать, должно ли подмножество сингулярных значений быть самым большим, самым маленьким или самым близким к определенному числу .svds обычно вычисляет наилучший возможный ранг - k приближение. |
svdsketch | Использовать svdsketch вычислить частичный SVD входной матрицы, удовлетворяющий заданному допуску. В то время как svds требует, чтобы вы указали ранг, svdsketch адаптивно определяет ранг матричного эскиза на основе заданного допуска. Ранг - k приближение, чтоsvdsketch в конечном счете использует удовлетворяет допуску, но в отличие от svds , это не гарантировано быть лучшим одним из возможных. |
Для примера рассмотрим 1000 на 1000 случайную разреженную матрицу с плотностью около 30%.
n = 1000; A = sprand(n,n,0.3);
Шесть самых больших сингулярных значений
S = svds(A) S = 130.2184 16.4358 16.4119 16.3688 16.3242 16.2838
Кроме того, шесть наименьших сингулярных значений
S = svds(A,6,'smallest') S = 0.0740 0.0574 0.0388 0.0282 0.0131 0.0066
Для небольших матриц, которые могут помещаться в памяти как полная матрица, full(A)
, использование svd(full(A))
может быть все еще быстрее, чем svds
или svdsketch
. Однако для действительно больших и разреженных матриц, использование svds
или svdsketch
становится необходимым.