chol

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

Описание

пример

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

пример

[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 ложь) для неразрешимых условий, набор 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 ложь) для неразрешимых условий, набор 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 ложь) для неразрешимых условий, набор 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