svd

Сингулярное разложение

Синтаксис

s = svd(A)
[U,S,V] = svd(A)
[U,S,V] = svd(A,'econ')
[U,S,V] = svd(A,0)

Описание

пример

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

пример

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

пример

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

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

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

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

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

пример

[U,S,V] = svd(A,0) производит различное разложение размера экономики m-by-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-by-n матричный A с m > n, разложения размера экономики svd(A,'econ') и svd(A,0) вычисляют только первые столбцы n U. В этом случае столбцы U являются ортогональными, и U является m-by-n матрица, которая удовлетворяет UHU=In.

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

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

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

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

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

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

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

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

Была ли эта тема полезной?