числовой::

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

Блокноты 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 HA сопоставленный с собственным значением d i 2 (d i = 0 для i> p). Это “правильные сингулярные векторы” A. Они возвращены numeric::singularvectors как массив чисел с плавающей запятой. Матричный V нормирован таким образом, что в каждом столбце первая запись абсолютного размера, больше, чем, действительна и положительна.

Если никакие не возвращаются, тип задан с помощью опции ReturnType = t, доменный тип сингулярных векторов, U и V зависят от типа входной матрицы A:

  • Сингулярные векторы массива возвращены как массивы.

  • Сингулярные векторы hfarray возвращены как hfarrays.

  • Сингулярные векторы плотной матрицы типа 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 <im.

res V = [resV 1, …, resV n] является списком остатков плавающих, сопоставленных с правильными сингулярными векторами:

.

Здесь, v i является (нормированный) i-th столбец V, d i = 0 для p <in.

Остатки 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, который определяет числовую рабочую точность.

Примеры

Пример 1

Числовые выражения преобразованы в плавания:

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:

Пример 2

Мы демонстрируем, как восстановить матрицу от ее сингулярных данных. С заданным 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:

Пример 3

Мы демонстрируем использование аппаратных плаваний. Следующий матричный A является вырожденным: это имеет ранг 1. Для двойного собственного значения 0 из матричного A HA, различные основные векторы соответствующего 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:

Параметры

A

Числовая матрица доменный тип DOM_ARRAY, DOM_HFARRAY, или категории Cat::Matrix.

Опции

Hard, HardwareFloats, Soft, SoftwareFloats

С Hard (или HardwareFloats), вычисления сделаны с помощью быстрой аппаратной плавающей арифметики из сеанса MuPAD. Hard и HardwareFloats эквивалентны. При использовании этой опции входные данные преобразованы в аппаратные плавания и обработаны скомпилированным кодом С. Результат повторно преобразован в плавания MuPAD и возвращен в сеанс MuPAD.

С Soft (или SoftwareFloats) вычисления являются плавающей арифметикой программного обеспечения использования купола, обеспеченной ядром MuPAD. Soft и SoftwareFloats эквивалентны. SoftwareFloats используется по умолчанию, если текущее значение DIGITS больше, чем 15 и входная матрица, A не имеет доменного типа DOM_HFARRAY.

По сравнению с SoftwareFloats, используемым ядром MuPAD, вычисление с HardwareFloats может быть много раз быстрее. Обратите внимание, однако, что точность аппаратной арифметики ограничивается приблизительно 15 цифрами. Далее, размер чисел с плавающей запятой не может быть больше, чем приблизительно 10 308 и не меньшим, чем приблизительно 10 - 308.

Если никакой HardwareFloats или SoftwareFloats не требуют явным образом, следующая стратегия используется: Если текущее значение DIGITS меньше, чем 16 или если матричный A является аппаратным плавающим массивом доменного типа DOM_HFARRAY, то аппаратную арифметику пробуют. Если это успешно, результат возвращен.

Если результат не может быть вычислен с аппаратными плаваниями, арифметику программного обеспечения ядром MuPAD пробуют.

Если текущее значение DIGITS больше, чем 15 и входная матрица, A не имеет доменного типа DOM_HFARRAY, или если одна из опций, Soft, SoftwareFloats или Symbolic заданы, MuPAD, вычисляет результат со своей арифметикой программного обеспечения, не пытаясь использовать аппаратные плавания сначала.

Может быть несколько причин аппаратной арифметики, чтобы перестать работать:

  • Текущее значение DIGITS больше, чем 15.

  • Данные содержат символьные объекты.

  • Данные содержат числа, больше, чем 10 308 или меньший, чем 10 - 308, который не может быть представлен аппаратными плаваниями.

Если ни HardwareFloats, ни SoftwareFloats не заданы, пользователю не сообщают, используются ли аппаратные плавания или плавания программного обеспечения.

Если HardwareFloats задан, но перестал работать из-за одной из причин выше, предупреждение выдано, что (намного более медленное) программное обеспечение арифметика с плавающей точкой ядра MuPAD используется.

Обратите внимание на то, что HardwareFloats может только использоваться, если все входные данные могут быть преобразованы в числа с плавающей запятой.

Запаздывающие цифры в результатах с плавающей точкой, вычисленных с HardwareFloats и SoftwareFloats, могут отличаться.

Примечание

Для плохо обусловленных матриц результат подвергается ошибкам округления. Результаты, возвращенные с HardwareFloats и SoftwareFloats, могут отличаться! Смотрите Пример 3.

NoLeftVectors

Подавляет вычисление левых сингулярных векторов

Если только правильные сингулярные векторы требуются, эта опция может использоваться, чтобы подавить вычисление U и соответствующих остатков resU. Возвращаемыми значениями для этих данных является NIL.

В зависимости от размера U эта опция может значительно ускорить вычисление.

NoRightVectors

Подавляет вычисление правильных сингулярных векторов

Если только левые сингулярные векторы требуются, эта опция может использоваться, чтобы подавить вычисление V и соответствующих остатков resV. Возвращаемыми значениями для этих данных является NIL.

В зависимости от размера V эта опция может значительно ускорить вычисление.

NoResidues

Подавляет вычисление ошибочных оценок

Если никакие ошибочные оценки не требуются, эта опция может использоваться, чтобы подавить вычисление остатков resU и resV. Возвращаемыми значениями для этих данных является NIL.

Альтернативное имя опции NoErrors, используемый в предыдущих версиях MuPAD, все еще доступно.

ReturnType

Опция, заданная как ReturnType = t

Возвратите левые и правые сингулярные векторы как матрицы доменного типа t. Следующее возвращает типы, t доступен: DOM_ARRAY, или DOM_HFARRAY, или Dom::Matrix() или Dom::DenseMatrix().

Эта опция определяет доменный тип матриц, содержащих сингулярные векторы.

NoWarning

Отключает предупреждения

Возвращаемые значения

Перечислите [U, d, V, resU, resV]. U является унитарной квадратной матрицей плавающей, столбцам которой оставляют сингулярные векторы. Список d содержит сингулярные значения. V является унитарной квадратной матрицей плавающей, столбцы которой являются правильными сингулярными векторами. Списки остатков плавающих resU и resV обеспечивают ошибочные оценки для числовых данных.

Для просмотра документации необходимо авторизоваться на сайте