2014-06-06 35 views
0

我使用以下代码进行Pi逼近,使用拒绝采样方法。Matlab拒绝采样点不显示

% 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

有谁知道我能以可视化的蓝点以及可能的吗?提前致谢。

+0

当我运行代码我得到一个红色的方形实心蓝色圆圈。不知道是什么问题。我只是将你的代码拷贝到一个文件中,然后运行它(只是我用'clc;关闭所有;清除所有;'在第一行。 –

+0

奇怪..我得到的结果是我附加到我的问题的图像 – Steffi

+0

@Steffi :图像看起来像那个gnuplot不是MATLAB :) – Amro

回答

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

+0

这很奇怪,因为我也尝试使用较少量的点并且结果相同 - 只有红点被显示...但它按照你的建议工作,谢谢你:-) – Steffi