numeric::matlinsolve

Решите линейное матричное уравнение

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

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

Синтаксис

numeric::matlinsolve(A, B, options)

Описание

numeric::matlinsolve(A, B) возвращает матричное решение X матричного уравнения AX = B вместе с ядром матричного A.

numeric::matlinsolve быстрый числовой линейный решатель и для разреженных и для плотных систем. Это - также рекомендуемый решатель для линейных систем с точными или символьными коэффициентами (используйте опцию Symbolic).

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

  • Специальное решение X, а также ядро массива A возвращено как массивы.

  • Специальное решение X, а также ядро hfarray A возвращено как hfarrays.

  • Для плотного matrixA типа Dom::DenseMatrix(), оба специальное решение X, а также ядро A возвращены как матрицы типа Dom::DenseMatrix() по звонку выражений MuPAD®.

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

Без Symbolic, точные числовые входные данные, такие как PI + sqrt(2), sin(3) и т.д. преобразованы в числа с плавающей запятой. Арифметика с плавающей точкой используется. Его точности дают переменную окружения DIGITS. Если символьные данные найдены, что это не может быть преобразовано в числа с плавающей запятой, numeric::matlinsolve автоматически переключатели к его символьному режиму, выдавая предупреждение. Это предупреждение может быть подавлено через NoWarning.

С Symbolic, символьные параметры в матрице коэффициентов A а также в правой стороне B приняты и обработаны без предупреждения.

С SofwareFloats, правая сторона B может содержать символьные параметры, которые не могут быть преобразованы в числа с плавающей запятой. Все записи матрицы коэффициентов A, однако, должно быть конвертируемым к числам с плавающей запятой.

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

X специальное решение уравнения AX = B. Если A имеет нетривиальное ядро, решение, X не уникален.

Примечание

Результат вычисляется с HardwareFloats может отличаться от решения, вычисленного с SoftwareFloats или Symbolic!, В частности, дело обстоит так для систем с нетривиальным ядром.

См. пример 9.

n ×d матричный KernelBasis самое общее решение AX = 0. Его столбцы охватывают d - размерное ядро A.

Таким образом ядро A может быть вычислено через numeric::matlinsolve(A, [0, ..., 0])[2].

Если ядро является 0-мерным, возвращаемое значение KernelBasis целое число 0. Если KernelBasis возвращен как массив, размерность, d ядра является d = op(KernelBasis, [0, 3, 2]]). Если KernelBasis возвращен как матрица типа Dom::Matrix() или Dom::DenseMatrix(), размерностью d ядра является d = KernelBasis::dom::matdim(KernelBasis)[2].

Примечание

Из-за ошибок округления, некоторых или всех базисных векторов в ядре A может быть пропущен в числовых режимах.

Специальное решение X в сочетании с KernelBasis предоставляет общее решение AX = B. Решения сгенерировали без опции ShowAssumptions допустимы для произвольных комплексных чисел символьных параметров, которые могут присутствовать в A и B. Если никакое такое решение не существует, то [FAIL,NIL] возвращен. Решения, которые допустимы только для специальных значений символьных параметров, могут быть получены с ShowAssumptions. Смотрите пример 3, пример 4 и пример 7.

numeric::matlinsolve внутренне использует разреженное представление матриц. Это подходит для решения больших разреженных систем. Смотрите Пример 5.

Примечание

numeric::matlinsolve не реагирует ни на какие предположения на символьных параметрах в A,B это установлено через assume.

Примечание

Исключение Гаусса с частичным поворотом используется. Без опции Symbolic, вертящаяся стратегия заботится о числовой стабилизации. С Symbolic, приняты точные данные. Символьные вертящиеся попытки стратегии максимизируют скорость, и не заботится о числовой стабилизации! Не используйте Symbolic для линейных систем, включающих записи с плавающей точкой! Смотрите Пример 6.

Примечание

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

Обратите внимание на то, что linalg::matlinsolve должен использоваться, когда решение состоит в том, чтобы быть вычислено по области компонента. Смотрите. Пример 8.

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

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

Примеры

Пример 1

Мы используем эквивалентные форматы ввода (B1, B2) представлять вектор с компонентами [a, π]. Во-первых, этот вектор задан как 2-мерный массив:

A := array(1..2, 1..3, [[1, 2, 3],[1, 1, 2]]):
B1 := array(1..2, 1..1, [[a], [PI]]):
numeric::matlinsolve(A, B1)

Затем мы используем 1-мерный массив и вычисляем точное решение:

B2 := array(1..2, [a, PI]):
numeric::matlinsolve(A, B2, Symbolic)

Теперь список используется, чтобы задать вектор. Никакие внутренние предположения не использовались numeric::matlinsolve получить решение:

B3 := [a, PI]:
numeric::matlinsolve(A, B3, ShowAssumptions)

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

A := matrix([[1, 2, 3],[1, 1, 2]]):
B4 := matrix([a, PI]):
numeric::matlinsolve(A, B4)

