LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
kpcfit_ph_options.m
1function options = kpcfit_ph_options(E,varargin)
2% options = kpcfit_ph_options(E)
3%
4% DESCRIPTION
5% Specify options for kpcfit_ph(E,...)
6%
7% INPUT
8% E - vector of moments, E(k) = E[X^k]
9%
10% OPTIONS
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
15%
16% EXAMPLE
17% options = kpcfit_ph_options(E) % default options
18% options = kpcfit_ph_options(E,'MinExactMom',2,'MaxNumStates',4,'Runs',1)
19
20% Default options
21options.('Verbose') = true;
22options.('Runs') = 5;
23options.('MinNumStates') = 2;
24options.('MaxNumStates') = 32;
25options.('MinExactMom') = 3;
26
27ranges.('Verbose') = [false,true];
28ranges.('Runs') = [1,Inf];
29ranges.('MinNumStates') = [2,Inf];
30ranges.('MaxNumStates') = [2,Inf];
31ranges.('MinExactMom') = [1,length(E)];
32
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.');
36end
37
38for i=1:2:length(varargin)
39 options.(varargin{i}) = varargin{i+1};
40end
41
42% Sanity checks
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)));
50 end
51end
52
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')));
56end
57
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')));
61end
62
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));
65end
66
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');
72end
73
74end