exponenta event banner

svd

Разложение символьной матрицы в единственном числе

Описание

пример

sigma = svd(A) возвращает вектор sigma содержит сингулярные значения символьной матрицы A.

пример

[U,S,V] = svd(A) возвращает числовые унитарные матрицы U и V со столбцами, содержащими сингулярные векторы, и диагональной матрицей S содержит сингулярные значения. Матрицы удовлетворяют условию A = U*S*V', где V' - эрмитова транспозиция (комплексная сопряженная транспозиция) V. В вычислении сингулярного вектора используется арифметика переменной точности. svd не вычисляет символьные сингулярные векторы. Поэтому входная матрица A должны быть преобразованы в числа с плавающей запятой. Например, это может быть матрица символических чисел.

пример

[U,S,V] = svd(A,0) возвращает тонкий, или экономичный, SVD. Если A является mоколо-n матрица с m > n, то svd вычисляет только первый n столбцы U. В этом случае S является nоколо-n матрица. Для m <= n, этот синтаксис эквивалентен svd(A).

пример

[U,S,V] = svd(A,'econ') также возвращает тонкий, или экономичный, SVD. Если A является mоколо-n матрица с m >= n, то этот синтаксис эквивалентен svd(A,0). Для m < n, svd вычисляет только первый m столбцы V. В этом случае S является mоколо-m матрица.

Примеры

Символические сингулярные значения

Вычислить сингулярные значения символа 5около-5 магический квадрат:

A = sym(magic(5));
sigma = svd(A)
sigma =
 
                              65
 5^(1/2)*(1345^(1/2) + 65)^(1/2)
    65^(1/2)*(5^(1/2) + 5)^(1/2)
    65^(1/2)*(5 - 5^(1/2))^(1/2)
 5^(1/2)*(65 - 1345^(1/2))^(1/2)

Теперь вычислите сингулярные значения матрицы, элементы которой являются символическими выражениями:

syms t real
A = [0 1; -1 0];
E = expm(t*A)
sigma = svd(E)
E =
[  cos(t), sin(t)]
[ -sin(t), cos(t)]
 
sigma =
 (cos(t)^2 + sin(t)^2)^(1/2)
 (cos(t)^2 + sin(t)^2)^(1/2)

Упростите результат:

sigma = simplify(sigma)
sigma =
 1
 1

Для дальнейших вычислений удалите предположение о t путем его повторного создания с использованием syms:

syms t

Сингулярные значения с плавающей запятой

Преобразование элементов обозначения 5около-5 магические квадратные числа с плавающей запятой и вычисляют сингулярные значения матрицы:

A = sym(magic(5));
sigma = svd(vpa(A))
sigma =
 
                              65.0
 22.547088685879657984674226396467
 21.687425355202639411956035427154
 13.403565997991492328585154445703
 11.900789544861194527298509087321

Сингулярные значения и сингулярные векторы

Вычислите сингулярные значения и сингулярные векторы 5около-5 магический квадрат:

old = digits(10);
A = sym(magic(5))
[U, S, V] = svd(A)
digits(old)
A =
 
[ 17, 24,  1,  8, 15]
[ 23,  5,  7, 14, 16]
[  4,  6, 13, 20, 22]
[ 10, 12, 19, 21,  3]
[ 11, 18, 25,  2,  9]
 
 
U =
 
[ 0.4472135955,    0.5456348731,  0.5116672736, -0.1954395076,  -0.4497583632]
[ 0.4472135955,    0.4497583632, -0.1954395076,  0.5116672736,   0.5456348731]
[ 0.4472135955, 2.420694008e-15,  -0.632455532,  -0.632455532, 1.29906993e-15]
[ 0.4472135955,   -0.4497583632, -0.1954395076,  0.5116672736,  -0.5456348731]
[ 0.4472135955,   -0.5456348731,  0.5116672736, -0.1954395076,   0.4497583632]
 
 
S =
 
