числовой::Числовое сингулярное разложение матрицы
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
numeric::singularvectors(A, options)
numeric::singularvectors(A) и эквивалентный вызов numeric::svd(A) возвращают числовые сингулярные значения и сингулярные векторы матричного A.
Все записи A должны быть числовыми. Числовые выражения такой как
и т.д. приняты и преобразованы в плавания. Нечисловые символьные записи приводят к ошибке.
Объекты Cat::Matrix, т.е. матрицы A матричной области, такие как Dom::Matrix(…) или Dom::SquareMatrix(…) внутренне преобразован в массивы по выражениям через expr(A).
Список [U, d, V, resU, resV], возвращенный numeric::singularvectors, соответствует сингулярным данным m ×n матричный A, как описано ниже.
Позвольте V, H обозначает, что Эрмитовы транспонируют матричного V, т.е. сопряженного комплексного числа транспонирования. Сингулярное разложение m ×n матричный A является факторизацией A = U D VH. D является m ×n “диагональная” матрица с действительными неотрицательными записями D ii = d i, i = 1, …, p где p = min (m, n):

или
,
соответственно. Список d = [d 1, …, d p] возвращенный numeric::singularvectors является “сингулярными значениями” A. Они сортируются по numeric::sort, т.е. d 1 ≥ … ≥ d p ≥ 0.0.
U является унитарный m ×m матрица. Его i-th столбец является собственным вектором A AH, сопоставленный с собственным значением d i 2 (d i = 0 для i> p). Это “левые сингулярные векторы” A. Они возвращены numeric::singularvectors как матрица чисел с плавающей запятой.
V является унитарный n ×n матрица. Его i-th столбец является собственным вектором A H A сопоставленный с собственным значением d i 2 (d i = 0 для i> p). Это “правильные сингулярные векторы” A. Они возвращены numeric::singularvectors как массив чисел с плавающей запятой. Матричный V нормирован таким образом, что в каждом столбце первая запись абсолютного размера, больше, чем
, действительна и положительна.
Если никакие не возвращаются, тип задан с помощью опции ReturnType = t, доменный тип сингулярных векторов, U и V зависят от типа входной матрицы A:
Сингулярные векторы плотной матрицы типа Dom::DenseMatrix() возвращены как плотные матрицы типа Dom::DenseMatrix() по звонку выражений MuPAD®.
Для всех других матриц категории Cat::Matrix сингулярные векторы возвращены как матрицы типа Dom::Matrix() по звонку выражений MuPAD. Это включает входные матрицы A типа Dom::Matrix(…), Dom::SquareMatrix(…), Dom::MatrixGroup(…) и т.д.
res U = [resU 1, …, resU m] является списком остатков плавающих, сопоставленных с левыми сингулярными векторами:
.
Здесь, u i является (нормированный) i-th столбец U,
обычное комплексное Евклидово скалярное произведение и d i = 0 для p <i ≤ m.
res V = [resV 1, …, resV n] является списком остатков плавающих, сопоставленных с правильными сингулярными векторами:
.
Здесь, v i является (нормированный) i-th столбец V, d i = 0 для p <i ≤ n.
Остатки res U, res V исчезает для точных сингулярных данных U, d, V. Их размеры указывают на качество числовых данных U, d, V.
Сингулярные значения аппроксимированы с абсолютной точностью
, где r является самым большим сингулярным значением A. Следовательно, большие сингулярные значения должны быть вычислены правильно к десятичным разрядам DIGITS. Числовые приближения маленьких сингулярных значений менее точны.
Сингулярные данные могут также быть вычислены через [d2, U, resU] := numeric::eigenvectors(A*A^H) или [d2, V, resV] := numeric::eigenvectors(A^H*A), соответственно. Список d2 связан с сингулярными значениями
.
Использование numeric::singularvectors избегает затрат на умножение матриц. Далее, стандартная программа собственного вектора требует о вдвое больше, чтобы DIGITS вычислил данные, сопоставленные с маленькими сингулярными значениями с той же точностью как numeric::singularvectors. Также обратите внимание, что нормализация U и V может отличаться.
Функция чувствительна к переменной окружения DIGITS, который определяет числовую рабочую точность.
Числовые выражения преобразованы в плавания:
DIGITS := 5: A := array(1..3, 1..2, [[1, PI], [2, 3], [3, exp(sqrt(2))]]): [U, d, V, resU, resV] := numeric::singularvectors(A):
Сингулярные данные:
U, d, V

