我正在尝试将Metropolis Hastings算法与随机步行采样器一起使用,以从Matlab中的函数f = sin(7(2x ^ 2 + 3y ^ 2)))^ 2模拟样本,但是我的代码出了点问题。建议密度是椭圆2s ^ 2 + 3t ^ 2≤1/4和alpha =(min(1,f(y1,y2)/ f(x1,x2)))上的均一PDF。我可以使用接受拒绝方法从提案密度中抽样吗?
accept=0;
n=0
while(n < 5000)
accept=false
while(accept==false)
s=1-rand*(2);
t=1-rand*(2);
accept=2*s^2 + 3*t^2 <= 1/4;
end
然后绘制均匀分布的点以检查u u = rand();
c=(u<alpha(X(1,i-1),X(2,i-1),X(1,i-1)+s,X(2,i-1)+t));
X(1,i)=c*s+X(1,i-1);
X(2,i)=c*t+X(2,i-1);
n=n+1;
end
您可能只想使用matlab mhsample
的本地实现。
关于您的代码,缺少一些东西:-功能mhsample
,-循环变量alpha
(它可能只是i
,但由于它从零开始,因此不适合索引)。如果要动态填充内存,也应该始终在matlab中分配内存,即您的情况为n
。
PS:您不应拆分代码