exponenta event banner

chol

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

Описание

пример

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'. Эти необязательные аргументы могут отображаться в любом порядке.

Примеры

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

Вычислите факторизацию Холеского матрицы Гильберта 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