exponenta event banner

cholupdate

Обновление ранга 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 не является допустимым фактором Холески или когда пониженная матрица не является положительной определенной и поэтому не имеет факторизации Холеского.

[R1,p] = cholupdate(R,x,'-') не возвращает сообщение об ошибке. Если p является 0, R1 является фактором Холеского A - x*x'. Если p больше, чем 0, R1 - фактор Холеского оригинала A. Если p является 1, cholupdate не удалось, так как пониженная матрица не является положительной определенной. Если 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. Пониженная матрица:

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.7071

Совет

cholupdate работает только для полных матриц.

Расширенные возможности

.

См. также

|

Представлен до R2006a