首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >matlab中正方形内的正态分布点

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

Stack Overflow用户
提问于 2016-07-14 18:25:47
回答 2查看 340关注 0票数 0

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

代码语言:javascript
复制
 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之间的正态分布点。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-15 14:06:08

以下内容将需要MATLAB中的统计工具箱。您可以创建一个截断的正态分布,根据定义,该分布只会在范围[0, N]内生成正态分布随机数。

代码语言:javascript
复制
% 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')

这样做的结果如下:

​

​

票数 1
EN

Stack Overflow用户

发布于 2016-07-14 18:34:48

您应该使用rand生成均匀分布的点。

randn用于正态分布点,这就是为什么得到负值的原因。

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

代码语言:javascript
复制
S(i).x = randn*200 + 100;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38381572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档