delete A, B1, B2, B3, B4:

Пример 2

Мы инвертируем матрицу путем решения AX = 1:

A := hfarray(1..3, 1..3, [[1, 1, 0], [0, 1, 1], [0, 0, 1]]):
B := matrix::identity(3, 3):
InverseOfA := numeric::matlinsolve(A, B, Symbolic)[1]

delete A, B, InverseOfA:

Пример 3

Мы решаем уравнение символьным параметром x:

A := matrix([[2, 2, 3], [1, 1, 2], [3, 3, 5]]):
B := matrix([sin(x)^2, cos(x)^2, 0]):
[X, Kernel, Constraints, Pivots] :=
 numeric::matlinsolve(A, B, Symbolic, ShowAssumptions)

Это решение содержит удовлетворяющий ограничению sin (x) 2 + cos (x) 2 = 0 на параметре x. numeric::matlinsolve не исследует Constraints и не понимает, что им нельзя удовлетворить. Мы проверяем непротиворечивость “результата” путем вставки решения в исходную систему. Начиная с входной матрицы A имел тип Dom::Matrix(), результаты X и Kernel были возвращены как соответствующие матрицы. Перегруженные операторы * и - поскольку умножение матриц и вычитание могут использоваться:

A*X - B, A*Kernel

delete A, B, X, Kernel, Constraints, Pivots:

Пример 4

Мы даем дальнейшую демонстрацию опции ShowAssumptions. Следующая система не имеет решения для всех значений параметра a:

A := array(1..2, 1..2, [[1, 1], [1, 1]]):
B := array(1..2, 1..1, [[1], [a]]):
numeric::matlinsolve(A, B, Symbolic)

С ShowAssumptions, numeric::matlinsolve занимается расследованиями под который условия (на параметре a) существует решение:

numeric::matlinsolve(A, B, Symbolic, ShowAssumptions)

Мы приходим к заключению, что существует 1-мерный пробел решения для a = 1.

delete A, B:

Пример 5

Мы решаем разреженную систему с 3 диагональными полосами:

n := 100: 
A := matrix(n, n, [1, -2, 1], Banded):
B := array(1..n, [1 $ n]): 
numeric::matlinsolve(A, B)

delete n, A, B:

Пример 6

Опция Symbolic не должен использоваться в уравнениях с коэффициентами с плавающей точкой, потому что символьная вертящаяся стратегия способствует КПД вместо числовой устойчивости.

A := array(1..2, 1..2, [[1, 10^20], [1, 1]]):
B := array(1..2, 1..1, [[10^20], [0]]):

Приближение плавающее точного решения:

map(numeric::matlinsolve(A, B, Symbolic)[1], float)

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

A := map(A, float): B := map(B, float):

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

numeric::matlinsolve(A, B)[1]

С опцией Symbolic, однако, вертящаяся стратегия оптимизирует скорость, принимая точную арифметику. Числовая нестабильность может произойти, если коэффициенты с плавающей точкой включены. Следующий результат вызывается внутренними эффектами округления (“отмена”):

numeric::matlinsolve(A, B, Symbolic)[1]

Мы должны увеличить DIGITS получить лучший результат:

DIGITS := 20:
numeric::matlinsolve(A, B, Symbolic)[1]

delete A, B, DIGITS:

Пример 7

Мы демонстрируем, как полное решение следующей линейной системы символьными параметрами может быть найдено:

A := array(1..3, 1..2, [[1, 1], [a, b], [1, c]]):
B := array(1..3, 1..1, [[1], [1], [1]]):
numeric::matlinsolve(A, B, Symbolic, ShowAssumptions)

Это - общее решение, принимающее ab. Мы теперь устанавливаем b = a исследовать дальнейшие ветви решения:

A := subs(A, b = a):
numeric::matlinsolve(A, B, Symbolic, ShowAssumptions)

Это - общее решение для a = b, принимая c ≠ 1. Мы наконец устанавливаем c = 1 получать последнюю ветвь решения:

A := subs(A, c = 1):
numeric::matlinsolve(A, B, Symbolic, ShowAssumptions)

От ограничения на a, мы приходим к заключению, что существует 1-мерный пробел решения для специальных значений a = b = c = 1 из символьных параметров.

delete A, B:

Пример 8

Матрицы от области, такие как Dom::Matrix(...) преобразованы в массивы с числами или выражениями. Следовательно, numeric::matlinsolve не находит решения для следующей системы:

M := Dom::Matrix(Dom::IntegerMod(7)):
A := M([[1, 4], [6, 3], [3, 2]]): 
B := M([[9], [5], [0]]):
numeric::matlinsolve(A, B)

Используйте linalg::matlinsolve решить систему по содействующему полю матриц. Решение действительно существует по полю Dom::IntegerMod(7):

linalg::matlinsolve(A, B)

delete M, A, B:

Пример 9

