- #########第二题#######
- X=rep(0,100)
- for(i in 1:100){
- u=runif(1);
- if(u<0.3){
- X[i]=1 }
- else X[i]=2}
- n=0
- for(i in 1:length(X)){
- if(X[i]==1){
- n=n+1
- }
- }
- a=n/length(X)*100
- sprintf('重复100次,1出现的百分比为:%f%%',a)
- X=rep(0,1000)
- for(i in 1:1000){
- u=runif(1);
- if(u<0.3){
- X[i]=1 }
- else X[i]=2}
- n=0
- for(i in 1:length(X)){
- if(X[i]==1){
- n=n+1
- }
- }
- a=n/length(X)*100
- sprintf('重复1000次,1出现的百分比为:%f %%',a)
- X=rep(0,10000)
- for(i in 1:10000){
- u=runif(1);
- if(u<0.3){
- X[i]=1 }
- else X[i]=2}
- n=0
- for(i in 1:length(X)){
- if(X[i]==1){
- n=n+1
- }
- }
- a=n/length(X)*100
- sprintf('重复10000次,1出现的百分比为:%f%%',a)
运行结果:
2、
- ##3##
- x=rep(0,10)
- n=0
- for(i in 1:10){
- u=runif(1)
- x[i]=sin(pi/2*u)
- }
- sprintf('重复10次,生成的随机数为:')
- print(x)
- ##4##
- X=rep(0,10)
- for(i in 1:10){
- u=runif(1);
- X[i]=tan(pi*u)
- }
- sprintf('重复10次,生成的随机数为:')
- print(X)
结果:
3)
4)
解:
X=Rcosα;Y=Rsinβ
其雅可比矩阵为:
J=12Rcosα -Rsinα12RsinαRcosα=1
故X与Y独立。
故:
fX,Y=12π*12e-12R=12π*12πe-12X2+Y2
由于X,Y相互独立,故:
fX=12πe-12X2
fY=12πe-12Y2
故X~N(0,1),Y~N(0,1).
- #####21#####
- #gx=x
- t1=Sys.time()
- c=1
- x=rep(0,10)
- n=0
- while(n!=10){
- u1=runif(1)
- Y=-log(u1)
- u2=runif(1)
- if (u2<exp(-Y)){
- n=n+1
- x[n]=Y
- }
- }
- sprintf('重复10次,生成的随机数为:')
- print(x)
- t2=Sys.time()
- t2-t1
- #c=1执行step1的平均次数为1次
- #执行时间0.008308887 secs
- #gx=2x
- t1=Sys.time()
- c=1/2
- x=rep(0,10)
- n=0
- while(n!=10){
- u1=runif(1)
- Y=-log(u1)
- u2=runif(1)
- if (u2<exp(-Y)){
- n=n+1
- x[n]=Y
- }
- }
- sprintf('重复10次,生成的随机数为:')
- print(x)
- t2=Sys.time()
- t2-t1
- #c=1/2执行step1的平均次数为0.5次
- #执行时间0.00822401
结果:
第一种方法:c=1,g(x)=x
第一种方法:c=1/2,g(x)=x/2
答:双指数分布的逆分布函数为:
F-1x=ln2x,x<0.5-ln2(1-y),x≥0.5
- ##逆变换法
- X=rep(100)
- for(i in 1:100){
- u=runif(1);
- if(u<0.5){
- X[i]=log(2*u)
- print(x[i])
- }
- else{
- X[i]=-log(2*(1-u))}
- }
- sprintf('重复100次,生成的随机数为:')
- print(X)
2,复合法:
- X=rep(100)
- n=1
- while(n!=101){
- u=runif(1);
- if(u<0.5){
- u1=runif(1)
- if(u1<0.5){
- X[n]=log(2*u1)
- n=n+1}}
- if(u>=0.5){
- u2=runif(1)
- if(u2>0.5){
- X[n]=-log(2*(1-u2))
- n=n+1}}
- }
- sprintf('重复100次,生成的随机数为:')
- print(X)
结果: