Вычислите определитель численно

Блокноты 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 опция явным образом.

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