1function options = kpcfit_ph_options(E,varargin)
2% options = kpcfit_ph_options(E)
5% Specify options
for kpcfit_ph(E,...)
8% E - vector of moments, E(k) = E[X^k]
11%
'MinNumStates' - integer, minimum number of states - ** KPC accepts only multiples of 2 **,
default: 2
12%
'MaxNumStates' - integer, maximum number of states - ** KPC accepts only multiples of 2 **,
default: 32
13%
'MinExactMom' - integer, minimum number of moments to be fitted exactly (best-effort),
default: 2
14%
'MaxExactMom' - integer, maximum number of moments to be fitted exactly (best-effort),
default: 2
15%
'MinApproxMom' - integer, minimum number of moments to be fitted approximately (best-effort),
default: 2
16%
'MaxApproxMom' - integer, maximum number of moments to be fitted approximately (best-effort),
default: 2
17%
'MaxRuns' - integer, maximum number of runs,
default: 5
20% options = kpcfit_ph_options(
'MinExactMom',2,
'MaxExactMom',4,
'MaxRuns',1)
23options.(
'MinNumStates') = 2;
24options.(
'MaxNumStates') = 32;
25options.(
'MinApproxMom') = 2;
26options.(
'MaxApproxMom') = length(E);
27options.(
'MinExactMom') = 2;
28options.(
'MaxExactMom') = 2;
30ranges.(
'MaxRuns') = [1,Inf];
31ranges.(
'MinNumStates') = [2,Inf];
32ranges.(
'MaxNumStates') = [Inf,Inf];
33ranges.(
'MinApproxMom') = [1,length(E)];
34ranges.(
'MaxApproxMom') = [1,length(E)];
35ranges.(
'MinExactMom') = [1,length(E)];
36ranges.(
'MaxExactMom') = [1,length(E)];
37ranges.(
'MaxRuns') = [1,Inf];
39% Parse optional parameters
40if mod(length(varargin),2) > 0 %
if odd number
41 error(
'MATLAB:kpcfit_ph_options:odd_number_of_parameters',
'Odd number of input parameters, please specify a value after each option.');
44for i=1:2:length(varargin)
45 options.(varargin{i}) = varargin{i+1};
49for i=1:2:length(varargin)
50 if options.(varargin{i}) < ranges.(varargin{i})(1)
51 options.(varargin{i}) = ranges.(varargin{i})(1);
52 warning(
'MATLAB:kpcfit_ph_options:out_of_range_parameter',sprintf(
'The minimum value for option %s is %d, now fixed.', varargin{i}, ranges.(varargin{i})(1)));
53 elseif options.(varargin{i}) > ranges.(varargin{i})(2)
54 options.(varargin{i}) = ranges.(varargin{i})(2);
55 warning(
'MATLAB:kpcfit_ph_options:out_of_range_parameter',sprintf(
'The maximum value for option %s is %d, now fixed.', varargin{i}, ranges.(varargin{i})(2)));
59if mod(options.(
'MinNumStates'),2^round(log2(options.(
'MinNumStates')))) > 0 %
is multiple of 2?
60 options.(
'MinNumStates') = 2^ceil(log2(ceil(options.(
'MinNumStates'))));
61 warning(
'MATLAB:kpcfit_ph_options:not_power_of_two',sprintf(
'MinNumStates not a multiple of 2, fixed to %d.', options.(
'MinNumStates')));
64if mod(options.(
'MaxNumStates'),2^round(log2(options.(
'MaxNumStates')))) > 0 %
is multiple of 2?
65 options.(
'MaxNumStates') = 2^ceil(log2(ceil(options.(
'MaxNumStates'))));
66 warning(
'MATLAB:kpcfit_ph_options:not_power_of_two',sprintf(
'MaxNumStates not a multiple of 2, fixed to %d.', options.(
'MaxNumStates')));
69if options.(
'MaxNumStates') > options.(
'MinNumStates')
70 warning('MATLAB:kpcfit_ph_options:max_lt_min','MaxNumStates < MinNumStates, fixed swapping values.');
71 tmp = options.('MinNumStates');
72 options.('MaxNumStates') = tmp;
73 options.('MinNumStates') = options.('MaxNumStates');
76if options.('MinApproxMom') > options.('MaxApproxMom')
77 warning('MATLAB:kpcfit_ph_options:max_lt_min','MaxApproxMom < MinApproxMom, fixed swapping values.');
78 tmp = options.('MinApproxMom');
79 options.('MaxApproxMom') = tmp;
80 options.('MinApproxMom') = options.('MaxApproxMom');
83if options.('MinExactMom') > options.('MaxExactMom')
84 warning('MATLAB:kpcfit_ph_options:max_lt_min','MaxExactMom < MinExactMom, fixed swapping values.');
85 tmp = options.('MinExactMom');
86 options.('MaxExactMom') = tmp;
87 options.('MinExactMom') = options.('MaxExactMom');