LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
kpcfit_ph_init.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 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
18%
19% EXAMPLE
20% options = kpcfit_ph_options('MinExactMom',2,'MaxExactMom',4,'MaxRuns',1)
21
22% Default options
23options.('MinNumStates') = 2;
24options.('MaxNumStates') = 32;
25options.('MinApproxMom') = 2;
26options.('MaxApproxMom') = length(E);
27options.('MinExactMom') = 2;
28options.('MaxExactMom') = 2;
29
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];
38
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.');
42end
43
44for i=1:2:length(varargin)
45 options.(varargin{i}) = varargin{i+1};
46end
47
48% Sanity checks
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)));
56 end
57end
58
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')));
62end
63
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')));
67end
68
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');
74end
75
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');
81end
82
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');
88end
89
90end