from Zero Out Smalls by Zhigang Xu
To zero out the small elements whose absolute values are smaller than a given criterion.

A=zero_out_smalls(A, small_cri)
function A=zero_out_smalls(A, small_cri)
%% Zero Out Smalls 
% To zero out the small elements in an input vector or matrix whose absolute values 
% are smaller than a given criterion, specified by small_cri. By default, 
% small_cri=eps. Due to operations on floating point numbers, many quantities 
% should be zero mathematically but are actually not. If these "fuzzy" quantities
% are carried over in further calculations, erroneous results may arise.
% They will also unnecessarily increase the number of non-zero elements in
% sparse matrices and slow down the calculations.
%
% Inputs: 
%   A, the vector or matrix of which the small elements are desired to be zeroed out.
%   small_cri is an optional input as a criterion for being small, its
%   default value is EPS.
% 
% Output: 
%    A, the same vector or matrix as the input but with the small elements zeroed out.     
%

% Zhigang Xu, May 2008, xuz@dfo-mpo.gc.ca, updated on July 5, 2008 for the help message. 

%% Default criterion for smalls
if nargin < 2
    small_cri=eps;
end

%% Validate the inputs
if small_cri < 0
    error('The small_cri should be a non negtive number.')
end

%% Replace the smalls with zeros for a full or a sparse matrix
% When A is non-sparse, to replace the small elements with zero is easy.
% When A is sparse, we have to be cautious for the replacement. It is necessary to avoid 
% indexing on A on the left side of the equation sign, otherwise Matlab will get very slow 
% when the size of A is very large! (cf
% http://blogs.mathworks.com/loren/2007/03/01/creating-sparse-finite-element-matrices-in-matlab/#1. )

if ~issparse(A)
    id=abs(A)<=small_cri;
    A(id)=0;
else
   B=abs(A)>small_cri;
   A=A.*B;
end


Contact us at files@mathworks.com