числовой::

Инверсия матрицы

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

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

Синтаксис

numeric::inverse(A, options)

Описание

numeric::inverse(A) возвращает инверсию матричного A.

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

  • Инверсия массива возвращена как массив.

  • Инверсия hfarray возвращена как hfarray.

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

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

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

Без опции Symbolic все записи A должны быть числовыми. Арифметика с плавающей точкой используется, рабочая точность установлена переменной окружения DIGITS. Точные числовые выражения такой как, sin(3) и т.д. принят и преобразован в плавания. Если символьные записи найдены в матрице, numeric::inverse автоматически переключается на Symbolic, выдавая предупреждение. Это предупреждение может быть подавлено с помощью опции NoWarning.

Примечание

Обратимость матрицы может только быть безопасно обнаружена с точной арифметикой, т.е. использованием опции Symbolic. Смотрите Пример 2.

Примечание

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

Обратите внимание на то, что 1/A должен использоваться, когда инверсия должна быть вычислена по области компонента. Смотрите Пример 3.

Мы рекомендуем использовать numeric::linsolve или numeric::matlinsolve, если разреженная система линейных уравнений должна быть решена. В частности, эти стандартные программы более эффективны, чем numeric::inverse для больших разреженных систем.

numeric::linsolve использует разреженный ввод и вывод через символьные уравнения и показывает внутреннюю разреженную арифметику.

Также разреженные матрицы доменного типа Dom::Matrix() могут использоваться с numeric::matlinsolve.

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

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

Примеры

Пример 1

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

A := array(1..2, 1..2, [[1, 2], [3, PI]]):
numeric::inverse(A), numeric::inverse(A, Symbolic)

Матрицы категории Cat::Matrix приняты. Инверсия возвращена как соответствующая матрица:

A := Dom::Matrix()([[2, PI], [0, 1]]):
numeric::inverse(A); domtype(%)

delete A:

Пример 2

Следующая матрица не является обратимой:

A := linalg::hilbert(6):
A[6,6] := 5773/63504:
A

С точной арифметикой numeric::inverse обнаруживает этот факт:

numeric::det(A, Symbolic), numeric::inverse(A, Symbolic)

Из-за внутреннего округления, матрица рассматривается как обратимая, если арифметика плавающая используется:

numeric::det(A, HardwareFloats), numeric::inverse(A, HardwareFloats);

С SoftwareFloats внутреннее округление немного отличается, и ядро матрицы обнаруживается:

numeric::det(A, SoftwareFloats), numeric::inverse(A, SoftwareFloats)

delete A:

Пример 3

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

A := Dom::Matrix(Dom::IntegerMod(7))([[6, -1], [1, 6]])

Обратите внимание на то, что numeric::inverse вычисляет инверсию следующей матрицы:

expr(A), numeric::inverse(A)

Перегруженная арифметика должна использоваться, если инверсия должна быть вычислена по доменному Dom::IntegerMod компонента (7):

1/A

delete A:

Пример 4

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

A := matrix([[1.0/10^20, 1.0], [1.0, 1.0]]):
bad = numeric::inverse(A, Symbolic),
good = numeric::inverse(A)

delete A:

Пример 5

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

A := linalg::hilbert(10):
DIGITS := 10:
B1 := numeric::inverse(A, HardwareFloats):
B2 := numeric::inverse(A, SoftwareFloats):
B1[8, 8] <> B2[8, 8]

norm(B1 - B2)

delete A, B1, B2:

Параметры

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

Symbolic

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

Эта опция предотвращает преобразование входных данных к плаваниям. При использовании этой опции приняты символьные записи.

Примечание

Эта опция не должна использоваться для матриц с плавающей точкой! Никакой внутренний поворот не используется, если не необходимо. Следовательно, числовая нестабильность может произойти в операциях с плавающей точкой. Смотрите Пример 4.

NoWarning

Без опции Symbolic numeric::inverse автоматически переключается на режим Symbolic с предупреждением, если символьные коэффициенты найдены. С опцией NoWarning подавлено это предупреждение. Обратите внимание, однако, что numeric::inverse все еще использует символьный режим для символьных коэффициентов, т.е. точная арифметика без преобразований с плавающей точкой используется.

ReturnType

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

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

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

В зависимости от типа входной матрицы A инверсия возвращена как матрица доменного типа DOM_ARRAY, DOM_HFARRAY, Dom::Matrix() или Dom::DenseMatrix(). FAIL возвращен, если инверсия не может быть вычислена.

Алгоритмы

Исключение Гаусса с частичным поворотом используется. Частичный поворот выключен опцией Symbolic.

Смотрите также

Функции MuPAD