📄 ldltdown.m
字号:
%% [newL,newD]=ldltdown(L,D,v)%% This function downdates the Cholesky factorization of A to the Cholesky % factorization of A-vv'. i.e. If%% A=L*D*L'%% then%% A-v*v'=newL*newD*newL'%% It is assumed that A is symmetric and postive definite. If A-v*v'% would not be positive definite, then the diagonal elements will % be adjusted to make sure that D is > 0. %% Reference: Gill, Murray, and Wright, "Practical Optimization", p43.% Author: Brian Borchers (borchers@nmt.edu)%function [newL,newD]=ldltdown(L,D,v)%% First, find the size of the matrix. %n=size(D,1);%% Initialize newL and newD.%newL=L;newD=D;%% Find the initial values of p and t. %p=L\v;oldt=1-p'*inv(D)*p;%% Make sure that D is > 0.%if (oldt <= eps) oldt=eps;end%% The main loop. See Gill, Murray, and Wright for details. %for j=n:-1:1 t=oldt+p(j)^2/D(j,j); newD(j,j)=D(j,j)*oldt/t; beta=-p(j)/(D(j,j)*oldt); v(j)=p(j); if (j < n) newL(j+1:n,j)=L(j+1:n,j)+beta*v(j+1:n); v(j+1:n)=v(j+1:n)+p(j)*L(j+1:n,j); end oldt=t;end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -