числовой::

LU-факторизация матрицы

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

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

Синтаксис

numeric::factorLU(A, options)

Описание

numeric::factorLU(A) возвращает факторизацию LU матричного A.

Факторизацией LU действительного или комплексного m ×n матричный A является PA = LU. m ×m матричный L является нижним треугольным, нормирован к 1 по диагонали. m ×n матричный U верхний треугольный, т.е. U ij = 0 для j <i. Список p = [p1, …, pm], возвращенный numeric::factorLU, является перестановкой чисел 1, …, m, соответствующий обменам строки A. Это представляет следующий m ×m матрица перестановок P (мы принимаем, что матричные индексы колеблются от 1 до m):

.

Оставленное умножение матриц и векторов с P понято легко с помощью списка перестановки p: Y i, j: = X p i, j задает перестановку строки Y = PX матричного X, y i: = x p i задает перестановку строки y = Px векторного x.

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

Факторизация зависит от вертящейся стратегии. Результаты, полученные с/без опцией Symbolic, могут отличаться. Смотрите Пример 2. Для числовых факторизаций могут отличаться результаты, полученные с HardwareFloats и SoftwareFloats, соответственно. Смотрите Пример 3.

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

  • Факторы массива возвращены как массивы.

  • Факторы hfarray возвращены как hfarrays.

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

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

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

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

Примеры

Пример 1

Мы учитываем матрицу, заданную массивом:

A := array(1..3, 1..3, [[1, 2, 3], [2, 4, 6], [4, 8, 9]]):
[L, U, p] := numeric::factorLU(A)

Факторы (доменного типа DOM_ARRAY) преобразованы в элементы матричного доменного Dom::Matrix (). После преобразования, перегруженные арифметические операторы +, *, ^ и т.д. может использоваться для последующей обработки:

L := matrix(L): U := matrix(U):
L*U

Продукт LU совпадает с A после обмена строками согласно перестановке, сохраненной в списке p:

PA := array(1..3, 1..3, [[A[p[i], j] $ j=1..3] $ i=1..3])

delete A, L, U, p, PA:

Пример 2

Мы считаем неквадратную матрицу размерности 3 ×2:

A := matrix([[3*I, 10], [I, 1], [I, 1]]):
[L1, U1, p1] := numeric::factorLU(A)

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

[L2, U2, p2] := numeric::factorLU(A, Symbolic)

Здесь, матричные факторы имеют тип Dom::Matrix(), потому что входная матрица A имела этот тип. Мы можем использовать перегруженную арифметику непосредственно. Мы преобразовываем списки перестановок p1, p2 к матрицам и проверяем отношение PA = LU для факторизации:

P1 := matrix(3, 3):
P2 := matrix(3, 3):
for i from 1 to 3 do
  P1[i, p1[i]] := 1;
  P2[i, p2[i]] := 1;
end_for:
P1*A - L1*U1, P2*A - L2*U2

delete A, L1, U1, p1, L2, U2, p2:

Пример 3

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

n := 14:
A := linalg::hilbert(n):
[L1, U1, p1] := numeric::factorLU(A, HardwareFloats):
[L2, U2, p2] := numeric::factorLU(A, SoftwareFloats):
p1, p2

Однако обе факторизации удовлетворяют PA = LU численно:

P1A := matrix([[A[p1[i], j] $ j = 1..n] $ i = 1..n]):
P2A := matrix([[A[p2[i], j] $ j = 1..n] $ i = 1..n]):
norm(P1A - L1*U1), norm(P2A - L2*U2)

delete n, A, L1, U1, p1, L2, U2, p2, P1A, P2A:

Параметры

A

m ×n матрица доменный тип 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, могут значительно отличаться! Смотрите Пример 3.

Symbolic

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

Обычная арифметика для выражений MuPAD используется. При использовании этой опции матричный A может содержать символьные объекты.

При использовании этой опции никакие обмены строки не выполняются во внутреннем Исключении Гаусса, если не необходимо.

NoWarning

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

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

ReturnType

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

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

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

Список [L, U, p] возвращен. Доменный тип m ×m матричный L и m ×n матричный U зависит от типа входной матрицы A; p является списком с элементами m, состоящими из перестановки целых чисел 1, …, m. Это представляет обмены строки на вертящихся шагах. Компоненты L и U являются действительными или комплексными плаваниями, если опция Symbolic не используется.