svd

Сингулярное разложение символьной матрицы

Синтаксис

sigma = svd(A)
[U,S,V] = svd(A)
[U,S,V] = svd(A,0)
[U,S,V] = svd(A,'econ')

Описание

пример

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-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