01
# 均匀分布的随机数
均匀分布是指整个样本空间中的每一个样本点对应的概率(密度)都是相等的。
R语言中生成均匀分布的随机数的函数是runif(),其语法是:
runif(n, min = 0, max = 1)
n:表示生成的随机数的数量
number of observations. If length(n) > 1, the length is taken to be the number required.
min, max:表示均匀分布的上、下限[min,max].
lower and upper limits of the distribution. Must be finite.
例如,生成100个[2,5]的均匀分布随机数,并画出直方图和分布曲线图。
y=runif(100,2,5)
hist(y,probability = TRUE)
curve(dunif(x,2,5),add=TRUE,col="red")
![93ae8c774d257f8889e6567551f9b1d1.png](https://i-blog.csdnimg.cn/blog_migrate/c0265c54b5d1d2ca5a0fcea19081f0e0.png)
02
# 正态分布的随机数
正态分布,又称高斯分布。其特征为中间高两边低左右对称。
R语言中,正态分布随机数的生成函数是rnorm()。其语法格式为:
rnorm(n, mean = 0, sd = 1)
n:表示生成的随机数的数量
number of observations. If length(n) > 1, the length is taken to be the number required.
mean:正态分布的均值,默认为0.
vector of means.
sd:正态分布的标准差,默认为1.
vector of standard deviations.
例如,生成100个均值为5,标准差为2的正态分布随机数,并画出概率直方图和密度函数线。
y=rnorm(100,5,2)
hist(y,probability = TRUE)
curve(dnorm(x,5,2),add=TRUE,col="red")
![7ef1ca99ceea03b84c2c51f44307484a.png](https://i-blog.csdnimg.cn/blog_migrate/31c46d2dc7a3a7b12115812837cb096e.png)
03
# 指数分布的随机数
指数分布是一种连续分布,常用来表示独立随机事件发生的事件间隔,比如一个顾客接受服务的时间长短、电子产品的使用寿命等。如,一个灯泡的平均寿命是2500小时,则可以认为该灯泡的寿命服从均值为2500的指数分布。
R语言中,指数分布随机数的生成函数是rexp()。其语法格式为:
rexp(n, rate = 1)
n:表示生成的随机数的个数
number of observations. If length(n) > 1, the length is taken to be the number required.
rate:均值的倒数。
vector of rates.
例如,生成100个均值为10的指数分布随机数。
y=rexp(100,1/10)
hist(y,probability = TRUE)
curve(dexp(x,1/10),add=TRUE,col="red")
![7ea09a680c6cb8b3461266b1e12120ff.png](https://i-blog.csdnimg.cn/blog_migrate/43ef0ab44c60246a3225f75d5ca58ff5.png)
04
# 在Java中调用R语言的各种随机数生成函数
除了上述3种函数,R语言中还提供了其他多种随机数的生成函数,此处不再一一例举。
使用Java提供的随机数功能可以产生均匀分布和正态分布的随机数,如果要产生其他特定分布的随机数还需要自己编写代码,为了减少代码的编写,可以在Java中直接调用R语言中的各种随机数生成函数。
如,在Java中调用R语言的函数产生指数分布的随机数。
import org.rosuda.REngine.REXP;
import org.rosuda.REngine.Rserve.RConnection;
public class JavaCallR {
public static void main(String[] args) {
try {
RConnection c = new RConnection();
REXP x = c.eval("rexp(100,1/10)");
for (int i = 0; i < 100; i++) {
System.out.println(x.asDoubles()[i]);
}
} catch (Exception e) {
}
}
}
05
#随机数的应用小例子--求PI的值
即蒙特卡洛模拟。以下为R语言代码。
n=0
count=10000
for(i in 1:count){
xx=runif(1,min=0,max=1)
yy=runif(1,min=0,max=1)
if(xx*xx+yy*yy<=1){
n=n+1
}
}
4*n/count