decomposition

Матричное разложение для решения линейных систем

Описание

decomposition создает допускающие повторное использование матричные разложения (LU, LDL, Холесский, QR и другие), которые позволяют вам решить линейные системы (Ax = b или xA = b) более эффективно. Например, после вычисления dA = decomposition(A) вызов dA\b возвращает тот же вектор как A\b, но обычно намного быстрее. decomposition объекты являются подходящими к решению задач, которые требуют повторных решений, поскольку разложение матрицы коэффициентов не должно быть выполнено многократно.

Можно использовать decomposition объект dA со многими из тех же операторов вы можете использовать на исходной матрице коэффициентов A:

  • Комплексное сопряженное транспонирование dA'

  • Отрицание -dA

  • Умножьтесь или разделитесь на скаляр с помощью c*dA или dA/c.

  • Решите линейную систему Ax = b с помощью x = dA\b.

  • Решите линейную систему xA = b с помощью x = b/dA.

Создание

Описание

пример

dA = decomposition(A) возвращает разложение матричного A то, что можно использовать, чтобы решить линейные системы более эффективно. Тип разложения автоматически выбран на основе свойств входной матрицы.

пример

dA = decomposition(A,type) задает тип разложения, чтобы выполнить. type может быть 'qr', 'cod'лютецийldlchol, 'triangular', 'permutedTriangular', 'banded', 'hessenberg', или 'diagonal'.

пример

dA = decomposition(A,type,triangularFlag) указывает что только верхний или нижний треугольный фрагмент A должен использоваться в разложении. triangularFlag может быть 'upper' или 'lower'. С этим синтаксисом типом разложения должен быть 'ldl'chol, или 'triangular'.

пример

dA = decomposition(___,Name,Value) задает дополнительные опции с помощью одного или нескольких Name,Value парные аргументы с помощью любого из предыдущих синтаксисов. Например, dA = decomposition(A,'CheckCondition',false) задает, чтобы не выдать предупреждение на основе условия A при решении dA\b.

Входные параметры

развернуть все

Матрица коэффициентов. Матрица коэффициентов появляется в системе линейных уравнений слева как Ax = b или справа как xA = b.

Типы данных: single | double
Поддержка комплексного числа: Да

Тип разложения в виде одной из опций в этих таблицах.

Эти опции работают на любую матрицу коэффициентов.

Значение

Матричное разложение A

Примечания

'auto' (значение по умолчанию)

N/A

Автоматический выбор матричного разложения вводит на основе свойств матрицы коэффициентов. Для получения информации о том, как выбрано разложение, смотрите раздел Algorithms mldivide.

'qr'

AP=QR

Q унитарно, R верхний треугольный, и P матрица перестановок.

Разложения QR дают решение методом наименьших квадратов.

Если type 'qr', затем вы не можете решить A'\B или B/A. Вместо этого используйте 'cod' для проблем с теми формами.

'cod'

A=QRZ*

R верхний треугольный, и оба Q и Z имейте ортонормированные столбцы.

Завершитесь ортогональные разложения дают минимальное решение методом наименьших квадратов нормы.

Для квадратных содействующих матриц также можно использовать эти опции.

Значение

Матричное разложение A

Примечания

'lu'

Плотные матрицы:

PA=LU

L является нижним треугольным, U верхний треугольный, и P матрица перестановок.

Разреженные матрицы:

P(R\A)Q=LU

P и Q матрицы сочетания и R диагональная матрица масштабирования.

 

'ldl'

Плотные матрицы:

P*AP=LDL*

L нижняя треугольная матрица с 1 с на диагонали, D диагональная матрица и P матрица перестановок.

Разреженные матрицы:

P*SASP=LDL*

S масштабирующаяся матрица.

A должно быть симметричным.

'chol'

Плотные матрицы:

A=LL*

L является нижним треугольным.

Разреженные матрицы:

A=PLL*P*

P матрица перестановок.

A должен быть симметричен положительный определенный.

'triangular'

A=T

T является треугольным.

