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

📄 thornton.m

📁 Kalman Filtering Theory and Practice, Using MATLAB
💻 M
字号:
function [x,U,D] = thornton(xin,Phi,Uin,Din,Gin,Q)
%
% function [x,U,D] = thornton(xin,Phi,Uin,Din,Gin,Q)
%
% M. S. Grewal, L. R. Weill and A. P. Andrews
% Global Positioning Systems, Inertial Navigation and Integration
% John Wiley & Sons, 2000.
%
%  Catherine Thornton's modified weighted Gram-Schmidt
%  orthogonalization method for the predictor update of
%  the U-D factors of the covariance matrix
%  of estimation uncertainty in Kalman filtering
%
% INPUTS(with dimensions)
%      xin(n,1) corrected estimate of state vector
%      Phi(n,n) state transition matrix
%      Uin(n,n) unit upper triangular factor (U) of the modified Cholesky
%               factors (U-D factors) of the covariance matrix of
%               corrected state estimation uncertainty (P+) 
%      Din(n,n) diagonal factor (D) of the U-D factors of the covariance
%               matrix of corrected estimation uncertainty (P+)
%      Gin(n,r) process noise distribution matrix (modified, if necessary to
%               make the associated process noise covariance diagonal)
%      Q(r,r)   diagonal covariance matrix of process noise
%               in the stochastic system model
% OUTPUTS:
%      x(n,1)  predicted estimate of state vector
%      U(n,n)  unit upper triangular factor (U) of the modified Cholesky
%              factors (U-D factors) of the covariance matrix of
%              predicted state estimation uncertainty (P-) 
%      D(n,n)  diagonal factor (D) of the U-D factors of the covariance
%              matrix of predicted estimation uncertainty (P-)
%
x     = Phi*xin;   % state update
[n,r] = size(Gin); % get dimensions of state(n) and process noise (r)
G     = Gin;       % move to internal array for destructive updates
U     = eye(n);    % initialize lower triangular part of U
PhiU  = Phi*Uin;   % rows of [PhiU,G] are to be orthononalized
for i=n:-1:1,
   sigma = 0;
   for j=1:n,
      sigma = sigma + PhiU(i,j)^2 *Din(j,j);
      if (j <= r)
         sigma = sigma + G(i,j)^2 *Q(j,j);
      end;
   end;
   D(i,i) = sigma;
   for j=1:i-1,
      sigma = 0;
      for k=1:n
         sigma = sigma + PhiU(i,k)*Din(k,k)*PhiU(j,k);
      end;
      %
      for k=1:r,
         sigma = sigma + G(i,k)*Q(k,k)*G(j,k);
      end;
      U(j,i) = sigma/D(i,i);
      for k=1:n,
         PhiU(j,k) = PhiU(j,k) - U(j,i)*PhiU(i,k);
      end;
      %
      for k=1:r,
         G(j,k) = G(j,k) - U(j,i)*G(i,k);
      end;
   end;
end;

⌨️ 快捷键说明

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