svd

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

Описание

пример

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