我有一个1000个随机数的向量偏向540和600的边界。我需要将这些数据绘制为分别在半径540和600的两个同心圆之间的扭曲圆形路径。我该怎么做呢? 目前,我能够绘制给定半径的同心圆,但是如果我试图绘制在边界540和600之间的给定随机数据,则沿着两个同心圆之间的宽度绘制。我希望它被绘制成同心圆之间的嘈杂圆形曲线。 我希望我能够解释我的观点 如果有人能告诉我,我该怎么做。感谢
这是我上一篇文章的链接,其中我必须生成偏向两个定义良好的边界的随机数 Generating random numbers in matlab biased towards the boundaries 现在我需要绘制相同的数据,如上所述。
这是我得到的图像:
答案 0 :(得分:0)
你真正想要的是一个圆形的情节,所以我想到的第一个想法是使用极坐标。
首先,我们将大约1000个随机数据的样本偏向that之后[540 600]间隔的范围。
请注意,此算法并不总能获得1000个值,因为删除了超出范围的值。
所以我们会这样做:
%Get the size of the sample
P=length(X);
% Generate P Angles uniformly distributed between 0 and 2*pi*(P-1)/P
% Note generating an angle equal to 0 and an angle equal to 2*pi would
% mean that we have 2 points with the same angle, and that s something
% you generally want to avoid
Angles=(0:P-1)*(2*pi/P);
% Plot your points with the markers (polar coordinates) in '-+',
% - means that you want a line to be drawn between the points and
% + means that you want a + marker on every point
plot(X.*cos(Angles),X.*sin(Angles),'-+');
%tell matlab to wait so you can add the circles
hold on
% add circle of 540 radius
plot(540*cos(Angles),540*sin(Angles),'-r');
%add circle of 600 radius
plot(600*cos(Angles),600*sin(Angles),'-r');
最终结果:
更新:关于让角度随机分布
我们必须不同地定义我们的角度。我们仍然需要一个长度为P的向量,但随机分布。这可以通过取0和1之间的P个随机数,然后将该矢量乘以2 * pi来实现,以获得0到2 * pi之间的随机分布值。 最后一步是订购此向量以保持数据的排序。
Temp=rand(1,P)*2*pi;
Angles=sort(Temp);
最终结果:
另一个领导者需要取1000个高斯随机数的样本并使用它们模2 * pi:
Angles=sort(mod(randn(1,P)*2*pi,2*pi));