⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ldlup.m

📁 kalman filter update equations implemented in this code
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ldlup.m %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [L,d,p]=ldlup(L,d,j,g)% updates LDL^T factorization when a unit j-th row and column% are replaced by column g % if the new matrix is definite (signalled by p=[]);% otherwise, the original L,d and % a direction p of null or negative curvature are returned%% d contains diag(D) and is assumed positive% Note that g must have zeros in other unit rows!!!%function [L,d,p]=ldlup(L,d,j,g);p=[];test=0;if test,   disp('enter ldlup')  A=L*diag(d)*L';A(:,j)=g;A(j,:)=g'; end;n=size(d,1);I=1:j-1;K=j+1:n;if j==1,  v=zeros(0,1);  del=g(j);  if del<=n*eps,     p=[1;zeros(n-1,1)];     if test,       A,p      Nenner=abs(p)'*abs(A)*abs(p);      if Nenner==0, indef1=0 ,else indef1=(p'*A*p)/Nenner, end;      disp('leave ldlup at 1')    end;    return;   end;  w=g(K)/del;  L(j,I)=v';  d(j)=del;  if test,     A1=L*diag(d)*L',A     quot=norm(A1-A,1)/norm(A,1),     disp('leave ldlup at 3')  end;  return;  end;% now j>1, K nonemptyLII=L(I,I);u=LII\g(I);v=u./d(I);del=g(j)-u'*v;if del<=n*eps,  p=[LII'\v;-1;zeros(n-j,1)];  if test,     A,p    indef1=(p'*A*p)/(abs(p)'*abs(A)*abs(p))    disp('leave ldlup at 2')  end;  return;end;LKI=L(K,I);w=(g(K)-LKI*u)/del;[LKK,d(K),q]=ldlrk1(L(K,K),d(K),-del,w);if isempty(q),  % work around expensive sparse L(K,K)=LKK  L=[L(I,:);     v', 1,L(j,K);     LKI,w,LKK];  d(j)=del;  if test,     A1=L*diag(d)*L',A     quot=norm(A1-A,1)/norm(A,1),     disp('leave ldlup at 4')  end;else  % work around expensive sparse L(K,K)=LKK  L=[L(1:j,:);     LKI,L(K,j),LKK];  pi=w'*q;  p=[LII'\(pi*v-LKI'*q);-pi;q];  if test,     indef2=(p'*A*p)/(abs(p)'*abs(A)*abs(p)),     disp('leave ldlup at 5')  end;end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -