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
Для просмотра документации необходимо авторизоваться на сайте