正态分布随机数产生方法

1、舍选法

参考:如何产生指定分布的随机数?——>舍选法

2、利用中心极限定理

X1,X2,,Xn X 1 , X 2 , ⋯ , X n 为独立同分布的随机变量序列,均值为 μ μ ,方差为 σ2,则

Zn=X1+X2++Xnnμσn Z n = X 1 + X 2 + ⋯ + X n − n μ σ n

具有渐近分布 N(0,1) N ( 0 , 1 ) ,也就是说当 n n → ∞ 时,

P{X1+X2++Xnnμσnx}12πxet22dt P { X 1 + X 2 + ⋯ + X n − n μ σ n ≤ x } → 1 2 π ∫ − ∞ x e − t 2 2 d t

换句话说,n 个相互独立同分布的随机变量之和的分布近似于正态分布,n 越大,近似程度越好。

根据中心极限定理,生成正态分布就非常简单粗暴了,直接生成n个独立同分布的均匀分布即可。
程序:

clear all
n=unifrnd ( 0,1,200000,1);
N=50;
w=zeros(1,4000);
w(1)=0;
   for t=1:4000;
       for j=1:N;
           w(t)=w(t)+n((j-1)*4000+t);
       end
   end       
figure(1);
hist(w,400);

结果:

3、Box–Muller算法

当x和y是两个独立且服从(0,1)均匀分布的随机变量时,则

Z1=cos(2πx)2ln(1y) Z 1 = cos ⁡ ( 2 π x ) ⋅ – 2 ln ⁡ ( 1 – y )
Z2=sin(2πx)2ln(1y) Z 2 = sin ⁡ ( 2 π x ) ⋅ – 2 ln ⁡ ( 1 – y )

Z0 Z 0 Z1 Z 1 独立且服从标准正态分布。

程序:

clear all;clc;%清屏 
m=input('请输入平均值:');
n=input('请输入标准差:'); 
t=input('请输入数据长度:'); %产生正态分布的随机数 
for i=1:t    
    a=rand;     
    b=rand;     
    X1(i)=sqrt((-2)*log(a))*cos(2*pi*b);    
    X2(i)=sqrt((-2)*log(a))*sin(2*pi*b);   
    Y1=X1*n+m;    
    Y2=X2*n+m; 
end
% 求平均值和标准差
M1=mean(Y1); N1=std(Y1);
M2=mean(Y2); N2=std(Y2); 

输入:平均值:5;标准差:1;数据长度:100
结果:
这里写图片描述
输入:平均值:5;标准差:1;数据长度:10000
结果:
这里写图片描述

参考:https://blog.csdn.net/baimafujinji/article/details/6492982?locationNum=6
https://cosx.org/2015/06/generating-normal-distr-variates

  • 9
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值