numeric::inverseИнверсия матрицы
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
numeric::inverse(A, options)
numeric::inverse(A) возвращает инверсию матричного A.
Если никакие не возвращаются, тип задан с помощью опции ReturnType = t, доменный тип инверсии зависит от типа входной матрицы A:
Инверсия плотной матрицы типа 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, который определяет числовую рабочую точность.
Числовые матрицы могут быть обработаны с или без опции 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:
Следующая матрица не является обратимой:
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:
Следующая матрица имеет доменные компоненты:
A := Dom::Matrix(Dom::IntegerMod(7))([[6, -1], [1, 6]])

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

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

delete A:
Опция Symbolic не должен использоваться в матрицах плавающих, потому что никакой внутренний поворот не используется, чтобы стабилизировать числовой алгоритм:
A := matrix([[1.0/10^20, 1.0], [1.0, 1.0]]): bad = numeric::inverse(A, Symbolic), good = numeric::inverse(A)

delete A:
Мы демонстрируем использование аппаратных плаваний. Гильбертовы матрицы являются известно плохо обусловленными и трудными инвертировать с низкими значениями 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:
|
Квадратная матрица доменный тип |
|
С С По сравнению с Если никакой Если результат не может быть вычислен с аппаратными плаваниями, арифметику программного обеспечения ядром MuPAD пробуют. Если текущее значение Может быть несколько причин аппаратной арифметики, чтобы перестать работать:
Если никакой Если Обратите внимание на то, что Запаздывающие цифры в результатах с плавающей точкой вычисляются с |
|
Предотвращает преобразование входных данных к числам с плавающей запятой. Точная арифметика используется. Эта опция заменяет Эта опция предотвращает преобразование входных данных к плаваниям. При использовании этой опции приняты символьные записи. ПримечаниеЭта опция не должна использоваться в матрицах с плавающей точкой! Никакой внутренний поворот не используется, если не необходимо. Следовательно, числовая нестабильность может произойти в операциях с плавающей точкой. Смотрите Пример 4. |
|
Без опции |
|
Опция, заданная как Возвратите инверсию как матрицу доменного типа |
В зависимости от типа входной матрицы A, инверсия возвращена как матрица доменного типа DOM_ARRAY, DOM_HFARRAY, Dom::Matrix(), или Dom::DenseMatrix(). FAIL возвращен, если инверсия не может быть вычислена.
Исключение Гаусса с частичным поворотом используется. Частичный поворот выключен опцией Symbolic.