Helper utility for checking numeric vector arguments

$0

Description

Runs a number of tests on the numeric array x. Tests to see if x has all integer values, all positive values, and so on, depending on the values for intFlag and signFlag. Also tests to see if the size of x matches size (unless size==[]). If x is a scalar, x is converted to a array simply by creating a matrix of size size with x in each entry. This is why the function returns x. size=M is equivalent to size=[M M]. If x does not satisfy some criteria, an error message is returned in er. If x satisfied all the criteria er=”.

function [ x, er ] = checkNumArgs( x, siz, intFlag, signFlag )


xname = inputname(1); er='';
if( isempty(siz) ); siz = size(x); end;
if( length(siz)==1 ); siz=[siz siz]; end;

% first check that x is numeric
if( ~isnumeric(x) ); er = [xname ' not numeric']; return; end;

% if x is a scalar, simply replicate it.
xorig = x; if( length(x)==1); x = x(ones(siz)); end;

% regardless, must have same number of x as n
if( length(siz)~=ndims(x) || ~all(size(x)==siz) )
 er = ['has size = [' num2str(size(x)) '], '];
 er = [er 'which is not the required size of [' num2str(siz) ']'];
 er = createErrMsg( xname, xorig, er ); return;
end

% check that x are the right type of integers (unless intFlag==-1)
switch intFlag
 case 0
 if( ~all(mod(x,1)==0))
 er = 'must have integer entries';
 er = createErrMsg( xname, xorig, er); return;
 end;
 case 1
 if( ~all(mod(x,2)==1))
 er = 'must have odd integer entries';
 er = createErrMsg( xname, xorig, er); return;
 end;
 case 2
 if( ~all(mod(x,2)==0))
 er = 'must have even integer entries';
 er = createErrMsg( xname, xorig, er ); return;
 end;
end;

% check sign of entries in x (unless signFlag==0)
switch signFlag
 case -2
 if( ~all(x<0))
 er = 'must have strictly negative entries';
 er = createErrMsg( xname, xorig, er ); return;
 end;
 case -1
 if( ~all(x<=0))
 er = 'must have negative entries';
 er = createErrMsg( xname, xorig, er ); return;
 end;
 case 1
 if( ~all(x>=0))
 er = 'must have positive entries';
 er = createErrMsg( xname, xorig, er ); return;
 end;
 case 2
 if( ~all(x>0))
 er = 'must have strictly positive entries';
 er = createErrMsg( xname, xorig, er ); return;
 end
end

function er = createErrMsg( xname, x, er )
if(numel(x)<10)
 er = ['Numeric input argument ' xname '=[' num2str(x) '] ' er '.'];
else
 er = ['Numeric input argument ' xname ' ' er '.'];
end

https://matlab1.com/shop/matlab-code/transform-rotation-matrix-into-rotation-vector-and-viceversa/

Reviews

There are no reviews yet.

Be the first to review “Helper utility for checking numeric vector arguments”
Category: