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

Сингулярное разложение описывает 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]