Разложение символьной матрицы в единственном числе
[ возвращает числовые унитарные матрицы U,S,V] = svd(A)U и V со столбцами, содержащими сингулярные векторы, и диагональной матрицей S содержит сингулярные значения. Матрицы удовлетворяют условию A = U*S*V', где V' - эрмитова транспозиция (комплексная сопряженная транспозиция) V. В вычислении сингулярного вектора используется арифметика переменной точности. svd не вычисляет символьные сингулярные векторы. Поэтому входная матрица A должны быть преобразованы в числа с плавающей запятой. Например, это может быть матрица символических чисел.
Вычислить сингулярные значения символа 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]
Использовать второй входной аргумент 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]
Вторые аргументы 0 и 'econ' влияют только на форму возвращаемых матриц. Эти аргументы не влияют на производительность вычислений.
Запрос svd для цифровых матриц, которые не являются символическими объектами, вызывает MATLAB ®svd функция.
Матричные вычисления, включающие множество символьных переменных, могут быть медленными. Чтобы увеличить вычислительную скорость, уменьшите число символьных переменных, подставив заданные значения для некоторых переменных.