view m-toolbox/classes/+utils/@math/isequal.m @ 35:4be5f7a5316f
database-connection-manager
Suppress output messages on preferences loading and saving
author
Daniele Nicolodi <nicolodi@science.unitn.it>
date
Mon, 05 Dec 2011 16:20:06 +0100 (2011-12-05)
parents
f0afece42f48
children
line source
+ − % ISEQUAL test if two matrices are equal to within the given tolerance.
+ − %
+ − %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ − %
+ − % DESCRIPTION: ISEQUAL test if two matrices are equal to within the given
+ − % tolerance.
+ − %
+ − % CALL: result = isequal(m1, m2)
+ − % result = isequal(m1, m2, tol)
+ − %
+ − % INPUTS: m1 - a matrix of real or complex values
+ − % m2 - a matrix of real or complex values
+ − % tol - the tolerance to test against [default: 1e-14]
+ − %
+ − % OUTPUTS: result - true or false
+ − %
+ − % VERSION: $Id: isequal.m,v 1.8 2010/11/19 12:40:13 ingo Exp $
+ − %
+ − %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ − function res = isequal(varargin)
+ −
+ − % Check size of the input numbers
+ − if ~all(size(varargin{1}) == size(varargin{2})) || ...
+ − ~(isnumeric(varargin{1}) || islogical(varargin{1})) || ...
+ − ~(isnumeric(varargin{2}) || islogical(varargin{2}))
+ − res = false;
+ − return
+ − end
+ −
+ − m1 = double(varargin{1});
+ − m2 = double(varargin{2});
+ −
+ − r = m1./m2;
+ −
+ − if nargin > 2 && ~isempty(varargin{3})
+ − tol = varargin{3};
+ − else
+ − tol = 1e-14;
+ − end
+ −
+ − maxAbsDiff = abs(max(1-abs(r)));
+ − minAbsDiff = abs(min(1-abs(r)));
+ − maxAngleDiff = max(abs(angle(r)));
+ − minAngleDiff = min(abs(angle(r)));
+ −
+ − maxAbsDiff(isnan(maxAbsDiff))=0;
+ − minAbsDiff(isnan(minAbsDiff))=0;
+ − maxAngleDiff(isnan(maxAngleDiff))=0;
+ − minAngleDiff(isnan(minAngleDiff))=0;
+ −
+ − if all([maxAbsDiff < tol,...
+ − minAbsDiff < tol, ...
+ − maxAngleDiff < tol, ...
+ − minAngleDiff < tol])
+ −
+ − res = true;
+ − else
+ − res = false;
+ − end
+ −
+ − end