www.gusucode.com > mbcmodels 工具箱 matlab 源码程序 > mbcmodels/xregprecond.m

    function [Xs,S,Si]= xregprecond(X);
% XREGPRECOND preconditioner for least squares problems
% 
% [Xs,S]= xregprecond(X);

%  Copyright 2000-2004 The MathWorks, Inc. and Ford Global Technologies, Inc.



% use column norms
sp= sqrt(sum(X.*X,1))';
% protect against dividing by very small numbers
sp = max(sp,sqrt(eps));
n= length(sp);
if max(sp)/min(sp)>1e4
	% use sparse diagonal matrix because this is far quicker
	% note spdiags doesn't like row vectors
	S= spdiags(1./sp,0,n,n);
	Si= spdiags(sp,0,n,n);
	Xs= X*S;
else
	% don't precondition for well-conditioned problems
	Xs= X;
	S= speye(n,n);
	Si=S;
end