有概率的随机数_几种特定分布的随机数的产生

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

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值