我对MATLAB (slicesample
)中的算法切片采样有疑问。
考虑一个随机变量g(X)
,其中包含非标准化的pdf f:=1(g(X)=g)
,其中g
是一个实数。
假设我为g(X)
的任何给定值@dens_slice
在辅助函数x
中计算X
。
让starting
成为x
的值X
,使g(X)=g
。
然后我设置
slicesample(starting,num,'pdf',@dens_slice);
num=2000
表示输入nsamples
。
假设我将算法所做的g(X)
的所有评估保存在列向量A
中。一段时间后算法停止,A
由超过2000
值组成。
2000
是否与A
中等于g
的值相对应?
示例:
%%%%%%MAIN%%%%%%%
clear all
%Set slice sampling
rng('default');
rng(1);
global U
U = randn(2, 1);
S_init = U(1)*3 + U(2)*2;
global starting
starting = [S_init 3 2];
global iteration
iteration = 0;
global resultslice
resultslice = [starting(1), iteration, starting(2:end)]; % For each row: obj.func, iteration, parameter values
save('resultslice.mat', 'resultslice')
num = 100;
param = slicesample(starting(2:end), num, 'pdf', @dens_slice);
exit
%%%%DENS_SLICE%%%%%
function ind = dens_slice(param)
global starting
global resultslice
global iteration
global U
S = criterion_slice(param);
ind = 1.*(S==starting(1));
iteration = iteration + 1; % Update iteration
resultslice = [resultslice;[S iteration param]]; %update result
save('resultslice.mat', 'resultslice')
end
%%%%CRITERION_SLICE%%%%%
function S = criterion_slice(param)
global U
beta1 = param(1);
beta2 = param(2);
S = beta1*U(1) + beta2*U(2);
end
在上面的示例中,A
是resultslice
的第一列。