A должно быть треугольным.

'permutedTriangular'

A=PTQ*

T является треугольным, и оба P и Q матрицы сочетания.

A должно быть сочетание треугольной матрицы.

'banded'

A=P*LU

P матрица перестановок и оба L и U соединены.

Самый эффективный для матриц с низкой полосой пропускания. Смотрите bandwidth для получения дополнительной информации.

'hessenberg'

A=P*LU

P матрица перестановок, L соединен, и U верхний треугольный.

A должен иметь нули ниже первой поддиагонали.

'diagonal'

A=D

D является диагональным.

A должно быть диагональным.

Отметьте, чтобы использовать только верхний или нижний треугольный фрагмент матрицы коэффициентов в виде любого 'upper' или 'lower'. Эта опция поддерживает 'triangular'chol, и 'ldl' типы разложения.

  • 'triangular' — Если и верхняя и нижняя треугольная матрица хранится в той же матрице, то используйте triangularFlag задавать только одну из треугольных матриц.

  • 'chol' и 'ldl' — Используйте triangularFlag постараться не симметрировать почти симметричную матрицу коэффициентов.

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: dA = decomposition(A,'qr','CheckCondition',false) выполняет разложение QR A и выключает предупреждения об условии матрицы коэффициентов, когда это используется, чтобы решить линейную систему.
Общие параметры

развернуть все

Переключитесь, чтобы проверять условие матрицы коэффициентов в виде разделенной запятой пары, состоящей из 'CheckCondition' и любой логический 1 TRUE) или логический 0 ложь). Если CheckCondition true и матрица коэффициентов плохо обусловливается или низкого ранга, затем решая линейные системы с помощью mldivide (\) или mrdivide (/) производит предупреждения.

Типы данных: логический

Оцените допуск в виде неотрицательного скаляра. Определение допуска может помочь препятствовать решению быть восприимчивым к случайному шуму в матрице коэффициентов.

decomposition вычисляет ранг A как количество диагональных элементов в R матрица разложения QR [Q,R,p] = qr(A,0) с абсолютным значением, больше, чем tol. Если ранг A k, затем приближение низкого ранга A формируется путем умножения первого k столбцы Q первым k строки R. Изменение допуска влияет на это приближение низкого ранга A.

Примечание

Эта опция только применяется когда 'Type' 'qr' или 'cod', или когда 'Type' 'auto' и A является прямоугольным. В противном случае эта опция проигнорирована.

Параметры разреженной матрицы

развернуть все

Порог плотности полосы в виде скалярного значения в области значений [0 1]. Значение 'BandDensity' определяет, насколько плотный разреженная, полосная матрица коэффициентов должна быть для полосного решателя, который будет использоваться mldivide (\) или mrdivide (/) при решении системы уравнений. Если плотность полосы матрицы коэффициентов больше, чем заданная плотность полосы, то полосный решатель используется.

Плотность полосы задана как: (# ненули в полосе) / (# элементы в полосе). Значение 1.0 указывает, чтобы никогда не использовать полосный решатель.

Допуск центра к LDL-разложению в виде скалярного значения в интервале [0 0.5]. Используя меньшие значения центра допуск может дать более быстрые времена факторизации и меньше записей, но также и может привести к менее устойчивой факторизации.

Этот допуск центра является тем же самым это ldl использование для действительных разреженных матриц.

Допуск центра к LU-факторизации в виде скаляра или вектора. Задайте скалярное значение, чтобы изменить первый элемент в векторе допуска или задать двухэлементный вектор, чтобы изменить оба значения. Меньшие допуски центра имеют тенденцию приводить к более разреженным факторам LU, но решение может стать неточным. Большие значения могут привести к более точному решению, но не всегда, и обычно увеличивать общую работу и использование памяти.

Этот допуск центра является тем же самым это lu использование для разреженных матриц.

Свойства

развернуть все

Это свойство доступно только для чтения.

Размер матрицы коэффициентов, возвращенной как двухэлементный вектор-строка.

Типы данных: double

Это свойство доступно только для чтения.

Тип разложения, возвращенный как 'qr', 'cod'лютецийldlchol, 'triangular', 'permutedTriangular', 'banded', 'hessenberg', или 'diagonal'.

Типы данных: char

Переключитесь, чтобы проверять условие матрицы коэффициентов в виде любого логического 1 TRUE) или логический 0 ложь). Если CheckCondition true и матрица коэффициентов плохо обусловливается или низкого ранга, затем решая линейные системы с помощью mldivide (\) или mrdivide (/) производит предупреждения.

Типы данных: логический

Это свойство доступно только для чтения.

Тип данных матрицы коэффициентов, возвращенной как любой 'double' или 'single'.

Типы данных: char

Это свойство доступно только для чтения.

Индикатор, что матрица коэффициентов является транспонированным сопряженным комплексным числом, возвратился как любой логический 1 TRUE) или логический 0 ложь). Этим индикатором является false по умолчанию для любого decomposition объект создается из матрицы коэффициентов. Однако значением является true если вы используете ctranspose оператор на decomposition объект в выражении, таком как dA'\b. В этом случае, dA' тот же decomposition возразите как dA, но со значением true для IsConjugateTransposed.

Типы данных: логический

Это свойство доступно только для чтения.

Индикатор, что матрица коэффициентов действительна, возвратился как любой логический 1 TRUE) или логический 0 ложь). Значение false указывает, что матрица коэффициентов содержит комплексные числа.

Типы данных: логический

Это свойство доступно только для чтения.

Индикатор, что матрица коэффициентов разреженна, возвратился как любой логический 1 TRUE) или логический 0 ложь).

Типы данных: логический

Это свойство доступно только для чтения.

Мультипликативный масштабный коэффициент для матрицы коэффициентов, возвращенной как скаляр. Значение по умолчанию 1 указывает, что матрица коэффициентов не масштабируется. Однако, когда вы умножаете или делите decomposition объект скаляром, значением ScaleFactor изменения. Например, 3*dA decomposition возразите эквивалентный dA, но со значением 3 для ScaleFactor.

Типы данных: double
Поддержка комплексного числа: Да

Функции объекта

Первичные функции и операторы, которые можно использовать с decomposition объекты связаны с решением линейных систем уравнений. Если типом разложения является 'qr', затем вы не можете решить A'\B или B/A. Вместо этого используйте 'cod' для проблем с теми формами.

ctransposeКомплексное сопряженное транспонирование
mldivideРешите системы линейных уравнений Ax = B для x
mrdivideРешите системы линейных уравнений xA = B для x
isIllConditionedОпределите, обусловливается ли матрица плохо

Также можно проверять число обусловленности или ранг базовой матрицы decomposition объекты. Поскольку различные алгоритмы используются, результаты использования этих функций на decomposition объект может отличаться по сравнению с использованием тех же функций непосредственно на матрице коэффициентов.

rank
  • Только форма с 1 входом rank(dA) поддерживается.

  • Типом разложения должен быть 'qr' или 'cod'.

  • Значение ранга зависит от выбора RankTolerance, если задано.

rcond
  • Осуществляет ту же проверку условия та обратная косая черта \ использование, чтобы определить, выдать ли предупреждение.

  • Поддержки все разложение вводят за исключением 'qr' и 'cod'.

Примеры

свернуть все

Покажите как использование decomposition объекты могут повысить эффективность решения Ax=b со многими правыми сторонами.

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

Создайте разреженную матрицу A и случайные стартовые векторы x1 и x2.

n = 1e3;
rng default % for reproducibility
A = sprandn(n,n,0.2) + speye(n);
x1 = randn(n,1);
x2 = x1;

Примените 100 итераций обратного алгоритма итерации с помощью обратной косой черты, чтобы вычислить собственное значение A.

tic
for ii=1:100
    x1 = A \ x1;
    x1 = x1 / norm(x1);
