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
- m
матричный U является большим. Однако большинство столбцов в U умножается на нули в Σ. В этой ситуации разложение размера экономики экономит и время и устройство хранения данных путем создания m-by-n
U, n-by-n
Σ и тот же 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
. Вместо этого можно конкатенировать все матрицы в многомерный массив и использование pagesvd
выполнять сингулярные разложения на всех страницах массивов с одним вызовом функции.
Функция | Использование |
---|---|
pagesvd | Использование pagesvd выполнять сингулярные разложения на страницах многомерного массива. Это - эффективный способ выполнить SVD на большом количестве матриц, что у всех есть тот же размер. |
Например, рассмотрите набор трех матриц 2 на 2. Конкатенируйте матрицы в 2 2 3 массивами с cat
функция.
A = [0 -1; 1 0]; B = [-1 0; 0 -1]; C = [0 1; -1 0]; X = cat(3,A,B,C);
Теперь используйте pagesvd
одновременно выполнять эти три разложения.
[U,S,V] = pagesvd(X);
Для каждой страницы X
, в выходных параметрах U
существуют соответствующие страницыS
, и V
. Например, матричный A
находится на первой странице X
, и его разложение дано U(:,:,1)*S(:,:,1)*V(:,:,1)'
.
Для больших разреженных матриц, с помощью 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
становится необходимым.
svd
| svds
| svdsketch
| gsvd
| pagesvd