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) возвращает tin, или economy, SVD. Если A является m-by- n матрица с m > n, затем svd вычисляет только первое n столбцы U. В этом случае S является n-by- n матрица. Для m <= n, этот синтаксис эквивалентен svd(A).

пример

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

Примеры

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

Вычислите сингулярные значения символьной 5-by- 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-by- 5 магический квадрат - числа с плавающей запятой и вычисление сингулярных значений матрицы:

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

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

Вычислите сингулярные значения и сингулярные векторы 5-by- 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-by- 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-by- 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