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