exponenta event banner

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

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

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

svd(A)

или с одним выходным аргументом

S = svd(A)

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

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

svd возвращает две унитарные матрицы, U и V, столбцы которых являются сингулярными векторами. Он также возвращает диагональную матрицу, S, содержащий сингулярные значения на его диагонали. Элементы всех трех матриц являются числами с плавающей запятой. Точность вычислений определяется текущей установкой digits.

Создать nоколо-n матрица A с элементами, определенными A(i,j) = 1/(i - j + 1/2). Наиболее очевидным способом генерации этой матрицы является

n = 3;
for i = 1:n
    for j = 1:n
      A(i,j) = sym(1/(i-j+1/2));
   end
end

Для n = 3, матрица

A
A =
[   2,  -2, -2/3]
[ 2/3,   2,   -2]
[ 2/5, 2/3,    2]

Вычислите сингулярные значения этой матрицы. Если вы используете svd непосредственно, это вернет точный символический результат. Для этой матрицы результат очень длинный. Если вы предпочитаете более короткий числовой результат, преобразуйте элементы A к числам с плавающей запятой с помощью vpa. Затем использовать svd для вычисления сингулярных значений этой матрицы с помощью арифметики переменной точности:

S = svd(vpa(A))
S =
 3.1387302525015353960741348953506
 3.0107425975027462353291981598225
 1.6053456783345441725883965978052

Теперь вычислите сингулярные значения и сингулярные векторы A:

[U,S,V] = svd(A)
U =
[  0.53254331027335338470683368360204,  0.76576895948802052989304092179952,...
                                        0.36054891952096214791189887728353]
[ -0.82525689650849463222502853672224,  0.37514965283965451993171338605042,...
                                        0.42215375485651489522488031917364]
[  0.18801243961043281839917114171742, -0.52236064041897439447429784257224,...
                                        0.83173955292075192178421874331406]
 
S =
[ 3.1387302525015353960741348953506,                                 0,...
                                                                     0]
[                                 0, 3.0107425975027462353291981598225,...
                                                                     0]
[                                 0,                                 0,...
                                     1.6053456783345441725883965978052]
 
V =
[  0.18801243961043281839917114171742,  0.52236064041897439447429784257224,...
                                        0.83173955292075192178421874331406]
[ -0.82525689650849463222502853672224, -0.37514965283965451993171338605042,...
                                        0.42215375485651489522488031917364]
[  0.53254331027335338470683368360204, -0.76576895948802052989304092179952,...
                                        0.36054891952096214791189887728353]