chol

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

Синтаксис

T = chol(A)
[T,p] = chol(A)
[T,p,S] = chol(A)
[T,p,s] = chol(A,'vector')
___ = chol(A,'lower')
___ = chol(A,'nocheck')
___ = chol(A,'real')
___ = chol(A,'lower','nocheck','real')
[T,p,s] = chol(A,'lower','vector','nocheck','real')

Описание

пример

T = chol(A) возвращает верхнюю треугольную матрицу T, такой что T'*T = A. A должен быть Эрмитовой положительной определенной матрицей. В противном случае этот синтаксис выдает ошибку.

пример

[T,p] = chol(A) вычисляет факторизацию Холесского A. Этот синтаксис не делает ошибки, если A не является Эрмитовой положительной определенной матрицей. Если A является Эрмитовой положительной определенной матрицей, то p 0. В противном случае T является sym([]), и p является положительным целым числом (обычно,   p = 1).

пример

[T,p,S] = chol(A) возвращает матрицу перестановок S, такой, что T'*T = S'*A*S и значение p = 0, если матричный A Эрмитов положительный определенный. В противном случае это возвращает положительный целочисленный p и пустой объект S = sym([]).

пример

[T,p,s] = chol(A,'vector') возвращает информацию о перестановке как векторный s, такой что A(s,s) = T'*T. Если A не распознан Эрмитовой положительной определенной матрицей, то p является положительным целым числом и s = sym([]).

пример

___ = chol(A,'lower') возвращает нижний треугольный матричный T, такой что T*T' = A.

пример

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

пример

___ = chol(A,'real') вычисляет факторизацию Холесского A с помощью арифметики действительных чисел. В этом случае chol вычисляет симметричную факторизацию A = T.'*T вместо Эрмитовой факторизации A = T'*T. Этот подход основан на том, что, если A действителен и симметричен, то T'*T = T.'*T. Используйте 'real', чтобы избежать сопряженных комплексных чисел в результате.

___ = chol(A,'lower','nocheck','real') вычисляет факторизацию Холесского A с одним или несколькими из этих дополнительных аргументов: 'lower', 'nocheck' и 'real'. Эти дополнительные аргументы могут появиться в любом порядке.

[T,p,s] = chol(A,'lower','vector','nocheck','real') вычисляет факторизацию Холесского A и возвращает информацию о перестановке как векторный s. Можно использовать один или несколько из этих дополнительных аргументов: 'lower', 'nocheck' и 'real'. Эти дополнительные аргументы могут появиться в любом порядке.

Примеры

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

Вычислите факторизацию Холесского 3х3 Гильбертовой матрицы. Поскольку эти числа не являются символьными объектами, вы получаете результаты с плавающей точкой.

chol(hilb(3))
ans =
    1.0000    0.5000    0.3333
         0    0.2887    0.2887
         0         0    0.0745

Теперь преобразуйте эту матрицу в символьный объект и вычислите факторизацию Холесского:

chol(sym(hilb(3)))
ans =
[ 1,       1/2,        1/3]
[ 0, 3^(1/2)/6,  3^(1/2)/6]
[ 0,         0, 5^(1/2)/30]

Возвратите нижнюю треугольную матрицу

Вычислите факторизацию Холесского 3х3 матрицы Паскаля возврат нижней треугольной матрицы в результате:

chol(sym(pascal(3)), 'lower')
ans =
[ 1, 0, 0]
[ 1, 1, 0]
[ 1, 2, 1]

Если Вход не Эрмитов Положительный Определенный

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

A = sym([1 1 1; 1 2 3; 1 3 5]);
T = chol(A)
Error using sym/chol (line 132)
Cannot prove that input matrix is Hermitian positive definite.
Define a Hermitian positive definite matrix by setting
appropriate assumptions on matrix components, or use 'nocheck'
to skip checking whether the matrix is Hermitian positive definite.

Чтобы подавить ошибку, используйте два выходных аргумента, T и p. Если матрица не распознана Эрмитовой положительный определенный, то этот синтаксис присваивает пустой символьный объект T и значению 1 к p:

[T,p] = chol(A)
T =
[ empty sym ]
p =
     1

Для Эрмитовой положительной определенной матрицы p 0:

[T,p] = chol(sym(pascal(3)))
T =
[ 1, 1, 1]
[ 0, 1, 2]
[ 0, 0, 1]
p =
     0

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

syms a
A = [a 0; 0 a];
chol(A,'nocheck')
ans =
[ a^(1/2),       0]
[       0, a^(1/2)]

Если вы используете 'nocheck' для вычисления факторизации Холесского матрицы, которая не является Эрмитова положительный определенный, chol может возвратить матричный T, для которого идентичность T'*T = A не содержит. Чтобы заставить isAlways возвратить логический 0 (false) для неразрешимых условий, установите Unknown на false.

