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

Функции rankorth, и 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