chol

Факторизация Холесского

Описание

пример

R = chol(A) факторизация симметричной положительно определенной матрицы A в верхнюю треугольную R который удовлетворяет A = R'*R. Если A является несимметричным, тогда chol рассматривает матрицу как симметричную и использует только диагональный и верхний треугольник A.

пример

R = chol(A,triangle) определяет, какой треугольный множитель из A для использования при вычислении факторизации. Для примера, если triangle является 'lower', затем chol использует только диагональный и нижний треугольный фрагмент A для создания нижней треугольной матрицы R который удовлетворяет A = R*R'. Значение по умолчанию triangle является 'upper'.

пример

[R,flag] = chol(___) также возвращает выход flag указывает, A ли симметрично положительно определено. Можно использовать любой из комбинаций входных аргументов в предыдущих синтаксисах. Когда вы задаете flag выход, chol не генерирует ошибку, если входная матрица не симметрично положительно определена.

  • Если flag = 0 тогда матрица входа симметрично положительно определена, и факторизация прошла успешно.

  • Если flag не равен нулю, тогда вход матрица не симметрично положительно определена и flag - целое число, указывающее индекс положения поворота, в котором не удалось выполнить факторизацию.

пример

[R,flag,P] = chol(S) дополнительно возвращает матрицу сочетаний P, которое является предварительным упорядоченным расположением разреженной матрицы S получен amd. Если flag = 0, затем S симметрично положительно определено и R является верхней треугольной матрицей, удовлетворяющей R'*R = P'*S*P.

пример

[R,flag,P] = chol(___,outputForm) определяет, возвращать ли информацию о сочетании P в качестве матрицы или вектора, используя любую из комбинаций входных аргументов в предыдущих синтаксисах. Эта опция доступна только для разреженных матричных входов. Для примера, если outputForm является 'vector' и flag = 0, затем S(p,p) = R'*R. Значение по умолчанию outputForm является 'matrix' таким образом R'*R = P'*S*P.

Примеры

свернуть все

Использование chol факторизация матрицы симметричных коэффициентов, а затем решение линейной системы с помощью фактора Холецкого.

Создайте симметричную матрицу с положительными значениями на диагонали.

A = [1 0 1; 0 2 0; 1 0 3]
A = 3×3

     1     0     1
     0     2     0
     1     0     3

Вычислим Фактор Холецкого матрицы.

R = chol(A)
R = 3×3

    1.0000         0    1.0000
         0    1.4142         0
         0         0    1.4142

Создайте вектор для правой стороны уравнения Ax=b.

b = sum(A,2);

С тех пор A=RTR при разложении Холецкого линейное уравнение становится RTRx=b. Решение для x использование оператора обратной косой черты.