T = chol(sym([1 1; 2 1]), 'nocheck')
T =
[ 1,         2]
[ 0, 3^(1/2)*1i]
isAlways(A == T'*T,'Unknown','false')
ans =
  2×2 logical array
     0     0
     0     0

Возвратите матрицу перестановок

Вычислите факторизацию Холесского 3х3 обратной Гильбертовой матрицы, возвращающей матрицу перестановок:

A = sym(invhilb(3));
[T, p, S] = chol(A)
T =
[ 3,       -12,         10]
[ 0, 4*3^(1/2), -5*3^(1/2)]
[ 0,         0,    5^(1/2)]

p =
     0

S =
     1     0     0
     0     1     0
     0     0     1

Возвратите информацию о перестановке как вектор

Вычислите факторизацию Холесского 3х3 обратной Гильбертовой матрицы, возвращающей информацию о перестановке как вектор:

A = sym(invhilb(3));
[T, p, S] = chol(A, 'vector')
T =
[ 3,       -12,         10]
[ 0, 4*3^(1/2), -5*3^(1/2)]
[ 0,         0,    5^(1/2)]
p =
     0
S =
     1     2     3

Используйте предположения, чтобы сделать матрицу эрмитовой положительный определенный

Вычислите факторизацию Холесского матричного A, содержащего символьные параметры. Без дополнительных предположений на параметре a эта матрица не является Эрмитовой. Чтобы заставить isAlways возвратить логический 0 (false) для неразрешимых условий, установите Unknown на false.

syms a
A = [a 0; 0 a];
isAlways(A == A','Unknown','false')
ans =
  2×2 logical array
     0     1
     1     0

Путем установки предположений на a и b, можно задать A, чтобы быть Эрмитовы положительный определенный. Поэтому можно вычислить факторизацию Холесского A:

assume(a > 0)
chol(A)
ans =
[ a^(1/2),       0]
[       0, a^(1/2)]

Для дальнейших вычислений удалите предположения на a путем воссоздания его с помощью syms:

syms a

Возвратите действительный результат без сопряженных комплексных чисел

Вычислите факторизацию Холесского этой матрицы. Чтобы пропустить проверку, является ли это Эрмитовым положительный определенный, используйте 'nocheck'. По умолчанию chol вычисляет Эрмитовую факторизацию A = T'*T. Таким образом результат содержит сопряженные комплексные числа.

syms a b
A = [a b; b a];
T = chol(A, 'nocheck')
T =
[ a^(1/2),                    conj(b)/conj(a^(1/2))]
[       0, (a*abs(a) - abs(b)^2)^(1/2)/abs(a)^(1/2)]

Чтобы избежать сопряженных комплексных чисел в результате, используйте 'real':

T = chol(A, 'nocheck', 'real')
T =
[ a^(1/2),             b/a^(1/2)]
[       0, ((a^2 - b^2)/a)^(1/2)]

Когда вы используете этот флаг, chol вычисляет симметричную факторизацию A = T.'*T вместо Эрмитовой факторизации A = T'*T. Чтобы заставить isAlways возвратить логический 0 (false) для неразрешимых условий, установите Unknown на false.

isAlways(A == T.'*T)
ans =
  2×2 logical array
     1     1
     1     1
isAlways(A == T'*T,'Unknown','false')
ans =
  2×2 logical array
     0     0
     0     0

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

свернуть все

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

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

свернуть все

Матрица Верхней треугольной, возвращенная как символьная матрица, таким образом, что T'*T = A. Если T является нижней треугольной матрицей, то T*T' = A.

Отметьте, возвращенный как символьное число. 0 значения, если A Эрмитов положительный определенный или если вы используете 'nocheck'.

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

Матрица перестановок, возвращенная как символьная матрица.

Вектор перестановки, возвращенный как символьный вектор.

Ограничения

Матричные вычисления, включающие много символьных переменных, могут быть медленными. Чтобы увеличить вычислительную скорость, сократите количество символьных переменных путем заменения данными значениями некоторые переменные.

Больше о

свернуть все

Эрмитова положительная определенная матрица

Квадратный комплексный матричный A Эрмитов положительный определенный, если v'*A*v действителен и положителен для всех ненулевых комплексных векторов v, где v' является сопряженным транспонированием (Эрмитов, транспонируют) v.

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

Факторизация Холесского Эрмитового положительного определенного n-by-n матричный A задана верхней или нижней треугольной матрицей с положительными записями на основной диагонали. Факторизация Холесского матричного A может быть задана как T'*T = A, где T является верхней треугольной матрицей. Здесь T' является сопряженным транспонированием T. Факторизация Холесского также может быть задана как T*T' = A, где T является нижней треугольной матрицей. T называется Фактором Холесского A.

Советы

  • Вызов chol для числовых аргументов, которые не являются символьными объектами, вызывает функцию MATLAB® chol.

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

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

  • Чтобы использовать 'vector', необходимо задать три выходных аргумента. Другие флаги не требуют конкретного количества выходных аргументов.

  • Если вы используете 'matrix' вместо 'vector', то chol возвращает матрицы перестановки, как это делает по умолчанию.

  • Если вы используете 'upper' вместо 'lower', то chol возвращает верхнюю треугольную матрицу, как это делает по умолчанию.

  • Если A не является Эрмитовой положительной определенной матрицей, то синтаксисы, содержащие аргумент p обычно, возвращают p = 1 и пустой символьный объект T.

  • Чтобы проверять, является ли матрица Эрмитовой, используйте оператор ' (или его функциональная форма ctranspose). Матричный A является Эрмитовым, если и только если A'= A, где A' является сопряженным транспонированием A.

Смотрите также

| | | | | | | |

Введенный в R2013a