числовой::

Факторизация Холесского матрицы

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

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

Синтаксис

numeric::factorCholesky(A, options)

Описание

numeric::factorCholesky(A) возвращает факторный L факторизации Холесского A = L  LH положительной определенной Эрмитовой матрицы A.

numeric::factorCholesky(A, Symmetric) возвращает факторный L факторизации типа Холесского A = L  LT симметрической матрицы A.

Факторизацией Холесского квадратной Эрмитовой матрицы является A = L  LH, где L является регулярной комплексной нижней треугольной матрицей и L, H является Эрмитовым, транспонируют L (т.е. сопряженное комплексное число транспонирования L). Такая факторизация только существует, если A положителен определенный.

По умолчанию числовая факторизация вычисляется. Если опция, Symbolic не используется, все компоненты матрицы, преобразована в числа с плавающей запятой. В этом случае матрица не должна содержать символьные объекты, которые не могут быть преобразованы в плавания. Числовые символьные выражения, такие как π, и т.д. приняты.

Если никакие не возвращаются, тип задан с помощью опции ReturnType = d, доменный тип Фактора Холесского, L зависит от типа входной матрицы A:

  • Фактор массива возвращен как массив.

  • Фактор hfarray возвращен как hfarray.

  • Фактором плотной матрицы типа Dom::DenseMatrix() является плотная матрица типа Dom::DenseMatrix() по звонку выражений MuPAD®.

  • Для всех других матриц категории Cat::Matrix факторный L возвращен как matrix типа Dom::Matrix() по звонку выражений MuPAD. Это включает входные матрицы A типа Dom::Matrix(...), Dom::SquareMatrix(...), Dom::MatrixGroup(...) и т.д.

Фактор Холесского, возвращенный numeric::factorCholesky, нормирован таким образом, что его диагональные элементы действительны и положительны.

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

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

Примеры

Пример 1

Мы рассматриваем матрицу

A := array(1..2, 1..2, [[1, I] , [-I, PI]]):

Мы вычисляем числовую факторизацию

numeric::factorCholesky(A)

и символьная факторизация:

L := numeric::factorCholesky(A, Symbolic)

Для последующей обработки Фактор Холесского (доменного типа DOM_ARRAY) преобразован в элемент матричного доменного Dom::Matrix ():

L := matrix(L):

Теперь, перегруженные арифметические операторы +, *, ^ и т.д. может использоваться для дальнейших вычислений:

L*linalg::transpose(conjugate(L))

delete A, L:

Пример 2

Следующая матрица не положительна определенный:

A := matrix([[-2, sqrt(2)], [sqrt(2), 1]]):
numeric::factorCholesky(A)
Error: Matrix not positive definite within working precision. [stdlib::hfa::factorCh]
  Evaluating: numeric::factorCholesky

Однако симметричная факторизация с комплексным Фактором Холесского действительно существует:

numeric::factorCholesky(A, Symmetric)

delete A:

Пример 3

NoCheck опции должен использоваться, когда матрица содержит символьные объекты:

assume(x > 0): assume(z > 0):
A := array(1..2, 1..2, [[x, conjugate(y)], [y, z]]):
numeric::factorCholesky(A, Symbolic, NoCheck)

Обратите внимание на то, что с NoCheck, это принято, что матрица Эрмитова и положительная определенный! Проигнорированы все верхние треугольные записи. Следующий результат неявно принимает u = conjugate(y):

A := array(1..2, 1..2, [[x, u], [y, z]]):
numeric::factorCholesky(A, Symbolic, NoCheck)

delete A:

Пример 4

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

A := linalg::hilbert(13):
L1 := numeric::factorCholesky(A, HardwareFloats):
L2 := numeric::factorCholesky(A, SoftwareFloats):
L1[13, 13] <> L2[13, 13]

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

numeric::factorCholesky(linalg::hilbert(14), HardwareFloats):
Error: Matrix not positive definite within working precision. [stdlib::hfa::factorCh]
  Evaluating: numeric::factorCholesky

Факторизация вычисляется успешно с SoftwareFloats:

L := numeric::factorCholesky(linalg::hilbert(14), SoftwareFloats):
norm(linalg::hilbert(14) - L*linalg::transpose(L))

delete A, L1, L2, L:

Параметры

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, могут значительно отличаться! Смотрите Пример 4.

Symbolic

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

Обычная арифметика для выражений MuPAD используется. При использовании этой опции матричный A может содержать символьные объекты. Обратите внимание на то, что NoCheck опции должен использоваться для Эрмитовой факторизации, когда нечисловые символьные объекты присутствуют.

Symmetric

Заставляет numeric::factorCholesky вычислить симметричную факторизацию A = L  LT, а не Эрмитова факторизация A = L  LH

Симметричной факторизацией Холесского квадратной симметрической матрицы является A = L  LT, где L является регулярной комплексной нижней треугольной матрицей и L, T является транспонированием L. Матричный A не должен быть положителен определенный. Следовательно, с опцией Symmetric никакая внутренняя проверка не выполнена, является ли A положительным определенный. Обратите внимание на то, что симметричная факторизация с регулярным L не существует для всех матриц.

Для действительных симметричных положительных определенных матриц A Фактор Холесского L действителен и Эрмитова факторизация A = L,  LH совпадает с симметричной факторизацией A = L  LT.

NoCheck

Препятствует тому, чтобы numeric::factorCholesky проверял, что матрица является Эрмитовой и положительная определенный

Без опции Symmetric numeric::factorCholesky проверяет, что матричный A является Эрмитовым и положительный определенный. Опция NoCheck может использоваться, чтобы подавить эти проверки. Это должно использоваться, когда матрица содержит символьные объекты. Элементы в верхней треугольной части матрицы никогда не будут затрагиваться алгоритмом!

Примечание

При использовании этой опции numeric::factorCholesky возвращает результат для матриц, которые не являются Эрмитовыми или не положительные определенный (т.е. никакая факторизация Холесского не существует)! При использовании этой опции это - ответственность пользователя убедиться, что входная матрица является соответствующей.

Эта опция не имеет никакого эффекта, когда опция Symmetric используется.

NoWarning

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

Если символьные коэффициенты найдены, numeric::factorCholesky автоматически переключается на режим Symbolic с предупреждением. При использовании этой опции подавлено это предупреждение; стандартная программа все еще использует символьный режим для символьных коэффициентов, т.е. точная арифметика без преобразований с плавающей точкой используется.

ReturnType

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

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

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

В зависимости от типа входной матрицы A нижний треугольный Фактор Холесского L возвращен как матрица доменного типа DOM_ARRAY, DOM_HFARRAY, Dom::Matrix() или Dom::DenseMatrix(). Его компоненты являются действительными или комплексными плаваниями, если опция Symbolic не используется. Без опции NoCheck повышена ошибка, если матрица не Эрмитова или не положительная определенный.