在MATLAB中进行切片采样

时间:2016-05-10 16:05:26

标签: matlab

我对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

在上面的示例中,Aresultslice的第一列。

0 个答案:

没有答案