Мы демонстрируем различие между Symbolic, HardwareFloats, и SoftwareFloats. Следующий матричный A имеет 1-мерное ядро. Из-за округления, дальнейший побочный вектор ядра появляется с SoftwareFloats. Никакой вектор ядра не обнаруживается с HardwareFloats:

A := matrix([[2*10^14 + 2, 2*10^(-9), 2*10^(-4)], 
             [3*10^15 + 3, 3*10^(-8), 3*10^(-3)],
             [4*10^16 + 4, 4*10^(-7), 4*10^(-2)]
            ]): 
b := matrix([2*10^(-9), 3*10^(-8), 4*10^(-7)]):
float(numeric::matlinsolve(A, b, Symbolic));
numeric::matlinsolve(A, b, SoftwareFloats);
numeric::matlinsolve(A, b, HardwareFloats)

delete A, b:

Параметры

A

m ×n матрица доменный тип DOM_ARRAY, DOM_HFARRAY, или категории Cat::Matrix

B

m ×p матрица доменного типа DOM_ARRAY, DOM_HFARRAY, или категории Cat::Matrix. Вектор-столбцы B май также быть представленным 1-мерным array(1..m, [B1, B2, …] ), 1-мерный hfarray(1..m, [B1, B2, …] ), или списком [B1, B2, …].

Опции

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 может значительно отличаться! Смотрите Пример 9.

Symbolic

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

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

Примечание

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

ShowAssumptions

Возвращает информацию о внутренних предположениях на символьных параметрах в A и B. При использовании этой опции, или точная арифметика или SoftwareFloats используются.

Эта опция только полезна, если матрицы содержат символьные параметры. Следовательно, это должно только использоваться в сочетании с опцией Symbolic.

Примечание

Эта опция изменяет формат возвращаемого значения к [X, KernelBasis, Constraints, Pivots].

X и KernelBasis представляйте общее решение, удовлетворяющее Constraints и Pivots.

Constraints список уравнений для символьных параметров в B, которые необходимы и достаточны для AX = B, чтобы быть разрешимыми.

Такие ограничения возникают, если Исключение Гаусса приводит к уравнениям формы 0 = c, где c является некоторым выражением, включающим символьные параметры, содержавшиеся в B. Все такие уравнения собраны в Constraints; numeric::matlinsolve принимает, что этим уравнениям удовлетворяют, и возвращает специальное решение X.

Если никакие такие ограничения не возникают, возвращаемое значение Constraints пустой список.

Pivots список неравенств, вовлекающих символьные параметры в A. Внутренне, деление элементами центра происходит в Исключении Гаусса. Выражения собраны в Pivots числители тех элементов центра, которые включают символьные параметры, содержавшиеся в A. Если только числовые элементы центра используются, то возвращаемое значение Pivots пустой список.

Примечание

Constraints обычно список нелинейных уравнений для символьных параметров. Это не исследовано numeric::matlinsolve, т.е. решения могут быть возвращены, даже если Constraints не может быть удовлетворен. Смотрите Пример 3.

Примечание

Эта опция изменяет стратегию возврата “неразрешимых” систем. Без опции ShowAssumptions, результат [FAIL,NIL] возвращен, каждый раз, когда Исключение Гаусса производит уравнение 0 = c с ненулевым c. С ShowAssumptions, такие уравнения возвращены через Constraints, если c включает символьные параметры. Если c является чисто численным значением, то [FAIL, NIL, [], []] возвращен.

Смотрите пример 3, пример 4 и пример 7.

NoWarning

Отключает предупреждения

Если символьные коэффициенты найдены, numeric::matlinsolve автоматически переключатели к Symbolic режим с предупреждением. При использовании этой опции подавлено это предупреждение; numeric::matlinsolve все еще использует символьный режим в символьных коэффициентах, т.е. точная арифметика без преобразований с плавающей точкой используется.

ReturnType

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

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

Sparse

Используйте разреженное внутреннее представление в матрицах.

Эта опция только оказывает влияние, когда используется в сочетании с HardwareFloats. С Sparse опция, линейный решатель использует разреженное представление матриц, чтобы сохранить КПД увеличения и память. Однако, если матрица коэффициентов не будет разреженна, эта опция будет стоить некоторой дополнительной памяти и времени выполнения.

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

Без опции ShowAssumptions, список [X, KernelBasis] возвращен. (Специальное) решение X n ×p матрица. KernelBasis n ×d матрица (d является размерностью ядра A). Его столбцы охватывают ядро A. Если ядро тривиально, KernelBasis целое число 0.

[FAIL, NIL] возвращен, если система не разрешима.

С ShowAssumptions, список [X, KernelBasis, Constraints, Pivots] возвращен. Списки Constraints и Pivots содержите уравнения и неравенства, вовлекающие символьные параметры в A и B. Внутренне они были приняты, чтобы сохраняться при решении системы. [FAIL, NIL, [], []] возвращен, если система не разрешима.

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

Функции MuPAD