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