Декомпозиция сингулярных значений выражает 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]