pagesvd

Мудрое страницей сингулярное разложение

Описание

пример

S = pagesvd(X) возвращает сингулярные значения каждой страницы многомерного массива. Каждая страница выхода S(:,:,i) вектор-столбец, содержащий сингулярные значения X(:,:,i) в порядке убывания. Если каждая страница X m- n матрица, затем число сингулярных значений, возвращенное на каждой странице S min(m,n).

пример

[U,S,V] = pagesvd(X) вычисляет сингулярное разложение каждой страницы многомерного массива. Страницы в выходных массивах удовлетворяют: U(:,:,i) * S(:,:,i) * V(:,:,i)' = X(:,:,i).

S имеет тот же размер как X, и каждая страница S диагональная матрица с неотрицательными сингулярными значениями в порядке убывания. Страницы U и V унитарные матрицы.

Если X имеет больше, чем три измерения, затем pagesvd возвращает массивы с тем же количеством размерностей: U(:,:,i,j,k) * S(:,:,i,j,k) * V(:,:,i,j,k)' = X(:,:,i,j,k)

пример

[___] = pagesvd(X,"econ") производит разложение размера экономики страниц X использование любой из предыдущих комбинаций выходного аргумента. Если X m- n- p массив, затем:

  • m > n — Только первый n столбцы каждой страницы U вычисляются, и S имеет размер n- n- p.

  • m = npagesvd(X,"econ") эквивалентно pagesvd(X).

  • m < n — Только первый m столбцы каждой страницы V вычисляются, и S имеет размер m- m- p.

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

пример

[___] = pagesvd(___,outputForm) задает выходной формат для сингулярных значений, возвращенных в S. Можно использовать эту опцию с любой из предыдущих комбинаций аргументов ввода или вывода. Задайте "vector" возвратить каждую страницу S как вектор-столбец или "matrix" возвратить каждую страницу S как диагональная матрица.

Примеры

свернуть все

Создайте два 6 6 матрицы. Используйте cat функция, чтобы конкатенировать их по третьему измерению в 6 6 2 массивами.

A = magic(6);
B = hilb(6);
X = cat(3,A,B);

Вычислите сингулярные значения каждой страницы путем вызова pagesvd с одним выходом.

S = pagesvd(X)
S = 
S(:,:,1) =

  111.0000
   50.6802
   34.3839
   10.1449
    5.5985
    0.0000


S(:,:,2) =

    1.6189
    0.2424
    0.0163
    0.0006
    0.0000
    0.0000

Создайте две матрицы 5 на 5. Используйте cat функция, чтобы конкатенировать их по третьему измерению в 5 5 2 массивами.

A = magic(5);
B = hilb(5);
X = cat(3,A,B);

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

s = pagesvd(X)
s = 
s(:,:,1) =

   65.0000
   22.5471
   21.6874
   13.4036
   11.9008


s(:,:,2) =

    1.5671
    0.2085
    0.0114
    0.0003
    0.0000

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

[U,S,V] = pagesvd(X)
U = 
U(:,:,1) =

   -0.4472   -0.5456    0.5117    0.1954   -0.4498
   -0.4472   -0.4498   -0.1954   -0.5117    0.5456
   -0.4472   -0.0000   -0.6325    0.6325   -0.0000
   -0.4472    0.4498   -0.1954   -0.5117   -0.5456
   -0.4472    0.5456    0.5117    0.1954    0.4498


U(:,:,2) =

   -0.7679    0.6019   -0.2142    0.0472    0.0062
   -0.4458   -0.2759    0.7241   -0.4327   -0.1167
   -0.3216   -0.4249    0.1205    0.6674    0.5062
   -0.2534   -0.4439   -0.3096    0.2330   -0.7672
   -0.2098   -0.4290   -0.5652   -0.5576    0.3762

S = 
S(:,:,1) =

   65.0000         0         0         0         0
         0   22.5471         0         0         0
         0         0   21.6874         0         0
         0         0         0   13.4036         0
         0         0         0         0   11.9008


S(:,:,2) =

    1.5671         0         0         0         0
         0    0.2085         0         0         0
         0         0    0.0114         0         0
         0         0         0    0.0003         0
         0         0         0         0    0.0000

V = 
V(:,:,1) =

   -0.4472   -0.4045    0.2466   -0.6627    0.3693
   -0.4472   -0.0056    0.6627    0.2466   -0.5477
   -0.4472    0.8202   -0.0000    0.0000    0.3568
   -0.4472   -0.0056   -0.6627   -0.2466   -0.5477
   -0.4472   -0.4045   -0.2466    0.6627    0.3693


