ldltdown.m

来自「这是在网上下的一个东东」· M 代码 · 共 59 行

M
59
字号
%% [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 + =
减小字号Ctrl + -
显示快捷键?