exponenta event banner

разложение

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

Описание

decomposition создает многоразовые матричные разложения (LU, LDL, Cholesky, 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', 'lu', 'ldl', 'chol', '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' (по умолчанию)

Н/Д

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

'qr'

AP = QR

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

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

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

'cod'

A = QRZ *

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

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

Для матриц с квадратными коэффициентами можно также использовать эти опции.

Стоимость

Матричная декомпозиция A

Примечания

'lu'

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

PA = ЛОГИЧЕСКАЯ ЕДИНИЦА

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

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

P (R\A) Q = LU

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

 

'ldl'

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

P * AP = LDL *

L - нижняя треугольная матрица с 1s на диагонали, 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 banded, и 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 (false). Если CheckCondition является true и матрица коэффициентов является плохо обусловленной или низкого ранга, затем решение линейных систем с использованием mldivide (\) или mrdivide (/) выдает предупреждения.

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

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

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 (/) при решении системы уравнений. Если плотность полосы матрицы коэффициентов больше указанной плотности полосы, то используется решатель с полосами.

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

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

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

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

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

Свойства

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

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

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

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

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

Тип разложения, возвращенный как 'qr', 'cod', 'lu', 'ldl', 'chol', 'triangular', 'permutedTriangular', 'banded', 'hessenberg', или 'diagonal'.

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

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

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

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

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

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

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

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

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

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

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

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

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

Индикатор того, что матрица коэффициентов разрежена, возвращается как логическая 1 (true) или логическое 0 (false).

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

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

Множительный масштабный коэффициент для матрицы коэффициентов, возвращаемый как скаляр. Значение по умолчанию 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 13.154918 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.910174 seconds.
lambda = x2'*A*x2
lambda = -0.6707

Производительность алгоритма значительно повышается, поскольку матрица A не нуждается в факторизации во время каждой итерации. Кроме того, даже если алгоритм обратной косой черты может быть улучшен путем выполнения разложения LU A до for-loop, 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, используя вектор 1s для правой стороны.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