概述
matlab中现有的产生满足正态分布随机数的函数主要有:
randn和normrnd
有关randn的应用可以参考:
https://ww2.mathworks.cn/help/matlab/ref/randn.html?s_tid=srchtitle
有关normrnd的应用可以参考:
https://ww2.mathworks.cn/help/stats/normrnd.html?searchHighlight=normrnd&s_tid=doc_srchtitle
然而,以上给出的参考方法大多只是简单的产生满足标准正态分布的随机数、数组或者矩阵等。并没有给出能够人为控制取值区间并且满足正态分布的方法。
而由百度百科有关正态分布的词条
https://baike.baidu.com/item/%E6%AD%A3%E6%80%81%E5%88%86%E5%B8%83/829892?fr=aladdin
中有关:分布曲线(面积分布)部分的内容,可以得知:
正态分布曲线下,横轴区间(μ-σ,μ+σ)内的面积为68.268949%;横轴区间(μ-1.96σ,μ+1.96σ)内的面积为95.449974%;横轴区间(μ-2.58σ,μ+2.58σ)内的面积为99.730020%。并且由于“小概率事件”和假设检验的基本思想 ,“小概率事件”通常指发生的概率小于5%的事件,认为在一次试验中该事件是几乎不可能发生的。由此可见X落在(μ-3σ,μ+3σ)以外的概率小于千分之三,在实际问题中常认为相应的事件是不会发生的,基本上可以把区间(μ-3σ,μ+3σ)看作是随机变量X实际可能的取值区间,这也被称之为正态分布的“3σ”原则。
与此同时,matlab官网有关normrnd函数所产生的正态(高斯)分布是可以通过调整平均参数mu
和标准偏差参数sigma来调整的。于是,根据正态分布曲线下横轴区间内的面积占比【
“3σ”原则】以及normrnd函数,可以通过以下方法,构建取值介于a到b之间的满足正态(高斯)分布的随机数/数组/矩阵。
【首先,以取值区间介于-1到1为例】
1.由正态分布曲线下横轴区间内的最大面积占比【
“3σ”原则】的对应关系构建方程组:
μ-3σ=-1; μ+3σ=1;
求解以上方程组,获得μ=0,σ约=0.333333333【保留小数点后5位有效数字,σ=0.33333】
2.利用normrnd函数,构建取值介于-1到1之间满足正态(高斯)分布的随机数/数组/矩阵
(一)产生随机数:normrnd(0,0.33333,1,1)
运行结果:
ans =
0.1250
(二)产生随机矩阵(数组):normrnd(0,0.33333,7,9)
运行结果:
ans =
-0.0767 -0.0644 0.2172 0.1179 0.4161 0.2229 -0.4620 -0.3112 0.0279
-0.0392 0.4512 -0.2853 -0.5888 0.1429 0.3427 -0.6554 0.1133 0.1705
0.4057 -0.0333 -0.1468 -0.3837 -0.7501 0.2818 -0.3118 0.0651 -0.3316
-0.4622 0.3164 0.1283 0.4871 -0.1837 0.3332 -0.4377 -0.5466 -0.1416
-0.2559 -0.0011 0.0964 -0.1814 -0.5304 0.4148 0.0178 -0.6530 -0.7569
0.3377 0.5967 -0.4755 -0.3772 -0.2037 -0.2716 -0.1250 -0.7779 0.5941
0.1567 0.2763 0.0923 -0.1201 -0.6333 -0.1697 0.1454 -0.2183 -0.2624
同样的方法,
【以取值区间介于2到8为例】
1.由正态分布曲线下横轴区间内的最大面积占比【
“3σ”原则】的对应关系构建方程组:
μ-3σ=2; μ+3σ=8;
求解以上方程组,获得μ=5,σ=1
2.利用normrnd函数,构建取值介于2到8之间满足正态(高斯)分布的随机数/数组/矩阵
(一)产生随机数:normrnd(5,1,1,1)
运行结果:
ans =
3.3969
(二)产生随机矩阵(数组):normrnd(5,1,7,9)
运行结果:
ans =
4.5075 4.8764 4.8143 6.7305 6.2039 3.8300 3.9759 6.3387 7.3241
5.9597 6.7941 5.8816 4.3803 5.6172 4.7193 5.9855 4.3376 3.6784
3.7881 3.3932 3.2036 5.4418 4.9802 4.0205 5.6468 5.8512 4.3138
5.4988 5.5361 3.8683 3.3463 6.2425 3.4314 5.1126 6.6954 4.9837
3.8188 6.7807 3.9099 4.2940 4.8159 5.9901 3.4148 6.3373 5.7467
5.6472 5.3108 3.8547 4.7077 5.6550 4.5385 4.4796 5.6218 5.2734
5.4936 5.7081 7.3934 5.3054 7.0343 3.2983 4.0377 3.7104 4.1969
【同理,可以通过以上方法,构建取值介于a到b之间的满足正态(高斯)分布的随机数/数组/矩阵。
】
特别声明:
以上方法仅是本人在处理数据过程中发现的一种方法,并不能保证完全正确,仅限于和大家的交流学习,不足之处,请多多包涵,请高手大牛不吝指教,谢谢!!!!!
最后
以上就是飘逸宝马为你收集整理的matlab 产生取值介于a到b之间的满足正态(高斯)分布的随机数/数组/矩阵的全部内容,希望文章能够帮你解决matlab 产生取值介于a到b之间的满足正态(高斯)分布的随机数/数组/矩阵所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复