未显示Matlab拒绝采样点

时间:2014-06-06 06:51:13

标签: matlab plot

我使用以下代码进行Pi近似,使用拒绝采样方法。

% DISPLAY A CIRCLE INSCRIBED IN A SQUARE

figure;
a = 0:.01:2*pi;
x = cos(a); y = sin(a);
hold on
plot(x,y,'k','Linewidth',2)

t = text(0.5, 0.05,'r');
l = line([0 1],[0 0],'Linewidth',2);
axis equal
box on
xlim([-1 1])
ylim([-1 1])
title('Unit Circle Inscribed in a Square')

pause;
rand('seed',12345)
randn('seed',12345)
delete(l); delete(t);

% DRAW SAMPLES FROM PROPOSAL DISTRIBUTION
samples = 2*rand(2,100000) - 1;

% REJECTION
reject = sum(samples.^2) > 1;

% DISPLAY REJECTION CRITERION
scatter(samples(1,~reject),samples(2,~reject),'b.')
scatter(samples(1,reject),samples(2,reject),'rx')
hold off
xlim([-1 1])
ylim([-1 1])

预期结果应该是红色方块内的蓝色圆圈。当我运行代码时,会显示构建正方形的红点,但蓝点不会。 预期结果应如此Link

所示

但我得到以下结果: Pi approximation

是否有人知道我可以做些什么来形象化蓝点?提前谢谢。

1 个答案:

答案 0 :(得分:2)

对于如此多的积分,scatter函数可能是not the best choice。试试这个:

t = 0:.01:2*pi;
x = cos(t); y = sin(t);

samples = 2*rand(2,100000) - 1;
reject = sum(samples.^2) > 1;

props = {'LineStyle','none', 'Marker','.', 'MarkerSize',1};
line(x, y, 'Color','k', 'LineWidth',2)
line(samples(1,~reject), samples(2,~reject), props{:}, 'Color','b')
line(samples(1,reject), samples(2,reject), props{:}, 'Color','r')
axis equal; axis([-1 1 -1 1])
box on

pi_approximation