文档介绍:第三章随机数的产生及应用一、乘同余法以及混合同余法产生随机数随机数是指(0,1)上均匀分布随机变量的值,最早是手工或通过机械方式由手纺车、投掷或洗纸牌等产生,现可由计算机相继产生伪随机数(1)乘同余法:一种通常的产生伪随机数的方法为:从初值或者称为种子出发,利用公式其中a和m为给定的正整数,每个均为0,1,2,…,m-1中的一个,称为一个伪随机数,它近似服从(0,1)上的均匀分布。通常为了避免随机数的重复出现,可选取m为与计算机字长相当的素数,如(2)混合同余法:利用如下递推公式用混合同余法产生的R程序如下:f=function(x0,a,c,m,n){x=rep(0,n)x[1]=a*x0+c-m*floor((a*x0+c)/mfor(iin2:n){x[i]=a*x[i-1]+c-m*floor((a*x[i-1]+c)/m)}x}二、利用随机数计算积分随机数的最早应用之一就是积分计算。设g(x)是一个函数,计算注意到若U在(0,1)上服从均匀分布,则产生k个随机数利用强大数定律,我们以概率1有近似计算上述积分的方法称为MonteCarlo方法。其R程序如下:f1=function(n,a,b,g){X=runif(n)sum((b-a)*g(a+(b-a)*X))/length(X)}比如计算积分也可采用R的内置函数来计算积分integrate(g,a,b)现举一个具体的例子比较他们的结果:>f1(100000,-2,2,g)[1]>integrate(g,-2,2)<:估计二重积分给出如下算法:X=runif(100000,0,1)Y=runif(100000,0,1)f=function(x,y){exp((x+y)^2)}sum(f(X,Y))/length(X)[1]:对于(0,1)上均匀分布的随机变量定义通过生成N来估计E[N]程序:=function(n){M=numeric(n)for(iin1:n){S=0;N=0while(S<=1){S=S+runif(1)N=N+1}M[i]=N}mean(M)}练习:设为随机数,定义N为用模拟法求E[N]用模拟法求例:的估计:考虑服从(0,1)区间上均匀分布的独立的随机变量因此,二维随机变量(X,Y)的联合概率密度为则Pi<-function(n){(1234579)k<-0;x<-runif(n);y<-runif(n);k<-length(x[x^2+y^2<1])(Pi=4*k/n)}例:的估计:也可以用平均值法:程序Pi2=function(n){x=runif(n)4*sum(sqrt(1-x^2))/n}练习:,其中U为(0,1)均匀分布的随机变量,:追逐问题,在正方形ABCD的四个顶点各有一人,在某一时刻,四人同时出发以匀速v走向顺时针方向的下一个人。如果他们的方向始终保持对准目标,。解:建立平面直角坐标系,以时间间隔进行采样,在每一时刻t计算每个人在下一时刻时的坐标。不妨假设甲追踪乙,设在时刻t,甲、乙的坐标分别为甲在时刻的坐标为