Факторизация Холесского
возвращает верхнюю треугольную матрицу 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'
. Эти необязательные аргументы могут появиться в любом порядке.
Вычислите Факторизацию Холесского Гильбертовой матрицы 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
. Если матрица не распознана как Hermitian positive definite, то этот синтаксис присваивает пустой символьный объект 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
Матричные расчеты с участием многих символьных переменных могут быть медленными. Чтобы увеличить вычислительную скорость, уменьшите количество символьных переменных, подставив заданные значения для некоторых переменных.
Вызывающие 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
.