[ 65.0,           0,           0,         0,           0]
[    0, 22.54708869,           0,         0,           0]
[    0,           0, 21.68742536,         0,           0]
[    0,           0,           0, 13.403566,           0]
[    0,           0,           0,         0, 11.90078954]
 
 
V =
 
[ 0.4472135955,   0.4045164361,     0.2465648962,    0.6627260007,  0.3692782866]
[ 0.4472135955, 0.005566159714,     0.6627260007,   -0.2465648962, -0.5476942741]
[ 0.4472135955,  -0.8201651916, -3.091014288e-15, 6.350407543e-16,  0.3568319751]
[ 0.4472135955, 0.005566159714,    -0.6627260007,    0.2465648962, -0.5476942741]
[ 0.4472135955,   0.4045164361,    -0.2465648962,   -0.6627260007,  0.3692782866]

Вычислить произведение U, S, и эрмитовский транспонирование V с 10-значной точностью. Результатом является исходная матрица. A со всеми его элементами, преобразованными в числа с плавающей запятой:

vpa(U*S*V',10)
ans =
 
[ 17.0, 24.0,  1.0,  8.0, 15.0]
[ 23.0,  5.0,  7.0, 14.0, 16.0]
[  4.0,  6.0, 13.0, 20.0, 22.0]
[ 10.0, 12.0, 19.0, 21.0,  3.0]
[ 11.0, 18.0, 25.0,  2.0,  9.0]

Тонкий или экономичный SVD

Использовать второй входной аргумент 0 для вычисления тонкого, или экономичного, SVD этого 3около-2 матрица:

old = digits(10);
A = sym([1 1;2 2; 2 2]);
[U, S, V] = svd(A, 0)
U =
[ 0.3333333333, -0.6666666667]
[ 0.6666666667,  0.6666666667]
[ 0.6666666667, -0.3333333333]
 
S =
[ 4.242640687, 0]
[           0, 0]
 
V =
[ 0.7071067812,  0.7071067812]
[ 0.7071067812, -0.7071067812]

Теперь используйте второй входной аргумент 'econ' для вычисления тонкой или экономичной матрицы B. Здесь, 3около-2 матрица B - транспонирование A.

B = A';
[U, S, V] = svd(B, 'econ')
digits(old)
U =
[ 0.7071067812, -0.7071067812]
[ 0.7071067812,  0.7071067812]
 
S =
[ 4.242640687, 0]
[           0, 0]
 
V =
[ 0.3333333333,  0.6666666667]
[ 0.6666666667, -0.6666666667]
[ 0.6666666667,  0.3333333333]

Входные аргументы

свернуть все

Входная матрица, заданная как символьная матрица. Для синтаксиса с одним выходным аргументом элементы A могут быть символьными числами, переменными, выражениями или функциями. Для синтаксиса с тремя выходными аргументами, элементы A должны быть преобразованы в числа с плавающей запятой.

Выходные аргументы

свернуть все

Сингулярные значения матрицы, возвращаемые в виде вектора. Если sigma - вектор чисел, затем его элементы сортируются в порядке убывания.

Сингулярные векторы, возвращаемые как унитарная матрица. Каждый столбец этой матрицы является сингулярным вектором.

Сингулярные значения, возвращаемые в виде диагональной матрицы. Диагональные элементы этой матрицы появляются в порядке убывания.

Сингулярные векторы, возвращаемые как унитарная матрица. Каждый столбец этой матрицы является сингулярным вектором.

Совет

  • Вторые аргументы 0 и 'econ' влияют только на форму возвращаемых матриц. Эти аргументы не влияют на производительность вычислений.

  • Запрос svd для цифровых матриц, которые не являются символическими объектами, вызывает MATLAB ®svd функция.

  • Матричные вычисления, включающие множество символьных переменных, могут быть медленными. Чтобы увеличить вычислительную скорость, уменьшите число символьных переменных, подставив заданные значения для некоторых переменных.

Представлен до R2006a