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 isvector и flag = 0, затем S(p,p) = R'*R. Значение по умолчанию outputForm ismatrix таким образом, что 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 objects. Axes object 1 with title Nonzeros in chol(S) contains an object of type line. Axes object 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 object. The axes object 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