numeric::inverse

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

Блокноты 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