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