matlab中的大都会黑斯廷斯
我试图使用Metropolis Hastings算法和随机行走采样器来模拟matlab中函数$$的样本,但我的代码有问题。建议密度为椭圆2s^2+3t^2上的统一PDF≤ 1/4. 我可以使用接受-拒绝方法从提案密度中取样吗matlab中的大都会黑斯廷斯,matlab,random,mcmc,random-walk,Matlab,Random,Mcmc,Random Walk,我试图使用Metropolis Hastings算法和随机行走采样器来模拟matlab中函数$$的样本,但我的代码有问题。建议密度为椭圆2s^2+3t^2上的统一PDF≤ 1/4. 我可以使用接受-拒绝方法从提案密度中取样吗 N=5000; alpha = @(x1,x2,y1,y2) (min(1,f(y1,y2)/f(x1,x2))); X = zeros(2,N); accept = false; n = 0; while n < 5000 accept = false;
N=5000;
alpha = @(x1,x2,y1,y2) (min(1,f(y1,y2)/f(x1,x2)));
X = zeros(2,N);
accept = false;
n = 0;
while n < 5000
accept = false;
while ~accept
s = 1-rand*(2);
t = 1-rand*(2);
val = 2*s^2 + 3*t^2;
% check acceptance
accept = val <= 1/4;
end
% and then draw uniformly distributed points checking that u< alpha?
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
figure;
plot(X(1,:), X(2,:), 'r+');
N=5000;
α=@(x1,x2,y1,y2)(最小值(1,f(y1,y2)/f(x1,x2));
X=零(2,N);
接受=错误;
n=0;
而n<5000
接受=错误;
当~接受
s=1兰特*(2);
t=1-rand*(2);
val=2*s^2+3*t^2;
%承兑汇票
accept=val您可能只想使用matlab的本机实现
关于您的代码,缺少一些东西:
-函数alpha
,
-循环变量i
(它可能只是n
,但不适合索引,因为它从零开始)。
如果您想动态填充matlab中的内存,也就是说,您应该始终在matlab中分配内存。要扩展@max的建议,如果您将i
索引更改为n
并替换
n=0代码>
与
n=2;
X(:,1)=[1,1]代码>
最好将X(:,1)
分配给接受区域内的随机值(使用稍后使用的相同代码),和/或包括一个磨合期
取决于您将如何处理它,在f
函数中对sin
的参数求值,使其保持在0到2π的范围内(如果超过这些界限,可能会将值移动2π)我更新了代码,但现在看不出有什么问题。我需要一个for循环吗?