V(:,:,2) =

   -0.7679    0.6019   -0.2142    0.0472    0.0062
   -0.4458   -0.2759    0.7241   -0.4327   -0.1167
   -0.3216   -0.4249    0.1205    0.6674    0.5062
   -0.2534   -0.4439   -0.3096    0.2330   -0.7672
   -0.2098   -0.4290   -0.5652   -0.5576    0.3762

Проверьте отношение X=USVH для каждой страницы массивов, в точности машины.

e1 = norm(X(:,:,1) - U(:,:,1)*S(:,:,1)*V(:,:,1)',"fro")
e1 = 6.7258e-14
e2 = norm(X(:,:,2) - U(:,:,2)*S(:,:,2)*V(:,:,2)',"fro")
e2 = 4.0054e-16

В качестве альтернативы можно использовать pagemtimes проверять отношение на обе страницы одновременно.

US = pagemtimes(U,S);
USV = pagemtimes(US,"none",V,"ctranspose");
e = max(abs(X - USV),[],"all")
e = 2.4869e-14

Создайте два 6 6 матрицы. Используйте cat функция, чтобы конкатенировать их по третьему измерению в 6 6 2 массивами.

A = magic(6);
B = hilb(6);
X = cat(3,A,B);

Вычислите SVD каждой страницы массивов. По умолчанию, pagesvd возвращает каждую страницу сингулярных значений как диагональная матрица, когда вы задаете несколько выходных параметров.

[U,S,V] = pagesvd(X)
U = 
U(:,:,1) =

   -0.4082    0.5574    0.0456   -0.4182    0.3092    0.5000
   -0.4082   -0.2312    0.6301   -0.2571   -0.5627   -0.0000
   -0.4082    0.4362    0.2696    0.5391    0.1725   -0.5000
   -0.4082   -0.3954   -0.2422   -0.4590    0.3971   -0.5000
   -0.4082    0.1496   -0.6849    0.0969   -0.5766   -0.0000
   -0.4082   -0.5166   -0.0182    0.4983    0.2604    0.5000


U(:,:,2) =

   -0.7487    0.6145   -0.2403   -0.0622    0.0111   -0.0012
   -0.4407   -0.2111    0.6977    0.4908   -0.1797    0.0356
   -0.3207   -0.3659    0.2314   -0.5355    0.6042   -0.2407
   -0.2543   -0.3947   -0.1329   -0.4170   -0.4436    0.6255
   -0.2115   -0.3882   -0.3627    0.0470   -0.4415   -0.6898
   -0.1814   -0.3707   -0.5028    0.5407    0.4591    0.2716

S = 
S(:,:,1) =

  111.0000         0         0         0         0         0
         0   50.6802         0         0         0         0
         0         0   34.3839         0         0         0
         0         0         0   10.1449         0         0
         0         0         0         0    5.5985         0
         0         0         0         0         0    0.0000


S(:,:,2) =

    1.6189         0         0         0         0         0
         0    0.2424         0         0         0         0
         0         0    0.0163         0         0         0
         0         0         0    0.0006         0         0
         0         0         0         0    0.0000         0
         0         0         0         0         0    0.0000

V = 
V(:,:,1) =

   -0.4082    0.6234   -0.3116    0.2495    0.2511    0.4714
   -0.4082   -0.6282    0.3425    0.1753    0.2617    0.4714
   -0.4082   -0.4014   -0.7732   -0.0621   -0.1225   -0.2357
   -0.4082    0.1498    0.2262   -0.4510    0.5780   -0.4714
   -0.4082    0.1163    0.2996    0.6340   -0.3255   -0.4714
   -0.4082    0.1401    0.2166   -0.5457   -0.6430    0.2357


V(:,:,2) =

   -0.7487    0.6145   -0.2403   -0.0622    0.0111   -0.0012
   -0.4407   -0.2111    0.6977    0.4908   -0.1797    0.0356
   -0.3207   -0.3659    0.2314   -0.5355    0.6042   -0.2407
   -0.2543   -0.3947   -0.1329   -0.4170   -0.4436    0.6255
   -0.2115   -0.3882   -0.3627    0.0470   -0.4415   -0.6898
   -0.1814   -0.3707   -0.5028    0.5407    0.4591    0.2716

Задайте "vector" опция, чтобы возвратить каждую страницу сингулярных значений как вектор-столбец.

[U,S,V] = pagesvd(X,"vector")
U = 
U(:,:,1) =

   -0.4082    0.5574    0.0456   -0.4182    0.3092    0.5000
   -0.4082   -0.2312    0.6301   -0.2571   -0.5627   -0.0000
   -0.4082    0.4362    0.2696    0.5391    0.1725   -0.5000
   -0.4082   -0.3954   -0.2422   -0.4590    0.3971   -0.5000
   -0.4082    0.1496   -0.6849    0.0969   -0.5766   -0.0000
   -0.4082   -0.5166   -0.0182    0.4983    0.2604    0.5000


U(:,:,2) =

   -0.7487    0.6145   -0.2403   -0.0622    0.0111   -0.0012
   -0.4407   -0.2111    0.6977    0.4908   -0.1797    0.0356
   -0.3207   -0.3659    0.2314   -0.5355    0.6042   -0.2407
   -0.2543   -0.3947   -0.1329   -0.4170   -0.4436    0.6255
   -0.2115   -0.3882   -0.3627    0.0470   -0.4415   -0.6898
   -0.1814   -0.3707   -0.5028    0.5407    0.4591    0.2716

S = 
S(:,:,1) =

  111.0000
   50.6802
   34.3839
   10.1449
    5.5985
    0.0000


S(:,:,2) =

    1.6189
    0.2424
    0.0163
    0.0006
    0.0000
    0.0000

V = 
V(:,:,1) =

   -0.4082    0.6234   -0.3116    0.2495    0.2511    0.4714
   -0.4082   -0.6282    0.3425    0.1753    0.2617    0.4714
   -0.4082   -0.4014   -0.7732   -0.0621   -0.1225   -0.2357
   -0.4082    0.1498    0.2262   -0.4510    0.5780   -0.4714
   -0.4082    0.1163    0.2996    0.6340   -0.3255   -0.4714
   -0.4082    0.1401    0.2166   -0.5457   -0.6430    0.2357


V(:,:,2) =

   -0.7487    0.6145   -0.2403   -0.0622    0.0111   -0.0012
   -0.4407   -0.2111    0.6977    0.4908   -0.1797    0.0356
   -0.3207   -0.3659    0.2314   -0.5355    0.6042   -0.2407
   -0.2543   -0.3947   -0.1329   -0.4170   -0.4436    0.6255
   -0.2115   -0.3882   -0.3627    0.0470   -0.4415   -0.6898
   -0.1814   -0.3707   -0.5028    0.5407    0.4591    0.2716

Если вы задаете один выходной аргумент, такой как S = pagesvd(X), затем pagesvd поведение переключателей, чтобы возвратить каждую страницу сингулярных значений как вектор-столбец по умолчанию. В этом случае можно задать "matrix" опция, чтобы возвратить каждую страницу сингулярных значений как диагональная матрица.

Создайте 10 3 матрица со случайными целочисленными элементами.

X = randi([0 3],10,3);

Выполните и полное разложение и разложение размера экономики на матрице.

[U,S,V] = pagesvd(X)
U = 10×10

   -0.2554   -0.1828    0.6086   -0.6120   -0.0623   -0.2365   -0.1841    0.0165   -0.2369   -0.0792
   -0.3408    0.4291    0.0365    0.1237   -0.2953    0.3040    0.0346   -0.3966   -0.3014   -0.5041
   -0.3018   -0.3274   -0.6272   -0.0847   -0.3313   -0.3920   -0.2374   -0.2006   -0.1896    0.0717
   -0.3560   -0.2919    0.3996    0.7531   -0.0136   -0.1963   -0.1046    0.0518   -0.0521    0.0788
   -0.3711   -0.0109   -0.1957   -0.0519    0.8784    0.0025   -0.0413   -0.1224   -0.1273   -0.1289
   -0.1298   -0.5635   -0.0331   -0.0842   -0.0685    0.7933   -0.1005    0.0004   -0.0259    0.1119
   -0.2002   -0.2327   -0.0099   -0.0782   -0.0595   -0.0962    0.9398   -0.0274   -0.0524    0.0117
   -0.3278    0.1769   -0.1847   -0.0238   -0.0987    0.0714   -0.0078    0.8775   -0.1186   -0.1662
   -0.4273    0.0534    0.0145   -0.1222   -0.0872   -0.0131   -0.0467   -0.0828    0.8772   -0.1140
   -0.3408    0.4291    0.0365   -0.0661   -0.0416    0.1247    0.0203   -0.0831   -0.1055    0.8114

S = 10×3

   10.9594         0         0
         0    4.6820         0
         0         0    3.4598
         0         0         0
         0         0         0
         0         0         0
         0         0         0
         0         0         0
         0         0         0
         0         0         0

V = 3×3

   -0.6167    0.3011    0.7274
   -0.6282    0.3686   -0.6852
   -0.4744   -0.8795   -0.0382

[Ue,Se,Ve] = pagesvd(X,"econ")
Ue = 10×3

   -0.2554   -0.1828    0.6086
   -0.3408    0.4291    0.0365
   -0.3018   -0.3274   -0.6272
   -0.3560   -0.2919    0.3996
   -0.3711   -0.0109   -0.1957
   -0.1298   -0.5635   -0.0331
   -0.2002   -0.2327   -0.0099
   -0.3278    0.1769   -0.1847
   -0.4273    0.0534    0.0145
   -0.3408    0.4291    0.0365

Se = 3×3

   10.9594         0         0
         0    4.6820         0
         0         0    3.4598

Ve = 3×3

   -0.6167    0.3011    0.7274
   -0.6282    0.3686   -0.6852
   -0.4744   -0.8795   -0.0382

С разложением размера экономики, pagesvd только вычисляет первые 3 столбца Ue, и Se имеет размер 3х3.

Входные параметры

свернуть все

Входной массив в виде матричного или многомерного массива.

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

Выходной формат сингулярных значений в виде одного из этих значений:

  • "vector" — Каждая страница S вектор-столбец. Это - поведение по умолчанию, когда вы задаете тот выход, как в S = pagesvd(X).

  • "matrix" — Каждая страница S диагональная матрица. Это - поведение по умолчанию, когда вы задаете несколько выходных параметров, как в [U,S,V] = pagesvd(X).

Пример: [U,S,V] = pagesvd(X,"vector") возвращает страницы S как вектор-столбцы вместо диагональных матриц.

Пример: S = pagesvd(X,"matrix") возвращает страницы S как диагональные матрицы вместо вектор-столбцов.

Типы данных: char | string

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

свернуть все

Оставленные сингулярные векторы, возвращенные как многомерный массив. Каждая страница U(:,:,i) матрица, столбцы которой являются левыми сингулярными векторами из X(:,:,i).

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

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

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

Сингулярные значения, возвращенные как многомерный массив. Каждая страница S(:,:,i) содержит сингулярные значения X(:,:,i) в порядке убывания.

Для m- n матричный X(:,:,i):

  • Разложение размера экономики [U,S,V] = pagesvd(X,"econ") возвращает S(:,:,i) как квадратная матрица порядка min([m,n]).

  • Полное разложение [U,S,V] = pagesvd(X) возвращает S с тем же размером как X.

Кроме того, сингулярные значения на каждой странице S возвращены как вектор-столбцы или диагональные матрицы в зависимости от того, как вы вызываете pagesvd и ли вы задаете outputForm опция:

  • Если вы вызываете pagesvd с одним выходом или задают "vector" опция, затем каждая страница S вектор-столбец.

  • Если вы вызываете pagesvd с несколькими выходными параметрами или задают "matrix" опция, затем каждая страница S диагональная матрица.

Правильные сингулярные векторы, возвращенные как многомерный массив. Каждая страница V(:,:,i) матрица, столбцы которой являются правильными сингулярными векторами из X(:,:,i).

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

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

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

Больше о

свернуть все

Страницы массивов

Мудрые страницей функции как pagesvd работайте с 2D матрицами, которые были расположены в многомерный массив. Например, с трехмерным массивом элементы в третьей размерности массива обычно называются pages, поскольку они складывают друг на друге как страницы в книге. Каждая страница является матрицей, на которой управляет функция.

Можно также собрать набор 2D матриц в более высокий размерный массив, как 4-D или 5-D массив, и в этих случаях pagesvd все еще обрабатывает основную единицу массива как 2D матрица, на которой управляют, такие как X(:,:,i,j,k,l).

cat функция полезна, чтобы собрать набор матриц в многомерный массив, и zeros функция полезна, чтобы предварительно выделить многомерный массив.

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

Введенный в R2021b