将各种随机事件的概率特征(概率分布,数学期望)与随机事件的模拟联系起来用试验的方法确定事件的相应概率与数学期望。突出特点是概率模型的解是由试验得到的。
利用随机模拟试验估计pi的值。具体过程点击该链接
代码如下:
buffon<-function(n,a,l){
k<-0
for(i in 1:n){
x<-runif(1)*a
theta<-runif(1)*pi
if(l*sin(theta)>=x) {k=k+1}
}
p=k/n
pie=2*l/(a*p)
result<-c(p,pie);result
}
buffon(10000,1,0.8)
随机数是指(0,1)上均匀分布随机变量的值,最早是手工或通过机械方式产生,现可由计算机相机产生伪随机数
比如计算积分 θ \theta θ= ∫ a b g ( x ) d x \int_a^bg(x){\rm d}x ∫abg(x)dx
f1=function(n,a,b,g){
X=runif(n)
sum((b-a)*g(a+(b-a)*X))/length(X)
}
或者用R的内置函数来计算积分:
integrate(g,a,b)
计算 ∫ 1 2 x 2 d x \int_1^2x^2{\rm d}x ∫12x2dx的积分
g<-function(x){
x^2
}
int<-integrate(g,1,2)
计算 ∬ D e ( z − y ) 2 d x \iint _D{e^{{(z-y)}^2}}{\rm d}x ∬De(z−y)2dx D=[0,1] × \times ×[0,1]
#内置函数法
library(cubature)
double<-function(x){exp((x[1]+x[2])^2)}
adaptIntegrate(double,c(0,0),c(1,1))$interal
二项分布,几何分布,poison分布,超几何分布等
例子:产生分布律如下的随机变量100个
X | 1 | 2 | 3 | 4 |
---|---|---|---|---|
P | 0.2 | 0.15 | 0.3 | 0.35 |
方法1 |
X=rep(0,100)
for(i in 1:100)
{u=runif(1);if(u<0.2){X[i]=1}
else
if(u<0.35){X[i]=2}
else if(u<0.65)
{X[i]=3}
else X[i]=4
}
方法2
X=sample(c(1,2,3,4),100,
c(0.2,0.15,0.3,0.35),replace=TRUE)
n<-100
U=runif(n,0,1)
X=floor(n*U)+1
向上取整数: ceiling(x)
ge.f=function(n,p){
U=runif(n)
X=floor(log(U)/log(1-p))+1
X
}
rp=function(n,lambda){
Y=rep(0,n)
for(j in 1:n){
i=0;p=exp(-lambda);F=p
u=runif(1)
while(F<=u){
p=lambda*p/(i+1);F=F+p
i=i+1
}
Y[j]=i
}
Y
}
rb=function(m,n,p){
Y=rep(0,m)
for(j in 1:m){
c=p/(1-p);i=0;pr=(1-p)^n;F=pr
u=runif(1)
while(u>=F){
pr=(c*(n-i)/(i+1))*pr;F=F+pr
i=i+1
}
Y[j]=i
}
Y
}