chol

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

Синтаксис

R = chol(A)
R = chol(A,triangle)
[R,flag] = chol(___)
[R,flag,P] = chol(S)
[R,flag,P] = chol(___,outputForm)

Описание

пример

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)')

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

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

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

Вычислите Фактор Холесского для матрицы и задайте опцию '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.1194e-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