числовой::
Числовое сингулярное разложение матрицы
Блокноты 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
обеспечивают ошибочные оценки для числовых данных.