📄 triag.m
字号:
function S = triag(A)
% TRIAG
% -----
% S=triag(A) uses a Householder transformation of the rectangular
% matrix A to produce a square and upper triangular matrix S with
% the property S*S' = A*A'.
% Literature:
% The algorithm is described in Grewal & Andrews: "Kalman Filtering -
% Theory and Practice" Prentice-Hall, 1993, pp. 234. However, there
% are certain cases in which their implementation fails. These have been
% handled as described in G.W. Stewart: "Matrix Algorithms,
% Vol. 1: Basic Decompositions", SIAM 1988.
%
% Written by: Magnus Norgaard, IMM/IAU, Technical University of Denmark
% LastEditDate: Apr. 15, 2000
[n,rn]=size(A); % Rows and columns of A
r = rn-n;
v = zeros(n,1);
u = zeros(1,rn);
S = zeros(n,n);
for k=n:-1:1,
u(1:r+k) = A(k,1:r+k);
ny = norm(u(1:r+k));
if ny==0,
u(r+k) = sqrt(2);
else
u(1:r+k) = u(1:r+k)/ny;
if u(r+k)>=0,
u(r+k) = u(r+k) + 1;
ny = -ny;
else
u(r+k) = u(r+k) - 1;
end
u(1:r+k) = u(1:r+k)/sqrt(abs(u(r+k)));
end
v(1:k-1,1) = A(1:k-1,1:r+k)*u(1,1:r+k)';
A(1:k-1,1:r+k) = A(1:k-1,1:r+k) - v(1:k-1,1)*u(1,1:r+k);
S(1:k-1,k) = A(1:k-1,r+k);
S(k,k)=ny;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -