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

Примеры

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

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

Используйте допущения, чтобы сделать матрицу Hermitian Positive Definite

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