exponenta event banner

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 с разложением Холеского, линейное уравнение становится RTR x = 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около-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около-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