aboutsummaryrefslogtreecommitdiff
path: root/FEAST/MIToolbox/RenyiMIToolbox.m
blob: cd235e9d34c99d1e67320e086e069b4e8aaeebd7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
function [varargout] = RenyiMIToolbox(functionName, alpha, varargin)
%function [varargout] = RenyiMIToolbox(functionName, alpha, varargin)
%
%Provides access to the functions in RenyiMIToolboxMex
%
%Expects column vectors, will not work with row vectors
%
%Function list
%"Entropy" = H_{\alpha}(X) = 1
%"MI" = I_{\alpha}(X;Y) = 3
%
%Arguments and returned values
%[entropy] = H_\alpha(X) = H(alpha,vector)
%[mi] = I_\alpha(X;Y) = I(alpha,vector,target)
%
%Internal RenyiMIToolbox function number
%Renyi Entropy = 1;
%Renyi MI = 3;

if (alpha ~= 1)
  if (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}] = RenyiMIToolboxMex(1,alpha,mergedVector);
  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}] = RenyiMIToolboxMex(3,alpha,mergedFirst,mergedSecond);
  else
      varargout{1} = 0;
      disp(['Unrecognised functionName ' functionName]);
  end
else
  disp('For alpha = 1 use functions in MIToolbox.m');
  disp('as those functions are the implementation of Shannon''s Information Theory');
end