diff options
Diffstat (limited to 'FEAST/MIToolbox/MIToolbox.m')
-rw-r--r-- | FEAST/MIToolbox/MIToolbox.m | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/FEAST/MIToolbox/MIToolbox.m b/FEAST/MIToolbox/MIToolbox.m new file mode 100644 index 0000000..880924a --- /dev/null +++ b/FEAST/MIToolbox/MIToolbox.m @@ -0,0 +1,83 @@ +function [varargout] = MIToolbox(functionName, varargin) +%function [varargout] = MIToolbox(functionName, varargin) +% +%Provides access to the functions in MIToolboxMex +% +%Expects column vectors, will not work with row vectors +% +%Function list +%"joint" = joint variable of the matrix +%"entropy" or "h" = H(X) +%"ConditionalEntropy" or "condh" = H(X|Y) +%"mi" = I(X;Y) +%"ConditionalMI" or "cmi" = I(X;Y|Z) +% +%Arguments and returned values +%[jointVariable] = joint(matrix) +%[entropy] = H(X) = H(vector) +%[entropy] = H(X|Y) = H(vector,condition) +%[mi] = I(X;Y) = I(vector,target) +%[mi] = I(X;Y|Z) = I(vector,target,condition) +% +%Internal MIToolbox function number +%Joint = 3 +%Entropy = 4 +%Conditional Entropy = 6 +%Mutual Information = 7 +%Conditional MI = 8 + +if (strcmpi(functionName,'Joint') || strcmpi(functionName,'Merge')) + [varargout{1}] = MIToolboxMex(3,varargin{1}); +elseif (strcmpi(functionName,'Entropy') || strcmpi(functionName,'h')) + %disp('Calculating Entropy'); + if (size(varargin{1},2)>1) + mergedVector = MIToolboxMex(3,varargin{1}); + else + mergedVector = varargin{1}; + end + [varargout{1}] = MIToolboxMex(4,mergedVector); +elseif ((strcmpi(functionName,'ConditionalEntropy')) || strcmpi(functionName,'condh')) + if (size(varargin{1},2)>1) + mergedFirst = MIToolboxMex(3,varargin{1}); + else + mergedFirst = varargin{1}; + end + if (size(varargin{2},2)>1) + mergedSecond = MIToolboxMex(3,varargin{2}); + else + mergedSecond = varargin{2}; + end + [varargout{1}] = MIToolboxMex(6,mergedFirst,mergedSecond); +elseif (strcmpi(functionName,'mi')) + if (size(varargin{1},2)>1) + mergedFirst = MIToolboxMex(3,varargin{1}); + else + mergedFirst = varargin{1}; + end + if (size(varargin{2},2)>1) + mergedSecond = MIToolboxMex(3,varargin{2}); + else + mergedSecond = varargin{2}; + end + [varargout{1}] = MIToolboxMex(7,mergedFirst,mergedSecond); +elseif (strcmpi(functionName,'ConditionalMI') || strcmpi(functionName,'cmi')) + if (size(varargin{1},2)>1) + mergedFirst = MIToolboxMex(3,varargin{1}); + else + mergedFirst = varargin{1}; + end + if (size(varargin{2},2)>1) + mergedSecond = MIToolboxMex(3,varargin{2}); + else + mergedSecond = varargin{2}; + end + if (size(varargin{3},2)>1) + mergedThird = MIToolboxMex(3,varargin{3}); + else + mergedThird = varargin{3}; + end + [varargout{1}] = MIToolboxMex(8,mergedFirst,mergedSecond,mergedThird); +else + varargout{1} = 0; + disp(['Unrecognised functionName ' functionName]); +end |