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

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

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

svd(A)

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

S = svd(A)

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

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

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

Создайте n-by-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]