числовой::

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

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

numeric::singularvalues(A, <Hard | HardwareFloats | Soft | SoftwareFloats>)

Описание

numeric::singularvalues(A) возвращает числовые сингулярные значения матричного A.

Сингулярными значениями m ×n матричный A является p = min (m, n) действительные неотрицательные квадратные корни из собственных значений A HA (для p = n) или A  AH (для p = m). Эрмитовы транспонируют A, H является сопряженным комплексным числом транспонирования A.

numeric::singularvalues возвращает список действительных сингулярных значений [d 1, …, d p] отсортированный по numeric::sort, т.е. d 1 ≥ …d p ≥ 0.0.

Все записи A должны быть числовыми. Числовые выражения такой как и т.д. приняты и преобразованы в плавания. Нечисловые символьные записи приводят к ошибке.

Объекты Cat::Matrix, т.е. матрицы A матричной области, такие как Dom::Matrix(…) или Dom::SquareMatrix(…) внутренне преобразован в массивы по выражениям через expr(A).

Примечание

Сингулярные значения аппроксимированы с абсолютной точностью того, где r является самым большим сингулярным значением A. Следовательно, большие сингулярные значения должны быть вычислены правильно к десятичным разрядам DIGITS. Числовые приближения маленьких сингулярных значений менее точны.

Сингулярные значения могут также быть вычислены через map ( numeric::eigenvalues( A   AH), sqrt ) или map ( numeric::eigenvalues( AH  A ), sqrt ), соответственно. Использование numeric::singularvalues избегает затрат на умножение матриц. Далее, стандартная программа собственного значения требует о вдвое больше, чтобы DIGITS вычислил маленькие сингулярные значения с той же точностью как numeric::singularvalues. Cf. Пример 2.

Взаимодействия среды

Функция чувствительна к переменной окружения DIGITS, который определяет числовую рабочую точность.

Примеры

Пример 1

Сингулярные значения A и A H совпадают:

A := array(1..3, 1..2, [[1, 2*I], [2, 3],[3, sqrt(2)]]):
numeric::singularvalues(A)

Эрмитовы транспонируют B = A H:

B := array(1..2, 1..3, [[1, 2, 3], [-2*I, 3, sqrt(2)]]):
numeric::singularvalues(B)

delete A, B:

Пример 2

Мы используем numeric::eigenvalues, чтобы вычислить сингулярные значения:

A := matrix([[1/15, 2/15*I],
            [PI, 314159265358980/50000000000000*I],
            [2, 4*I]]):

Эрмитовы транспонируют B = A, H может быть вычислен методами conjugate и transpose матричной области:

B := A::dom::conjugate(A::dom::transpose(A)):

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

numeric::eigenvalues(B*A)

Следовательно, (неправильное) мнимое сингулярное значение вычисляется:

map(%, sqrt)

Мы должны увеличить DIGITS в порядке вычислить это значение более точно:

DIGITS := 22: 
map(numeric::eigenvalues(B*A), sqrt)

С numeric::singularvalues достаточна стандартная точность:

DIGITS := 10: 
numeric::singularvalues(A, SoftwareFloats)

numeric::singularvalues(A, HardwareFloats)

delete A, B:

Пример 3

Мы демонстрируем использование аппаратных плаваний. Гильбертовы матрицы известно плохо обусловлены: вычисление маленьких сингулярных значений подвергается серьезным эффектам округления. В следующих результатах, обоих с HardwareFloats, а также с SoftwareFloats, маленькие сингулярные значения во власти числового округления. Следовательно, результаты с HardwareFloats не соглашаются от тех с с SoftwareFloats:

numeric::singularvalues(linalg::hilbert(13))

A := linalg::hilbert(15):
numeric::singularvalues(A, HardwareFloats);
numeric::singularvalues(A, SoftwareFloats)

delete A:

Параметры

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.

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

Упорядоченный список действительных значений с плавающей точкой.

Алгоритмы

Код реализует стандартные числовые алгоритмы из Руководства Автоматического Вычисления Уилкинсоном и Рейншем.