利用独立同分布的中心极限定理生成正态分布的随机数
生活随笔
收集整理的這篇文章主要介紹了
利用独立同分布的中心极限定理生成正态分布的随机数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?
????
????多數(shù)編程語言只提供一個生成[0,1] 區(qū)間上的均勻分布數(shù)組的函數(shù)。本人的目的在于介紹如何生成一個正態(tài)分布的隨機數(shù)組
????參考文獻[1]指出了利用均勻分布生成正態(tài)分布的方法,即中心極限定理之獨立同分布。
設(shè)隨機變量相互獨立,服從[0,1]區(qū)間上的均勻分布。則隨機變量
?
當(dāng)n足夠大時,新的隨機變量Y 滿足標準正態(tài)分布。
但實際上,標準正態(tài)分布不一定能滿足要求,也許需要的是滿足正態(tài)分布(a,b)的隨機數(shù)組。
這時就應(yīng)該進行一些必要的運算。
對于均值,只需要對最終結(jié)果進行相加或者相減
對于方差的變換可以簡單的將結(jié)果乘上一個系數(shù)
由正態(tài)分布的定義出發(fā),可以證明若?則
?
已知隨機變量X? 服從參數(shù)為的正態(tài)分布,則隨機變量X 概率密度函數(shù)為
令?,則有
接下來,我們通過C++實現(xiàn)這一過程
//該程序用于實現(xiàn)生成一組正態(tài)分布的隨機數(shù) //作者cclplus 我的郵箱是maxwell970710@gmail.com 如有問題可以發(fā)送到我的郵箱,我會盡可能為您解答 #include "stdafx.h" #include <iostream> #include <cmath> #include <ctime> using namespace std; double rand_normal(double r_me, double sd);//返回一個方差為r_me,標準差為sd的隨機數(shù) int main(){double ans;double r_mean, r_sd;int n;cout << "請依次輸入所需要正態(tài)分布隨機數(shù)的均值和標準差" << endl;cin >> r_mean >> r_sd;cout << "請輸入需要隨機數(shù)的個數(shù)" << endl;cin >> n;for (int i = 0; i < n; i++) {ans = rand_normal(r_mean, r_sd);cout << "隨機數(shù):" << ans << endl;}return 0; } double rand_normal(double r_me, double sd) {int i;const int normal_count = 360;//樣本數(shù)目采用360個double ccl_num, ccl_s;double ccl_ar[normal_count];ccl_num = 0;for (i = 0; i < normal_count; i++) {ccl_ar[i] =rand() % 1000/ (double)999;//生成一個[0,1]的均勻分布ccl_num += ccl_ar[i];}ccl_num -= ((double)normal_count*0.5);//減去0-1均勻分布的均值ccl_s = 1.0*(double)normal_count / 12.0;//0-1分布的方差為1/12ccl_s = sqrt(ccl_s);ccl_num /= ccl_s;//此時ccl_num接近標準正態(tài)分布的一個子集ccl_num *= sd;ccl_num += r_me;return ccl_num; }?
【參考文獻】
?
[1]王桂松,張忠占,程維虎等 概率論與數(shù)理統(tǒng)計.[M]2014 110-110 140-141
總結(jié)
以上是生活随笔為你收集整理的利用独立同分布的中心极限定理生成正态分布的随机数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ATSENet论文阅读笔记
- 下一篇: ecshop二次开发目录文档【文件结构说