从 f ( x ) = 0.3 N ( 1 , 1 ) + 0.7 N ( 5 , 1 ) f(x)=0.3N(1,1)+0.7N(5,1) f(x)=0.3N(1,1)+0.7N(5,1)中采样
%MH-MCMC
N=10000;
x=zeros(N,1);%初始点
p=@(x) 0.3*normpdf(x,1)+0.7*normpdf(x,5);%目标函数
q=@(x,mu) normpdf(x,mu,1);%转移核
for ii=2:N
xtemp=x(ii-1)+normrnd(0,1);%random walk生成候选点
pxs=p(xtemp);
px=p(x(ii-1));
qxs=q(xtemp,x(ii-1));%也可以取1
qx=q(x(ii-1),xtemp);%也可以取1
acc=pxs*qx/(px*qxs);
if acc>rand
x(ii)=xtemp;
else
x(ii)=x(ii-1);
end
end
mesh=linspace(-2,8,10000);
plot(mesh,p(mesh));
hold on
histogram(x,64,'Normalization','pdf')
hold off