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 returns only multiples of 2 **,
default: 2
12%
'MaxNumStates' - integer, maximum number of states - ** KPC returns only multiples of 2 **,
default: 32
13%
'MinExactMom' - integer, minimum number of moments to be fitted exactly (best-effort),
default: 2
14%
'Runs' - integer, maximum number of runs,
default: 5
17% options = kpcfit_ph_options(E) %
default options
18% options = kpcfit_ph_options(E,
'MinExactMom',2,
'MaxNumStates',4,
'Runs',1)
21options.(
'Verbose') =
true;
23options.(
'MinNumStates') = 2;
24options.(
'MaxNumStates') = 32;
25options.(
'MinExactMom') = 3;
27ranges.(
'Verbose') = [
false,
true];
28ranges.(
'Runs') = [1,Inf];
29ranges.(
'MinNumStates') = [2,Inf];
30ranges.(
'MaxNumStates') = [2,Inf];
31ranges.(
'MinExactMom') = [1,length(E)];
33% Parse optional parameters
34if mod(length(varargin),2) > 0 %
if odd number
35 error(
'MATLAB:kpcfit_ph_options:odd_number_of_parameters',
'Odd number of input parameters, please specify a value after each option.');
38for i=1:2:length(varargin)
39 options.(varargin{i}) = varargin{i+1};
43for i=1:2:length(varargin)
44 if options.(varargin{i}) < ranges.(varargin{i})(1)
45 options.(varargin{i}) = ranges.(varargin{i})(1);
46 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)));
47 elseif options.(varargin{i}) > ranges.(varargin{i})(2)
48 options.(varargin{i}) = ranges.(varargin{i})(2);
49 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)));
53if mod(options.(
'MinNumStates'),2^round(log2(options.(
'MinNumStates')))) > 0 %
is multiple of 2?
54 options.(
'MinNumStates') = 2^ceil(log2(ceil(options.(
'MinNumStates'))));
55 warning(
'MATLAB:kpcfit_ph_options:not_power_of_two',sprintf(
'MinNumStates not a multiple of 2, fixed to %d.', options.(
'MinNumStates')));
58if mod(options.(
'MaxNumStates'),2^round(log2(options.(
'MaxNumStates')))) > 0 %
is multiple of 2?
59 options.(
'MaxNumStates') = 2^ceil(log2(ceil(options.(
'MaxNumStates'))));
60 warning(
'MATLAB:kpcfit_ph_options:not_power_of_two',sprintf(
'MaxNumStates not a multiple of 2, fixed to %d.', options.(
'MaxNumStates')));
63if 2*options.(
'MaxNumStates')-1 > length(E)
64 error(
'MATLAB:kpcfit_ph_options:insufficient_moments',sprintf(
'MaxNumStates of %d requires to supply at least %d moments.', options.(
'MaxNumStates'),2*options.(
'MaxNumStates')-1));
67if options.(
'MinNumStates') > options.(
'MaxNumStates')
68 warning('MATLAB:kpcfit_ph_options:max_lt_min','MaxNumStates < MinNumStates, fixed.');
69 tmp = options.('MinNumStates');
70 options.('MaxNumStates') = tmp;
71 options.('MinNumStates') = options.('MaxNumStates');