~ubuntu-branches/ubuntu/trusty/psychtoolbox-3/trusty-proposed

« back to all changes in this revision

Viewing changes to Psychtoolbox/Psychometric/ComputeNakaRushton.m

  • Committer: Package Import Robot
  • Author(s): Yaroslav Halchenko
  • Date: 2013-11-19 23:34:50 UTC
  • mfrom: (3.1.4 experimental)
  • Revision ID: package-import@ubuntu.com-20131119233450-f7nf92vb8qavjmk8
Tags: 3.0.11.20131017.dfsg1-3
Upload to unsable since fresh glew has arrived to sid!

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
function [response] = ComputeNakaRushton(params,contrast)
 
 
b'% [response] =  ComputeNakaRushton(params,contrast)'
 
 
b'%'
 
 
b'% Compute the Naka-Rushton function on passed vector of contrasts.'
 
 
b'% Several different forms may be computed depending on length of'
 
 
b'% passed params vector.'
 
 
b'%'
 
 
b'% length(params) == 2'
 
 
b'%   sigma = params(1)'
 
 
b'%   n = params(2)'
 
 
b'%   response = contrast^n/[contrast^n + sigma^n]'
 
 
b'%'
 
 
b'% length(params) == 3'
 
 
b'%   Rmax = params(1)'
 
 
b'%   sigma = params(2)'
 
 
b'%   n = params(3)'
 
 
b'%   response = Rmax*[contrast^n]/[contrast^n + sigma^n]'
 
 
b'%'
 
 
b'% length(params) == 4'
 
 
b'%   Rmax = params(1)'
 
 
b'%   sigma = params(2)'
 
 
b'%   n = params(3)'
 
 
b'%   m = params(4)'
 
 
b'%   response = Rmax*[contrast^n]/[contrast^m + sigma^m]'
 
 
b'% '
 
 
b'% 8/1/05    dhb, pr     Wrote from FitLightnessOrient version'
 
 
b'% 8/2/07    dhb         Rewrote to allow several different forms depending'
 
 
b'%                       on length of params.'
 
 
b'% 12/5/10   dhb         Expanded comment.  Error check on input length'
 
 
b'% Extract parameter vector into meaningful variables'
 
 
b'if (length(params) == 2)'
2
1
   A = 1;
3
2
   sigma = params(1);
4
3
   exponent = params(2);
5
4
   exponent1 = params(2);    
 
 
b'elseif (length(params) == 3)'
6
5
   A = params(1);
7
6
   sigma = params(2);
8
7
   exponent = params(3);
9
8
   exponent1 = params(3);
 
 
b'elseif (length(params) == 4)'
10
9
   A = params(1);
11
10
   sigma = params(2);
12
11
   exponent = params(3);
13
12
   exponent1 = params(4);
 
 
b'else'
14
13
   error('Inproper format for passed parameter vector');
 
 
b'end'
 
 
b'% Check for bad contrast input'
 
 
b'if (any(contrast < 0))'
15
14
   error('Cannot deal with negative contrast');
 
 
b'end'
 
 
b'% Handle really weird parameter values'
 
 
b'if (sigma < 0 | exponent < 0 | exponent1 < 0)'
16
15
   response = -1*ones(size(contrast));
 
 
b'else'
17
16
   % Now pump the linear response through a non-linearity
18
17
   expContrast = (contrast./sigma).^exponent;
19
18
   expContrast1 = contrast.^exponent1;
20
19
   sigma1 = sigma.^exponent1;
21
20
   response = A*(expContrast ./ (expContrast1 + sigma1));
 
 
b'end'
 
 
b'\\ No newline at end of file'
 
21
function [response] = ComputeNakaRushton(params,contrast)
 
22
% [response] =  ComputeNakaRushton(params,contrast)
 
23
%
 
24
% Compute the Naka-Rushton function on passed vector of contrasts.
 
25
% Several different forms may be computed depending on length of
 
26
% passed params vector.
 
27
%
 
28
% length(params) == 2
 
29
%   sigma = params(1)
 
30
%   n = params(2)
 
31
%   response = contrast^n/[contrast^n + sigma^n]
 
32
%
 
33
% length(params) == 3
 
34
%   Rmax = params(1)
 
35
%   sigma = params(2)
 
36
%   n = params(3)
 
37
%   response = Rmax*[contrast^n]/[contrast^n + sigma^n]
 
38
%
 
39
% length(params) == 4
 
40
%   Rmax = params(1)
 
41
%   sigma = params(2)
 
42
%   n = params(3)
 
43
%   m = params(4)
 
44
%   response = Rmax*[contrast^n]/[contrast^m + sigma^m]
 
45
 
46
% 8/1/05    dhb, pr     Wrote from FitLightnessOrient version
 
47
% 8/2/07    dhb         Rewrote to allow several different forms depending
 
48
%                       on length of params.
 
49
% 12/5/10   dhb         Expanded comment.  Error check on input length
 
50
% 9/23/13   dhb         Fix BAD bug.  This wasn't computing what the comments said it was.
 
51
%                       Not sure when that crept in.  The contrast in the numerator was
 
52
%                       being divided by sigma before being raised to the power n.  No idea why.
 
53
 
 
54
% Extract parameter vector into meaningful variables
 
55
if (length(params) == 2)
 
56
    A = 1;
 
57
    sigma = params(1);
 
58
    exponent = params(2);
 
59
    exponent1 = params(2);    
 
60
elseif (length(params) == 3)
 
61
    A = params(1);
 
62
    sigma = params(2);
 
63
    exponent = params(3);
 
64
    exponent1 = params(3);
 
65
elseif (length(params) == 4)
 
66
    A = params(1);
 
67
    sigma = params(2);
 
68
    exponent = params(3);
 
69
    exponent1 = params(4);
 
70
else
 
71
    error('Inproper format for passed parameter vector');
 
72
end
 
73
 
 
74
% Check for bad contrast input
 
75
if (any(contrast < 0))
 
76
    error('Cannot deal with negative contrast');
 
77
end
 
78
 
 
79
% Handle really weird parameter values
 
80
if (sigma < 0 || exponent < 0 || exponent1 < 0)
 
81
    response = -1*ones(size(contrast));
 
82
else
 
83
 
 
84
    % Now pump the linear response through a non-linearity
 
85
    expContrast = (contrast).^exponent;
 
86
    expContrast1 = contrast.^exponent1;
 
87
    sigma1 = sigma.^exponent1;
 
88
    response = A*(expContrast ./ (expContrast1 + sigma1));
 
89
end
 
90