Оцените 1 обновление факторизации Холецкого
R1 = cholupdate(R,x)
R1 = cholupdate(R,x,'+')
R1 = cholupdate(R,x,'-')
[R1,p] = cholupdate(R,x,'-')
R1 = cholupdate(R,x) где R = chol(A) исходная факторизация Холесского A, возвращает верхний треугольный Фактор Холецкого A + x*x', где x вектор-столбец соответствующей длины. cholupdate использование только диагональный и верхний треугольник R. Более низкий треугольник R проигнорирован.
R1 = cholupdate(R,x,'+') совпадает с R1 = cholupdate(R,x).
R1 = cholupdate(R,x,'-') возвращает Фактор Холецкого A - x*x'. Сообщение об ошибке сообщает, когда R не является допустимый Фактор Холецкого или когда downdated матрица не положительна определенный и так не имеет факторизации Холесского.
[R1,p] = cholupdate(R,x,'-') не возвратит сообщение об ошибке. Если p 0R1 Фактор Холецкого A - x*x'. Если p больше 0R1 Фактор Холецкого исходного A. Если p 1, cholupdate отказавший, потому что downdated матрица не положительна определенный. Если p 2, cholupdate отказавший, потому что верхний треугольник R не был допустимый Фактор Холецкого.
A = pascal(4)
A =
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20
R = chol(A)
R =
1 1 1 1
0 1 2 3
0 0 1 3
0 0 0 1
x = [0 0 0 1]';Это называется рангом одним обновлением A начиная с rank(x*x') 1:
A + x*x' ans =
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 21Вместо того, чтобы вычислить Фактор Холецкого с R1 = chol(A + x*x'), мы можем использовать cholupdate:
R1 = cholupdate(R,x) R1 =
1.0000 1.0000 1.0000 1.0000
0 1.0000 2.0000 3.0000
0 0 1.0000 3.0000
0 0 0 1.4142Затем уничтожьте положительную определенность (и на самом деле сделайте матрицу сингулярной) путем вычитания 1 от последнего элемента A. downdated матрица:
A - x*x'
ans =
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 19Сравнение chol с cholupdate:
R1 = chol(A-x*x') Error using chol Matrix must be positive definite. R1 = cholupdate(R,x,'-') Error using cholupdate Downdated matrix must be positive definite.
Однако вычитание 0.5 от последнего элемента A производит положительную определенную матрицу, и мы можем использовать cholupdate вычислить его Фактор Холецкого:
x = [0 0 0 1/sqrt(2)]';
R1 = cholupdate(R,x,'-')
R1 =
1.0000 1.0000 1.0000 1.0000
0 1.0000 2.0000 3.0000
0 0 1.0000 3.0000
0 0 0 0.7071cholupdate работает только на полные матрицы.