Маленькие остатки указывают, что эти результаты сильно не затронуты округлением:
resU, resV
![]()
delete DIGITS, A, U, d, V, resU, resV:
Мы демонстрируем, как восстановить матрицу от ее сингулярных данных. С заданным ReturnType сингулярные векторы возвращены как матрицы типа Dom::Matrix() и могут быть обработаны с перегруженной арифметикой:
DIGITS := 3:
A := array(1..2, 1..3, [[1.0, I, PI], [2, 3, I]]):
[U, d, V, resU, resV] := numeric::singularvectors(A, NoResidues,
ReturnType = Dom::Matrix())
“Диагональная” матрица создается из сингулярных значений:
d := matrix(2, 3, d, Diagonal)
![]()
Мы используем методы, которые conjugate и transpose матричной области, чтобы вычислить Эрмитово транспонируют V и восстанавливают A. Числовое округление устраняется через numeric::complexRound:
VH := V::dom::conjugate(V::dom::transpose(V)): map(U*d*VH, numeric::complexRound)

delete DIGITS, A, U, d, V, resU, resV, VH:
Мы демонстрируем использование аппаратных плаваний. Следующий матричный A является вырожденным: это имеет ранг 1. Для двойного собственного значения 0 из матричного A H A, различные основные векторы соответствующего eigenspace возвращены с HardwareFloats и SoftwareFloats, соответственно:
A := array(1..2, 1..3, [[1, 2, 3], [30, 60, 90]]):
[U1, d1, V1, resU1, resV1] :=
numeric::singularvectors(A, HardwareFloats):
[U2, d2, V2, resU2, resV2] :=
numeric::singularvectors(A, SoftwareFloats):
V1, V2
delete A, U1, d1, V1, resU1, resV1, U2, d2, V2, resU2, resV2:
|
Числовая матрица доменный тип |
|
С С По сравнению с Если никакой Если результат не может быть вычислен с аппаратными плаваниями, арифметику программного обеспечения ядром MuPAD пробуют. Если текущее значение Может быть несколько причин аппаратной арифметики, чтобы перестать работать:
Если ни Если Обратите внимание на то, что Запаздывающие цифры в результатах с плавающей точкой, вычисленных с ПримечаниеДля плохо обусловленных матриц результат подвергается ошибкам округления. Результаты, возвращенные с |
|
Подавляет вычисление левых сингулярных векторов Если только правильные сингулярные векторы требуются, эта опция может использоваться, чтобы подавить вычисление В зависимости от размера |
|
Подавляет вычисление правильных сингулярных векторов Если только левые сингулярные векторы требуются, эта опция может использоваться, чтобы подавить вычисление В зависимости от размера |
|
Подавляет вычисление ошибочных оценок Если никакие ошибочные оценки не требуются, эта опция может использоваться, чтобы подавить вычисление остатков Альтернативное имя опции |
|
Опция, заданная как Возвратите левые и правые сингулярные векторы как матрицы доменного типа Эта опция определяет доменный тип матриц, содержащих сингулярные векторы. |
|
Отключает предупреждения |
Перечислите [U, d, V, resU, resV]. U является унитарной квадратной матрицей плавающей, столбцам которой оставляют сингулярные векторы. Список d содержит сингулярные значения. V является унитарной квадратной матрицей плавающей, столбцы которой являются правильными сингулярными векторами. Списки остатков плавающих resU и resV обеспечивают ошибочные оценки для числовых данных.