числовой::
Инверсия матрицы
Блокноты 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
.