end
toc
Elapsed time is 12.038647 seconds.
lambda = x1'*A*x1
lambda = -0.6707

Теперь используйте decomposition объект решить ту же задачу.

tic
dA = decomposition(A); 
for ii=1:100
    x2 = dA \ x2;
    x2 = x2 / norm(x2);
end
toc
Elapsed time is 0.867172 seconds.
lambda = x2'*A*x2
lambda = -0.6707

Эффективность алгоритма улучшается существенно потому что матричный A не должен быть разложен на множители во время каждой итерации. Кроме того, даже при том, что алгоритм обратной косой черты может быть улучшен путем выполнения LU-разложения A перед for- цикл, decomposition объект предоставляет доступ ко всему тому же увеличению производительности, не требуя, чтобы вы записали сложный код.

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

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

A = ones(3);
dA = decomposition(A)
dA = 
  decomposition with properties:

    MatrixSize: [3 3]
          Type: 'ldl'

  Show all properties

Решите линейную систему с помощью вектора из единиц для правой стороны.

b = ones(3,1);
x = dA\b
Warning: Matrix is singular to working precision.
x = 3×1

   NaN
   NaN
   NaN

Задайте тип разложения, чтобы использовать 'qr' метод вместо 'ldl' по умолчанию метод. Это обеспечивает обратную косую черту (\), чтобы найти решение методом наименьших квадратов к проблеме вместо того, чтобы возвратить вектор из NaNs.

dA_qr = decomposition(A,'qr')
dA_qr = 
  decomposition with properties:

    MatrixSize: [3 3]
          Type: 'qr'

  Show all properties

x = dA_qr\b
Warning: Rank deficient, rank = 1, tol =  1.153778e-15.
x = 3×1

     1
     0
     0

Задайте 'upper' использовать только верхний треугольный фрагмент входной матрицы в разложении.

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

A = randi([0 5],10)
A = 10×10

     4     0     3     4     2     1     4     5     2     0
     5     5     0     0     2     4     1     1     4     0
     0     5     5     1     4     3     3     4     3     3
     5     2     5     0     4     0     4     1     3     4
     3     4     4     0     1     0     5     5     5     5
     0     0     4     4     2     2     5     2     1     0
     1     2     4     4     2     5     3     1     4     3
     3     5     2     1     3     2     0     1     4     2
     5     4     3     5     4     3     0     3     2     0
     5     5     1     0     4     1     1     2     3     2

dA = decomposition(A,'triangular','upper')
dA = 
  decomposition with properties:

    MatrixSize: [10 10]
          Type: 'triangular'

  Show all properties

Используйте 'CheckCondition' пара "имя-значение", чтобы выключить предупреждения на основе условия матрицы коэффициентов при решении линейной системы с помощью decomposition.

Создайте матрицу коэффициентов, которая плохо обусловливается. В этой матрице, составляя в среднем вместе первые два столбца производит третий столбец.

A = [1 2 1.5; 3 4 3.5; 5 6 5.5]
A = 3×3

    1.0000    2.0000    1.5000
    3.0000    4.0000    3.5000
    5.0000    6.0000    5.5000

Решите линейную систему Ax=b использование вектора 1 с для правой стороны. mldivide производит предупреждение о создании условий матрицы коэффициентов.

b = ones(3,1);
x = A\b
Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND =  1.850372e-17.
x = 3×1

   -0.6250
    1.3750
   -0.7500

Теперь создайте decomposition объект для матрицы и решает ту же линейную систему. Задайте 'CheckCondition' как false так, чтобы mldivide не проверяет условие матрицы коэффициентов. Даже при том, что то же решение возвращено, mldivide не отображает предупреждающее сообщение.

dA = decomposition(A,'CheckCondition',false);
x = dA\b
x = 3×1

   -0.6250
    1.3750
   -0.7500

Используйте isIllConditioned функционируйте, чтобы проверять ли decomposition объект основан на плохо обусловленной матрице.

tf = isIllConditioned(dA)
tf = logical
   1

Расширенные возможности

Введенный в R2017b