采用第二类舍选抽样法产生标准正态分布
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
double randx,randnum; unsigned long randi=1; const unsigned long randa=16807; unsigned long randm=pow(2,31)-1;;
void random_number() {
if(randi==randm) {
采用第二类ຫໍສະໝຸດ Baidu选抽样法产生标准正态分布
一、课题名称:采用第二类舍选抽样法产生标准正态分布
二、班级和姓名:***
三、主要内容:
1.舍选抽样法的基本思想是按照给定的分布密度函数 f(x),对均匀
分布的随机数列{ξn}进行舍选。其遵循原则如下:在 f(x)较大的地
方保留较多的随机数 ξi;在 f(x) 较小的地方保留较少的随机数
ξi;
2.第二类舍选抽样法算法如下:
设 h(x)和 f(x)同是在[0,1]区域上的分布密度函数,并且
f ( x) L f ( x) h( x) Lg( x)h( x) Lh( x)
max f ( x)
f (x)
L
1, g( x)
1
x[0,1] h( x )
Lh( x)
(g(x)可看作为另一随机变量的分布密度函数。)要产生标准正态分
randi=randi-1; } randi=(randa*randi)%randm; randx=randi; randnum=randx/randm; return; }
int main(void) {
double u,v,x,g; ofstream outfile; ("正态分布.txt");
if(v<=g); {
x=-log(u); outfile<<x<<endl; }
} }
3.计算结果及具体分析讨论
由图可知,曲线符合标准正态分布。
布f ( x)
1 exp{ x 2 }
2
2
x ,令 h( x) e x ,则
, L max[
f
( x) ]
e / 2
h( x )
F 1,[h( x)] ln x
流程图如下
1 [0,1]
3.源程序:
h ln1 2 [0,1]
N 2 g(h ) Y
f (x) x h
#include<iostream> #include<fstream> #include<> using namespace std;
int amount; cout<<"抽样次数"<<endl; cin>>amount;
for(int i=1;i<=amount;i++) {
random_number(); v=randnum; random_number(); u=randnum;
g=*exp((-log(u)-1)*(-log(u)-1)/2);
void random_number() {
if(randi==randm) {
采用第二类ຫໍສະໝຸດ Baidu选抽样法产生标准正态分布
一、课题名称:采用第二类舍选抽样法产生标准正态分布
二、班级和姓名:***
三、主要内容:
1.舍选抽样法的基本思想是按照给定的分布密度函数 f(x),对均匀
分布的随机数列{ξn}进行舍选。其遵循原则如下:在 f(x)较大的地
方保留较多的随机数 ξi;在 f(x) 较小的地方保留较少的随机数
ξi;
2.第二类舍选抽样法算法如下:
设 h(x)和 f(x)同是在[0,1]区域上的分布密度函数,并且
f ( x) L f ( x) h( x) Lg( x)h( x) Lh( x)
max f ( x)
f (x)
L
1, g( x)
1
x[0,1] h( x )
Lh( x)
(g(x)可看作为另一随机变量的分布密度函数。)要产生标准正态分
randi=randi-1; } randi=(randa*randi)%randm; randx=randi; randnum=randx/randm; return; }
int main(void) {
double u,v,x,g; ofstream outfile; ("正态分布.txt");
if(v<=g); {
x=-log(u); outfile<<x<<endl; }
} }
3.计算结果及具体分析讨论
由图可知,曲线符合标准正态分布。
布f ( x)
1 exp{ x 2 }
2
2
x ,令 h( x) e x ,则
, L max[
f
( x) ]
e / 2
h( x )
F 1,[h( x)] ln x
流程图如下
1 [0,1]
3.源程序:
h ln1 2 [0,1]
N 2 g(h ) Y
f (x) x h
#include<iostream> #include<fstream> #include<> using namespace std;
int amount; cout<<"抽样次数"<<endl; cin>>amount;
for(int i=1;i<=amount;i++) {
random_number(); v=randnum; random_number(); u=randnum;
g=*exp((-log(u)-1)*(-log(u)-1)/2);