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