Факторизация Холесского
возвращает верхнюю треугольную матрицу T
= chol(A
)T
, таким образом, что T'*T = A
A
должна быть Эрмитова положительная определенная матрица. В противном случае этот синтаксис выдает ошибку.
[
вычисляет факторизацию Холесского T
,p
] =
chol(A
)A
. Этот синтаксис не делает ошибки если A
не Эрмитова положительная определенная матрица. Если A
Эрмитова положительная определенная матрица, затем p
0. В противном случае, T
sym([])
, и p
положительное целое число (обычно, p = 1
).
___ = 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
Матричные расчеты, включающие много символьных переменных, могут быть медленными. Чтобы увеличить вычислительную скорость, сократите количество символьных переменных путем заменения данными значениями некоторые переменные.
Вызов 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
.