vfp 产生正态分布随机数_如何用excel批量生成正态分布的随机数?

本文介绍了如何使用Excel的norminv函数生成符合正态分布的随机数,以模拟真实生活中的数据分布。通过设置中间值和标准偏差,可以调整随机数的分布特性,例如生成六西格玛质量水平的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天的文章提到《如何不留痕迹做批量 "假"数据?》提到用rand函数批量生成随机数,这是最简单最快速的方法,但同时也有一个缺陷,就是rand函数生成的是均匀分布的随机数,在区间范围内会分布得比较均匀,不符合日常生活中数据的按照正态分布的特点,这样也就留下了明显的痕迹。

比如我用rand函数生成0-100的100个随机数,用Minitab自动生成直方图,频数是下面这样的:

88ff8feaaa81651297c7e73b70aee943.png

大家可以看到,大致上每个区间分布的数据都比较均匀。再次解释,rand函数是产生均匀分布随机实数,也就是每个数都是等概率出现的。

而日常生活中的数据,大致符合正态分布,即两端少,中间多的曲线,像一只倒扣的大钟。

ad05dd4434007c77e6b0cf289af6a7f0.png

英文叫normal distribution,也就是「正常」状态下的分布,大陆取一个「正」字,翻译为「正态分布」,台湾取一个「常」字,翻译为「常态分布」,我觉得还是台湾翻译得好,「常态分布」一看就知道是什么意思,而「正态分布」故弄玄虚,英文中文里不存在正态这个词,我也是后来看到英文normal distribution才知道原来这么简单。

比如一个学校的学生成绩,正常状态下是中等生多,尖子生和差生少。

比如量一批零件的数据,正态状态下也是中间尺寸的多,大的和小的少。

那怎么生成正态分布随机数呢?

Excel确实有有函数可以生成正态分布的随机数,先稍微讲一下原理,方便理解。如果看不懂的可以直接拖到最后看结果。

我们知道正态分布的图形对应的是概率密度函数。

84a6d18ba8b487f907c4c2d9f583b0fa.png

511c54caceba86cf6d7d3ff19c374d01.png

f(x)求出来的是某一个特定数值x指对应的概率,也就是产生x的概率。

大家可以看出来,每个柱子对应的概率,也就是Y轴代表概率。

这个函数只有两个参数,一个是μ,一个是σ。其中μ是期望,用通俗的话说就是「中间值」,所有的数围绕这个中间值上下波动。σ是标准偏差,也叫西格玛,也是整体的波动性,我们常说的六西格玛就是六个标准偏差。

在excel里能找正态分布函数,能找到一个normdist的函数,对应了正态分布概率密度函数,因此返回的结果也是一个概率。

normdist函数和正态分布概率密度函数一样,是已知一个数x,求它发生的概率y。

但是,我们要的随机数,不是概率,所以这个似乎函数不适用。

我们要的刚好是反过来,已知概率y,求这个数x,是反过来的,那就是求它的反函数。

但大家也看到了,正态分布函数并不是一个单调函数,在定义域里,不是一一对应,而是多对一。

那就对它进行积分,它的累积密度函数就是一一对应了,然后再求其累积密度函数的反函数就可以了。

累积密度函数图形如下:

5d475c03a67f9b8aedb4919fa83362e1.png

其反函数如下。

372b02e9fd51de6b379ecf3570507ddf.png

这个图形就代表每一个累积密度下对应产生的正态分布数值。

excel刚好就有这个函数norminv,是正态分布累积密度函数的反函数,也很好记,就是normal + inverse(相反的)。

这个函数有三个参数:

=norminv(概率, 中间值,标准偏差)。

返回的值是这个这个概率下对应的正态分布数值。

概率是0到100%,我们刚好可以用rand()函数代替,也是0到1,而且是均匀分布。

所以可以变成:

=norminv(rand() , 中间值,标准偏差)

中间值好理解,比如你要生成以100为平均值上下波动的正态分布随机数,那就填100。

标准偏差怎么填呢?

根据公差范围来。假设公差范围是20,即100±10,

如果你要追求正负6个西格玛(cpk=2.0),这就传说中的六西格玛,那标准偏差是20/12= 1.67,这是人类做到的极限,良率是99.99966%。

如果你要追求正负5个西格玛(cpk=1.67),那标准偏差是20/10=2,良率是99.977%。

西格玛越少,良率越低。视情况选用即可。

我按照正负六个西格玛(cpk=2)的方法跑了200个数据,基本符合正态分布。

4ed23d970c364acfab4f509ee7ffa73a.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值