
高手进,c语言中如何得到服从正态分布的随机数?
生成大量的随机数,使之在一定的范围内(比如1~100),并且向某个值周围集中(比如30),最好能够自己设定集中程度高低不明白的话,自己找正态分布图看看,我想要左右不对称也...
生成大量的随机数,使之在一定的范围内(比如1~100),并且向某个值周围集中(比如30),最好能够自己设定集中程度高低
不明白的话,自己找正态分布图看看,我想要左右不对称也可以的。
第二个答案的程序是在什么编译环境里运行的?好使的话再给加分 展开
不明白的话,自己找正态分布图看看,我想要左右不对称也可以的。
第二个答案的程序是在什么编译环境里运行的?好使的话再给加分 展开
4个回答
展开全部
用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);
}
// μ = 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 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
展开全部
最好寻求专门算法
如果不行的话,也可以用大量随机数来模拟,譬如生成1000次0或1,然后求其平均数,可以得到很接近正态分布的.
如果有连续的随机函数,也可以直接求正态分部的积分函数,根据积分函数的反函数来确定位置
如果不行的话,也可以用大量随机数来模拟,譬如生成1000次0或1,然后求其平均数,可以得到很接近正态分布的.
如果有连续的随机函数,也可以直接求正态分部的积分函数,根据积分函数的反函数来确定位置
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用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);
}
//
μ
=
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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
正态分布没有啥技术难度,就是高斯??都毕业了好久了我都忘了。可以设定它的不同的参数就可以调节它的分布情况。
如果有需要的话,把高斯的那个正态分布的那个公式给我说一下。我帮你编
如果有需要的话,把高斯的那个正态分布的那个公式给我说一下。我帮你编
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询