0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 1 % MCMC estimates paramters using a Monte Carlo Markov Chain.
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 3 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 4 % DESCRIPTION: MCMC estimate the parameters of a given model given
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 5 % inputs, outputs and noise using a Metropolis algorithm.
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 6 % It handles (1 input / 1 output) systems, (2 input / 1 output) systems,
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 7 % and (2 input / 2 output) systems.
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 8 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 9 % CALL: b = mcmc(in,out,pl)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 10 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 11 % INPUTS: out - analysis objects with measured outputs
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 12 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 13 % pl - parameter list
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 14 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 15 % OUTPUTS: b - pest object contatining estimate information
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 16 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 17 % <a href="matlab:utils.helper.displayMethodInfo('ao', 'mcmc')">Parameters Description</a>
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 18 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 19 % VERSION: $Id: mcmc.m,v 1.24 2011/11/16 15:21:13 nikos Exp $
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 20 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 21 % References: "Catching supermassive black holes binaries without a net"
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 22 % N.J. Cornish, E.K. Porter, Phys.Rev.D 75, 021301, 2007
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 23 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 24 % TODO: multiple chain option not implemented yet
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 25 % metropolis/hastings not implemented
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 26 %
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 27 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 28
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 29 function varargout = mcmc(varargin)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 30
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 31 % Check if this is a call for parameters
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 32 if utils.helper.isinfocall(varargin{:})
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 33 varargout{1} = getInfo(varargin{3});
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 34 return
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 35 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 36
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 37 import utils.const.*
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 38 utils.helper.msg(msg.PROC3, 'running %s/%s', mfilename('class'), mfilename);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 39
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 40 % Method can not be used as a modifier
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 41 if nargout == 0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 42 error('### mcmc cannot be used as a modifier. Please give an output variable.');
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 43 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 44
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 45 % Collect input variable names
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 46 in_names = cell(size(varargin));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 47 for ii = 1:nargin,in_names{ii} = inputname(ii);end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 48
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 49 % Collect all AOs smodels and plists
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 50 [as, ao_invars] = utils.helper.collect_objects(varargin(:), 'ao', in_names);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 51 pl = utils.helper.collect_objects(varargin(:), 'plist', in_names);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 52
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 53 % Decide on a deep copy or a modify
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 54 out = copy(as, nargout);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 55
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 56 % Combine plists
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 57 pl = parse(pl, getDefaultPlist);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 58
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 59
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 60 % Get parameters from plist
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 61 mtxin = find(pl,'input');
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 62 noi = find(pl,'noise');
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 63 mdlin = find(pl,'model');
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 64
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 65 % Decide on a deep copy or a modify
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 66 in = copy(mtxin, nargout);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 67 mdl = copy(mdlin, nargout);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 68
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 69 numexp = numel(in(1,:));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 70 numchannels_in = numel(in(:,1));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 71 numchannels_out = numel(out(:,1));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 72
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 73 if (numel(in) ~= numel(out))
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 74 error('### Dimensions of input and output must be equal.');
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 75 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 76
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 77 % Redefining the ao inputs as matrix objects
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 78 for ii = 1:numexp
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 79 matin(ii) = matrix(in(:,ii),plist('shape',[numchannels_in 1]));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 80 matout(ii) = matrix(out(:,ii),plist('shape',[numchannels_in 1]));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 81 matnoise(ii) = matrix(noi(:,ii),plist('shape',[numchannels_in 1]));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 82 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 83
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 84 switch class(mdl)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 85 case 'smodel'
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 86 matmodel = matrix(mdl);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 87 case 'ssm'
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 88 matmodel = mdl;
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 89 case 'matrix'
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 90 matmodel = mdl;
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 91 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 92
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 93 pl = pset(pl,'model',matmodel,'input',matin,'noise',matnoise);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 94 mcmc_obj = mcmc(matout,pl);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 95
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 96
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 97 % Set output
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 98 varargout{1} = mcmc_obj;
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 99
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 100 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 101
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 102
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 103
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 104 %--------------------------------------------------------------------------
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 105 % Get Info Object
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 106 %--------------------------------------------------------------------------
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 107 function ii = getInfo(varargin)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 108 if nargin == 1 && strcmpi(varargin{1}, 'None')
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 109 sets = {};
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 110 pl = [];
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 111 else
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 112 sets = {'Default'};
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 113 pl = getDefaultPlist;
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 114 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 115 % Build info object
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 116 ii = minfo(mfilename, 'ao', 'ltpda', utils.const.categories.sigproc, '$Id: mcmc.m,v 1.24 2011/11/16 15:21:13 nikos Exp $', sets, pl);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 117 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 118
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 119 %--------------------------------------------------------------------------
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 120 % Get Default Plist
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 121 %--------------------------------------------------------------------------
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 122 function plout = getDefaultPlist()
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 123 persistent pl;
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 124 if exist('pl', 'var')==0 || isempty(pl)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 125 pl = buildplist();
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 126 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 127 plout = pl;
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 128 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 129
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 130 function pl = buildplist()
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 131 pl = plist();
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 132
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 133 % N
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 134 p = param({'N','number of samples of the chain.'}, paramValue.DOUBLE_VALUE(1000));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 135 pl.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 136
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 137 % Sigma
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 138 p = param({'cov','covariance of the gaussian jumping distribution.'}, paramValue.DOUBLE_VALUE(1e-4));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 139 pl.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 140
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 141 % Param
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 142 p = param({'Fitparams','A cell array of evaluated parameters.'}, paramValue.EMPTY_DOUBLE);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 143 pl.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 144
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 145 % Input
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 146 p = param({'input','A matrix array of input signals.'}, paramValue.EMPTY_STRING);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 147 pl.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 148
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 149 % Frequencies
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 150 p = param({'frequencies','Range of frequencies where the analysis is performed. If an array, only first and last are used'}, paramValue.EMPTY_DOUBLE);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 151 pl.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 152
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 153 % Noise
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 154 p = param({'noise','An array of noise spectrum (PSD) used to compute the likelihood.<ul>', ...
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 155 '<li>1 channel - Input one object</li>', ...
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 156 '<li>2 channel - Input four objects defining the power spectrum matrix </li>',...
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 157 '</ul>'}, paramValue.EMPTY_STRING);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 158 pl.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 159
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 160 % Model
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 161 p = param({'model','An array of models.',...
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 162 '<li>1 input / 1 output - Input one object</li>', ...
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 163 '<li>2 input / 1 output - Input two objects</li>', ...
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 164 '<li>2 channel (2 input/ 2 output) - Input four objects defining the transfer function matrix </li>',...
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 165 '</ul>'}, paramValue.EMPTY_STRING);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 166 pl.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 167
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 168 % Search
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 169 p = param({'search','Set to true to use bigger jumps in parameter space during annealing and cool down.'}, paramValue.TRUE_FALSE);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 170 pl.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 171
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 172 % Simplex
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 173 p = param({'simplex','Set to true to perform a simplex search to find the starting parameters of the MCMC chain.'}, paramValue.TRUE_FALSE);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 174 pl.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 175
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 176 % heat
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 177 p = param({'heat','The heat index flattening likelihood surface during annealing.'}, paramValue.DOUBLE_VALUE(1));
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 178 pl.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 179
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 180 % Tc
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 181 p = param({'Tc','An array of two values setting the initial and final value for the cooling down.'}, paramValue.EMPTY_DOUBLE);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 182 pl.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 183
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 184 % x0
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 185 p = param({'x0','The proposed initial values.'}, paramValue.EMPTY_DOUBLE);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 186 pl.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 187
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 188 % jumps
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 189 p = param({'jumps','An array of four numbers setting the rescaling of the covariance matrix during the search phase.',...
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 190 'The first value is the one applied by default, the following thhree apply just when the chain sample is',...
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 191 'mod(10), mod(25) and mod(100) respectively.'}, paramValue.EMPTY_DOUBLE);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 192 pl.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 193
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 194 % plot
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 195 p = param({'plot','Select indexes of the parameters to be plotted.'}, paramValue.EMPTY_DOUBLE);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 196 pl.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 197
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 198 % debug
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 199 p = param({'debug','Set to true to get debug information of the MCMC process.'}, paramValue.FALSE_TRUE);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 200 pl.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 201
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 202 p = param({'prior','Mean, sigma and normalization factor for priors. Still under test'}, paramValue.EMPTY_STRING);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 203 pl.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 204
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 205 p = param({'anneal',['Choose type of annealing during sampling. Default value is ',...
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 206 'simulated annealing. Choose "thermo" for annealing with a thermostat.',...
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 207 ' SNR is computed and if it is larger than a fixed value SNR0 (provided also in the plist), ',...
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 208 'then the chains are heated by a factor of (SNR(1)/SNR0)^2. Choosing "simple" ',...
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 209 'the deviation of the loglikelihood of every 10 points in the chains is stored. If this deviation ',...
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 210 'is larger or smaller than two fixed values the chains are cooled or heated respectively.']}, {1, {'simul','thermo', 'simple'}, paramValue.SINGLE});
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 211 pl.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 212
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 213 p = param({'SNR0','Fixed value for thermostated annealing.'}, {1, {200}, paramValue.OPTIONAL});
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 214 pl.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 215
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 216 p = param({'DeltaL',['Deviation of Loglikelihood for 10 points of the chains. Used for',...
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 217 'the "simple" choice of annealing with a thermostat.']}, {1, {[100 600 2 3]}, paramValue.OPTIONAL});
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 218 pl.append(p);
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 219
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 220 end
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 221
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 222
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 223 % PARAMETERS: J - number of chains to compute.
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 224 % sigma - dispersion of the jumping distribution.
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 225 % range - range where the parameteters are sampled.
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 226 % param - a cell array of evaluated parameters (from the
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 227 % smodel).
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 228 % Tc - an array with two values (default: 0, i.e. no annealing).
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 229 % heat - heat index flattening likelihood surface (default: 1)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 230 % x0 - proposed initial values, if empty selected randomly.
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 231 % (default: empty)
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 232
Daniele Nicolodi <nicolodi@science.unitn.it>
parents:
diff
changeset
+ − 233