Вычислите детерминант численно

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

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

Чтобы вычислить детерминант квадратной матрицы численно, используйте функцию numeric::det. Например, вычислите детерминант 5 ×5 матриц Паскаля:

numeric::det(linalg::pascal(5))

Когда вы используете числовые функции, результат может быть чрезвычайно чувствителен к ошибкам округления. Например, детерминант матрицы Паскаля любого размера равняется 1. Однако, если вы используете функцию numeric::det, чтобы вычислить детерминант 25×25 матрица Паскаля, вы получаете следующий неправильный результат:

numeric::det(linalg::pascal(15))

Когда вычислительные детерминанты численно, можно использовать HardwareFloats, и опции SoftwareFloats, чтобы использовать оборудование или программное обеспечение пускают в ход арифметику, соответственно. (Можно использовать краткие названия для этих опций: Hard и Soft.)

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

Точность аппаратной арифметики ограничивается приблизительно 15 цифрами. По умолчанию функция numeric::det использует опцию HardwareFloats. Функциональные переключатели к арифметике программного обеспечения при одном или нескольких следующих условий:

  • Вы используете опцию SoftwareFloats или опцию MinorExpansion явным образом.

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

  • Входные данные или вычисленные данные включают числа, которые больше, чем 10 308 или меньше, чем 10 - 308. Аппаратные плавания не могут представлять такие числа.

Точность аппаратной и программной арифметики может отличаться. Поэтому результаты, полученные с HardwareFloats и опциями SoftwareFloats также, могут отличаться. Например, вычислите детерминант 25 ×25 матриц Паскаля, использующих каждую из опций. Обоими числовыми результатами являются несколько порядков, больше, чем правильный ответ из-за ошибок округления. Однако результатом, полученным с помощью арифметики программного обеспечения, являются несколько порядков ближе к правильному ответу:

P := linalg::pascal(25):
detP := det(P):
float(detP);
numeric::det(P, SoftwareFloats);
numeric::det(P, HardwareFloats)

Другим примером численно плохо обусловленных матриц являются Гильбертовы матрицы. Например, создайте 20×20 Гильбертова матрица, вычислите ее детерминант символически, и затем аппроксимируйте результат численно:

H := linalg::hilbert(15):
detH := det(H):
float(detH)

Теперь, используйте функцию numeric::det, чтобы вычислить детерминант численно:

numeric::det(H)

Числовой результат, полученный с опцией SoftwareFloats, ближе к правильному результату:

numeric::det(linalg::hilbert(15), SoftwareFloats)

Чтобы предотвратить преобразование входных данных к числам с плавающей запятой при использовании функции numeric::det, используйте опцию Symbolic. Эта опция позволяет вам вычислять детерминант точно (без ошибок округления). Для матриц по конкретным звонкам и полям, детерминант, вычисленный numeric::det с опцией Symbolic, может отличаться от детерминанта, вычисленного det. Причина состоит в том, что det выполняет вычисления по области компонента входной матрицы. Функция numeric::det с опцией Symbolic всегда выполняет вычисления по полю произвольных выражений MuPAD. Например, создайте следующую матрицу по доменному Dom::IntegerMod(5):

A := Dom::Matrix(Dom::IntegerMod(5))([[1, 2], [3, 4]])

Функция det вычисляет детерминант по доменному Dom::IntegerMod(5) компонента:

det(A)

Функция numeric::det с опцией Symbolic вычисляет детерминант следующей матрицы вместо исходного матричного A:

expr(A)

Детерминант этой матрицы является целым числом:

numeric::det(A, Symbolic)

Функциональные переключатели numeric::det к опции Symbolic при одном или нескольких следующих условий:

  • Вы используете опцию Symbolic явным образом.

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