x = R\(R'\b)
x = 3×1

    1.0000
    1.0000
    1.0000

Вычислите верхние и более низкие факторизации Холесского матрицы и проверьте результаты.

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

A = gallery('lehmer',6);

Вычислите фактор Холецкого, используя верхний треугольник A.

R = chol(A)
R = 6×6

    1.0000    0.5000    0.3333    0.2500    0.2000    0.1667
         0    0.8660    0.5774    0.4330    0.3464    0.2887
         0         0    0.7454    0.5590    0.4472    0.3727
         0         0         0    0.6614    0.5292    0.4410
         0         0         0         0    0.6000    0.5000
         0         0         0         0         0    0.5528

Проверьте, что верхний треугольный множитель удовлетворяет R'*R - A = 0, в пределах ошибки округления.

norm(R'*R - A)
ans = 2.5801e-16

Теперь задайте 'lower' опция вычисления фактора Холецкого с помощью нижнего треугольника A.

L = chol(A,'lower')
L = 6×6

    1.0000         0         0         0         0         0
    0.5000    0.8660         0         0         0         0
    0.3333    0.5774    0.7454         0         0         0
    0.2500    0.4330    0.5590    0.6614         0         0
    0.2000    0.3464    0.4472    0.5292    0.6000         0
    0.1667    0.2887    0.3727    0.4410    0.5000    0.5528

Проверьте, что нижний треугольный множитель удовлетворяет L*L' - A = 0, в пределах ошибки округления.

norm(L*L' - A)
ans = 2.5801e-16

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

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

A = pascal(5);
A(end) = A(end) - 1
A = 5×5

     1     1     1     1     1
     1     2     3     4     5
     1     3     6    10    15
     1     4    10    20    35
     1     5    15    35    69

Вычислим Фактор Холецкого для A. Задайте два выхода, чтобы избежать генерации ошибки, если A не симметрично положительно определено.

[R,flag] = chol(A)
R = 4×4

     1     1     1     1
     0     1     2     3
     0     0     1     3
     0     0     0     1

flag = 5

Начиная с flag является ненулевым, он задает индекс поворота, где факторизация прекращает работать. chol умеет вычислять q = flag-1 = 4 строки и столбцы правильно перед сбоем, когда они сталкиваются с измененной частью матрицы.

Проверьте, что R'*R возвращает четыре строки и столбца, которые согласуются с A(1:q,1:q).

q = flag-1;
R'*R
ans = 4×4

     1     1     1     1
     1     2     3     4
     1     3     6    10
     1     4    10    20

A(1:q,1:q)
ans = 4×4

     1     1     1     1
     1     2     3     4
     1     3     6    10
     1     4    10    20

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

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

load west0479
A = west0479;
S = A'*A;

Вычислим Фактор Холецкого матрицы двумя различными способами. Сначала задайте два выхода, а затем три выхода, чтобы разрешить изменение порядка строк и столбцов.

[R,flag] = chol(S);
[RP,flagP,P] = chol(S);

Для каждого расчета проверяйте, что flag = 0 для подтверждения успешности вычисления.

if ~flag && ~flagP
    disp('Factorizations successful.')
else
    disp('Factorizations failed.')
end
Factorizations successful.

Сравните количество ненулевых в chol(S) по сравнению с переупорядоченной матрицей chol(P'*S*P). Лучшая практика - использовать синтаксис трёх выходов chol с разреженными матрицами, поскольку переупорядочивание строк и столбцов может значительно уменьшить количество ненулей в факторе Холецкого.

subplot(1,2,1)
spy(R)
title('Nonzeros in chol(S)')
subplot(1,2,2)
spy(RP)
title('Nonzeros in chol(P''*S*P)')

Figure contains 2 axes. Axes 1 with title Nonzeros in chol(S) contains an object of type line. Axes 2 with title Nonzeros in chol(P'*S*P) contains an object of type line.

Используйте 'vector' опция chol чтобы вернуть информацию о сочетании как вектор, а не как матрицу.

Создайте разреженную матрицу конечных элементов.

S = gallery('wathen',10,10);
spy(S)

Figure contains an axes. The axes contains an object of type line.

Вычислите фактор Холецкого для матрицы и задайте 'vector' опция для возврата вектора сочетания p.

[R,flag,p] = chol(S,'vector');

Проверьте, что flag = 0, что указывает на успешность вычисления.

if ~flag
    disp('Factorization successful.')
else
    disp('Factorization failed.')
end
Factorization successful.

Проверьте, что S(p,p) = R'*R, в пределах ошибки округления.

norm(S(p,p) - R'*R,'fro')
ans = 2.1039e-13

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

свернуть все

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

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

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

Разреженная входная матрица. S должен быть квадратным и симметричным положительно определенным.

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

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

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

Использование 'lower' опция эквивалентна вызову chol с 'upper' опция и транспонирование матрицы входа, а затем транспонирование выхода R.

Пример: R = chol(A,'lower')

Форма сочетания выхода, заданная как 'matrix' или 'vector'. Этот флаг контролирует, выводится ли сочетание P возвращается как матрица сочетания или вектор сочетания.

  • Если flag = 0, затем S симметрично положительно определено и P'*S*P = R'*R (если P является матрицей) или S(p,p) = R'*R (если p является вектором).

  • Если flag не равен нулю, тогда S не симметрично положительно определено. R - верхняя треугольная матрица размера q-by- n, где q = flag-1. L-образная область первого q строки и первые q столбцы R'*R согласен с таковыми у P'*S*P (если P является матрицей) или S(p,p) (если p является вектором).

  • Если на 'lower' задается опция, затем R является нижней треугольной матрицей, и можно заменить R'*R с R*R' в предыдущих тождествах.

Фактор Холецкого P'*S*P (если P является матрицей) или S(p,p) (если p является вектором) имеет тенденцию быть рассеяннее фактора Холецкого S.

Пример: [R,flag,p] = chol(S,'vector')

Выходные аргументы

свернуть все

Фактор Холецкого, возвращенный как матрица.

  • Если R является верхним треугольным, тогда A = R'*R. Если вы задаете P выход для разреженных матриц, затем P'*S*P = R'*R или S(p,p) = R'*R, в зависимости от значения outputForm.

  • Если R является нижним треугольным, тогда A = R*R'. Если вы задаете P выход для разреженных матриц, затем P'*S*P = R*R' или S(p,p) = R*R', в зависимости от значения outputForm..

  • Каждый раз flag не равен нулю, R содержит только частичные результаты. flag указывает положение поворота, в котором не удалось выполнить факторизацию, и R содержит частично завершенную факторизацию.

Симметричный положительно определенный флаг, возвращенный как скаляр.

  • Если flag = 0, тогда матрица входа симметрично положительно определена. R является верхней треугольной матрицей, такой что R'*R = A.

  • Если A не симметрично положительно определено, тогда flag является положительным целым числом, указывающим положение поворота, в котором факторизация не удалась, и MATLAB® не генерирует ошибку. R - верхняя треугольная матрица размера q = flag-1 таким образом R'*R = A(1:q,1:q).

  • Если A является разреженным, тогда R - верхняя треугольная матрица размера q-by- n таким образом, чтобы L-образная область первого q строки и первые q столбцы R'*R согласен с таковыми у A или S.

  • Если на 'lower' задается опция, затем R является нижней треугольной матрицей, и можно заменить R'*R с R*R' в предыдущих тождествах.

Сочетание для разреженных матриц, возвращенная в виде матрицы или вектора в зависимости от значения outputForm. См. outputForm для описания тождеств, которые удовлетворяет этот выход.

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

Подробнее о

свернуть все

Симметричная положительная определенная матрица

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

Для любой действительной инвертируемой матрицы Aможно создать симметричную положительно определенную матрицу с продуктом B = A'*A. Эта Факторизация Холесского обращает эту формулу вспять, говоря, что любая симметричная положительно определенная матрица B могут быть учтены в продукте R'*R.

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

Линия между положительно определенными и положительно полуопределенными матрицами размыта в контексте числовых расчетов. Редкость, когда собственные значения точно равны нулю, но они могут быть численно равны нулю (по порядку точности машины). По этой причине, chol может быть в состоянии факторизировать одну положительную полуопределенную матрицу, но может потерпеть неудачу с другой матрицей, которая имеет очень похожие собственные значения.

Совет

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

..

См. также

| | |

Представлено до R2006a