matlab中正方形内的正态分布点

Normally distributed points within a square in matlab

如何在 N x N 正方形内创建 N 个正态分布的点,均值位于中心(更多点集中在中心)。我希望有一种方法可以将每个点的坐标存储在一个结构中。我试过下面的代码

 for i=1:200
 S(i).x=randn*200;
 S(i).y=randn*200;
 plot(S(i).x,S(i).y,'.');
 axis([0 200 0 200]); 
 end

但是,我发现我得到了负值。在正方形中使用 (100,100) 的中心 [均值],我想为 200x200 正方形存储 0-200 之间的正态分布点。谢谢

你应该使用rand来生成均匀个分布点。
randn 用于 正常 分布点,这就是为什么你得到负值

要使正态分布的点集中在 100 左右,您需要将平均值添加到结果中:

S(i).x = randn*200 + 100;

以下需要 MATLAB 中的统计工具箱。您可以创建一个截断的正态分布,根据定义,它只会生成 [0, N].

范围内的正态分布随机数
% Create a normal distribution
N = 200;
pd = makedist('Normal', 'mu', N/2, 'sigma', 60)

% Truncate the normal distribution to [0,N]
t = truncate(pd, 0, N)

% Samples from normal distribution
x = pd.random(N,1);
y = pd.random(N,1);
subplot(211)
plot(x,y,'bx')
title('Normal Distribution')

% Samples from truncated distribution
x = t.random(N,1);
y = t.random(N,1);
subplot(212)
plot(x,y,'ro')
title('Truncated Normal Distribution')

这将导致如下结果: