exponenta event banner

svd

Декомпозиция сингулярных значений

Описание

пример

s = svd(A) возвращает сингулярные значения матрицы A в порядке убывания.

пример

[U,S,V] = svd(A) выполняет разложение матрицы по сингулярным значениям A, такой, что A = U*S*V'.

пример

[U,S,V] = svd(A,'econ') производит разложение экономного размера mоколо-n матрица A:

  • m > n - Только первый n столбцы U вычисляются, и S является nоколо-n.

  • m = nsvd(A,'econ') эквивалентно svd(A).

  • m < n - Только первый m столбцы V вычисляются, и S является mоколо-m.

Декомпозиция экономного размера удаляет дополнительные строки или столбцы нулей из диагональной матрицы сингулярных значений, Sвместе со столбцами в любом из них U или V которые умножают эти нули в выражении A = U*S*V'. Удаление этих нулей и столбцов может увеличить время выполнения и сократить требования к хранению без ущерба для точности разложения.

пример

[U,S,V] = svd(A,0) производит различное разложение по размеру экономики mоколо-n матрица A:

  • m > nsvd(A,0) эквивалентно svd(A,'econ').

  • m <= nsvd(A,0) эквивалентно svd(A).

Примеры

свернуть все

Вычислите сингулярные значения матрицы полного ранга.

A = [1 0 1; -1 -2 0; 0 1 -1]
A = 3×3

     1     0     1
    -1    -2     0
     0     1    -1

s = svd(A)
s = 3×1

    2.4605
    1.6996
    0.2391

Найти сингулярное разложение прямоугольной матрицы A.

A = [1 2; 3 4; 5 6; 7 8]
A = 4×2

     1     2
     3     4
     5     6
     7     8

[U,S,V] = svd(A)
U = 4×4

   -0.1525   -0.8226   -0.3945   -0.3800
   -0.3499   -0.4214    0.2428    0.8007
   -0.5474   -0.0201    0.6979   -0.4614
   -0.7448    0.3812   -0.5462    0.0407

S = 4×2

   14.2691         0
         0    0.6268
         0         0
         0         0

V = 2×2

   -0.6414    0.7672
   -0.7672   -0.6414

Подтвердить связь A = U*S*V', в пределах точности машины.

U*S*V'
ans = 4×2

    1.0000    2.0000
    3.0000    4.0000
    5.0000    6.0000
    7.0000    8.0000

Вычислите полное разложение прямоугольной матрицы и разложение по экономичности.

A = [1 2; 3 4; 5 6; 7 8]
A = 4×2

     1     2
     3     4
     5     6
     7     8

[U,S,V] = svd(A)
U = 4×4

   -0.1525   -0.8226   -0.3945   -0.3800
   -0.3499   -0.4214    0.2428    0.8007
   -0.5474   -0.0201    0.6979   -0.4614
   -0.7448    0.3812   -0.5462    0.0407

S = 4×2

   14.2691         0
         0    0.6268
         0         0
         0         0

V = 2×2

   -0.6414    0.7672
   -0.7672   -0.6414

[U,S,V] = svd(A,'econ')
U = 4×2

   -0.1525   -0.8226
   -0.3499   -0.4214
   -0.5474   -0.0201
   -0.7448    0.3812

S = 2×2

   14.2691         0
         0    0.6268

V = 2×2

   -0.6414    0.7672
   -0.7672   -0.6414

С тех пор A 4 на 2, svd(A,'econ') возвращает меньшее число столбцов в U и меньше строк в S по сравнению с полным разложением. Дополнительные строки нулей в S исключаются вместе с соответствующими столбцами в U которые умножались бы на эти нули в выражении A = U*S*V'.

Используйте результаты разложения сингулярных значений для определения ранга, пространства столбцов и нулевого пространства матрицы.

A = [2 0 2; 0 1 0; 0 0 0]
A = 3×3

     2     0     2
     0     1     0
     0     0     0

[U,S,V] = svd(A)
U = 3×3

     1     0     0
     0     1     0
     0     0     1

S = 3×3

    2.8284         0         0
         0    1.0000         0
         0         0         0

V = 3×3

    0.7071         0   -0.7071
         0    1.0000         0
    0.7071         0    0.7071

Вычислите ранг, используя число ненулевых сингулярных значений.

s = diag(S);
rank_A = nnz(s)
rank_A = 2

Вычислить ортонормированный базис для пространства столбцов A с использованием столбцов U которые соответствуют ненулевым сингулярным значениям.

column_basis = U(:,logical(s))
column_basis = 3×2

     1     0
     0     1
     0     0

Вычислить ортонормированный базис для нулевого пространства A с использованием столбцов V которые соответствуют сингулярным значениям, равным нулю.

null_basis = V(:,~s)
null_basis = 3×1

   -0.7071
         0
    0.7071

Функции rank, orth, и null предоставить удобные способы расчета этих количеств.

Входные аргументы

свернуть все

Входная матрица. A может быть квадратным или прямоугольным.

Типы данных: single | double
Поддержка комплексного номера: Да

Выходные аргументы

свернуть все

Сингулярные значения, возвращаемые в виде вектора-столбца. Сингулярные значения являются неотрицательными вещественными числами, перечисленными в порядке убывания.

Левые сингулярные векторы, возвращаемые в виде столбцов матрицы.

  • Для mоколо-n матрица A с m > n, разложение по размеру экономики svd(A,'econ') и svd(A,0) вычислить только первый n столбцы U. В этом случае столбцы U ортогональны и U является mоколо-n матрица, удовлетворяющая UHU = In.

  • Для полных разложений, svd(A) прибыль U как mоколо-m унитарная матрица, удовлетворяющая UUH = UHU = Im. СтолбцыU которые соответствуют ненулевым сингулярным значениям, образуют набор ортонормированных базисных векторов для диапазона A.

Различные машины и выпуски MATLAB ® могут создавать различные сингулярные векторы, которые все еще являются численно точными. Соответствующие столбцы вU и V могут перевернуть свои знаки, так как это не влияет на значение выражения A = U*S*V'.

Сингулярные значения, возвращаемые в виде диагональной матрицы. Диагональные элементы S - неотрицательные сингулярные значения в порядке убывания. Размер S является следующим:

  • Для mоколо-n матрица A, разложение по размеру экономики svd(A,'econ') прибыль S как квадратная матрица порядка min([m,n]).

  • Для полных разложений, svd(A) прибыль S с тем же размером, что и A.

  • Если m > n, то svd(A,0) прибыль S как квадратная матрица порядка min([m,n]).

  • Если m < n, то svd(A,0) прибыль S с тем же размером, что и A.

Правые сингулярные векторы, возвращаемые в виде столбцов матрицы.

  • Для mоколо-n матрица A с m < n, разложение экономики svd(A,'econ') вычисляет только первый m столбцы V. В этом случае столбцы V ортогональны и V является nоколо-m матрица, удовлетворяющая VHV = Im.

  • Для полных разложений, svd(A) прибыль V как nоколо-n унитарная матрица, удовлетворяющая VVH = VHV = In. СтолбцыV которые не соответствуют ненулевым сингулярным значениям, образуют набор ортонормированных базисных векторов для нулевого пространства A.

Различные машины и версии MATLAB могут создавать различные сингулярные векторы, которые все еще являются численно точными. Соответствующие столбцы в U и V могут перевернуть свои знаки, так как это не влияет на значение выражения A = U*S*V'.

Расширенные возможности

..
Представлен до R2006a