高手进,c语言中如何得到服从正态分布的随机数?

生成大量的随机数,使之在一定的范围内(比如1~100),并且向某个值周围集中(比如30),最好能够自己设定集中程度高低不明白的话,自己找正态分布图看看,我想要左右不对称也... 生成大量的随机数,使之在一定的范围内(比如1~100),并且向某个值周围集中(比如30),最好能够自己设定集中程度高低

不明白的话,自己找正态分布图看看,我想要左右不对称也可以的。
第二个答案的程序是在什么编译环境里运行的?好使的话再给加分
展开
 我来答
百度网友60d7eecf4
推荐于2016-06-06 · TA获得超过198个赞
知道答主
回答量:170
采纳率:0%
帮助的人:0
展开全部
用boost的random库方便生成,以下是2个测试,分别生成50个数:

// μ = 30, δ^2 = 4

30.84 30.00 26.61 27.49 31.27
29.74 27.99 29.81 29.73 33.29
32.17 31.37 26.83 28.20 27.99
28.69 34.66 25.44 29.22 24.84
29.39 32.02 32.35 28.28 34.16
27.04 32.02 33.40 31.39 29.08
31.91 29.19 29.14 32.25 27.20
32.16 29.06 27.67 29.26 29.51
28.36 28.65 26.87 27.74 26.56
30.16 31.18 30.57 30.57 33.43

// μ = 30, δ^2 = 100

84.66 61.85 24.17 68.63 2.15
1.30 40.92 72.74 74.83 4.25
39.86 27.06 60.94 50.58 79.35
51.83 86.03 74.75 92.33 70.59
93.43 55.51 57.22 70.48 70.52
1.45 22.55 40.85 33.23 65.39
35.54 89.69 45.87 88.35 40.73
67.31 17.64 23.98 98.43 35.93
97.88 48.95 59.54 13.14 45.79
5.55 8.77 70.31 14.83 82.54

#include <iostream>
#include <boost/random.hpp>
using namespace std;

typedef boost::minstd_rand GenType;
typedef boost::normal_distribution<> NormalDis;
typedef boost::variate_generator<GenType&, NormalDis> RNG;

void Show(RNG& rng)
{
cout.setf(ios_base::fixed);
cout.precision(2);
for(int i = 0; i < 50;)
{
double temp = rng();
if(temp >= 1 && temp <= 100)
{
cout << temp << ' ';
if(++i % 5 == 0)
cout << '\n';
}
else
continue;
}
cout << endl;
}

int main()
{
GenType gt;
NormalDis dis(30, 2); // μ = 30, δ^2 = 4
RNG rng(gt, dis);
Show(rng);

rng.distribution() = NormalDis(30, 100); // μ = 30, δ^2 = 10000
Show(rng);
}
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
多肉芒芒杨枝甘露
2007-04-25 · TA获得超过353个赞
知道小有建树答主
回答量:386
采纳率:0%
帮助的人:262万
展开全部
最好寻求专门算法
如果不行的话,也可以用大量随机数来模拟,譬如生成1000次0或1,然后求其平均数,可以得到很接近正态分布的.
如果有连续的随机函数,也可以直接求正态分部的积分函数,根据积分函数的反函数来确定位置
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
创作者xpvBACzVez
2020-03-24 · TA获得超过3630个赞
知道大有可为答主
回答量:3035
采纳率:24%
帮助的人:166万
展开全部
用boost的random库方便生成,以下是2个测试,分别生成50个数:
//
μ
=
30,
δ^2
=
4
30.84
30.00
26.61
27.49
31.27
29.74
27.99
29.81
29.73
33.29
32.17
31.37
26.83
28.20
27.99
28.69
34.66
25.44
29.22
24.84
29.39
32.02
32.35
28.28
34.16
27.04
32.02
33.40
31.39
29.08
31.91
29.19
29.14
32.25
27.20
32.16
29.06
27.67
29.26
29.51
28.36
28.65
26.87
27.74
26.56
30.16
31.18
30.57
30.57
33.43
//
μ
=
30,
δ^2
=
100
84.66
61.85
24.17
68.63
2.15
1.30
40.92
72.74
74.83
4.25
39.86
27.06
60.94
50.58
79.35
51.83
86.03
74.75
92.33
70.59
93.43
55.51
57.22
70.48
70.52
1.45
22.55
40.85
33.23
65.39
35.54
89.69
45.87
88.35
40.73
67.31
17.64
23.98
98.43
35.93
97.88
48.95
59.54
13.14
45.79
5.55
8.77
70.31
14.83
82.54
#include
<iostream>
#include
<boost/random.hpp>
using
namespace
std;
typedef
boost::minstd_rand
GenType;
typedef
boost::normal_distribution<>
NormalDis;
typedef
boost::variate_generator<GenType&,
NormalDis>
RNG;
void
Show(RNG&
rng)
{
cout.setf(ios_base::fixed);
cout.precision(2);
for(int
i
=
0;
i
<
50;)
{
double
temp
=
rng();
if(temp
>=
1
&&
temp
<=
100)
{
cout
<<
temp
<<
'
';
if(++i
%
5
==
0)
cout
<<
'\n';
}
else
continue;
}
cout
<<
endl;
}
int
main()
{
GenType
gt;
NormalDis
dis(30,
2);
//
μ
=
30,
δ^2
=
4
RNG
rng(gt,
dis);
Show(rng);
rng.distribution()
=
NormalDis(30,
100);
//
μ
=
30,
δ^2
=
10000
Show(rng);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
iamj_b
2007-05-04 · 超过27用户采纳过TA的回答
知道答主
回答量:109
采纳率:0%
帮助的人:96.2万
展开全部
正态分布没有啥技术难度,就是高斯??都毕业了好久了我都忘了。可以设定它的不同的参数就可以调节它的分布情况。
如果有需要的话,把高斯的那个正态分布的那个公式给我说一下。我帮你编
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式