java中如何以不同概率产生随机数1-30

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中如何以不同概率产生随机数1-30相关的知识,希望对你有一定的参考价值。

例如,随机产生1-10的概率最大,随机产生10-20的概率居中,随机产生20-30的概率最小

Random rm = new Random();
int i = rm.nextInt(18);
int n = 0;
if(i > 8)
n = rm.nextInt(10)+1;
else if(i > 2&&i <= 8)
n = rm.nextInt(11) + 10;
else if(i<=2)
n = rm.nextInt(11) + 20;


这样生成的整数n是 3/6的概率在1-10之间,2/6的概率是在10-20之间,1/6的概率是在20-30之间(这种都是伪随机,但尽量接近概率)
你看看这样行不行
希望对你有帮助
参考技术A public class Test
static public int num(Random r)

int chance=r.nextInt(10);
if(chance<6) return r.nextInt(10)+1;
else if(chance<9) return r.nextInt(10)+11;
else return r.nextInt(10)+21;


static public void main(String 土数[])
Random r=new Random();
int c[]=new int[4];
int sample_num=100000;
for(int i=0;i<sample_num;i++ )
int n=num(r);
if(n>=1 && n<=10) c[0]++;
else if(n>=11 && n<=20) c[1]++;
else if(n>=21 && n<=30) c[2]++;
else c[3]++;

System.out.println(sample_num+"例样本中:");
System.out.format("[1,10]有%d例,占%.2f%%\n",c[0],c[0]*100.0/sample_num);
System.out.format("[11,20]有%d例,占%.2f%%\n",c[1],c[1]*100.0/sample_num);
System.out.format("[21,30]有%d例,占%.2f%%\n",c[2],c[2]*100.0/sample_num);
System.out.format("错误有%d例,占%.2f%%",c[3],c[3]*100.0/sample_num);


===

100000例样本中:
[1,10]有60085例,占60.09%
[11,20]有29997例,占30.00%
[21,30]有9918例,占9.92%
错误有0例,占0.00%

概率论实验 01 - | 使用Matlab产生随机数

一、实验目的

     1.了解随机数的产生方法;

     2.了解常用随机数的概率分布函数、分布律和概率密度函数。

二、实验原理

随机数的产生有好多方法,可以利用乘积法和同余法产生[0,1]之间的均匀分布,然后利用函数变换法产生所需不同分布的随机数。可以按照所产生的随机数,对落在不同区间的数据进行统计,从而画出所产生的随机数的统计特性。MATLAB工具提供了非常丰富的函数来产生经常使用的分布的随机数,比如rand,randn就是用来产生均匀分布随机数和高斯分布随机数的。

本实验充分利用MATLAB提供的工具来产生随机数,验证和观察其统计特性。

1. disttool :分布函数和密度函数的可视化工具

分布函数和密度函数的工具能够产生22种常用分布的概率分布曲线和概率密度曲线,并通过图形方式显示。我们还可以通过修改参数产生同一种分布不同参数的概率分布曲线和概率密度曲线。

    在MATLAB工作环境下,在命令窗口键入disttool (distribution tool的缩写),弹出图形窗口,在函数类型中选择PDF(概率密度曲线)和CDF(概率分布曲线)后,我们可以通过修改参数观察不同参数情况下的曲线。这些分布包括正态(Normal)、二项(Binomial)、指数(Exponential)、均匀(Uniform)、泊松(Poisson)等。也可以选择cdf选项对分布函数进行观察。

2.randtool(随机变量模拟工具)

随机变量模拟工具能够模拟产生22种常用分布的随机数,并可以通过修改它们的参数产生同一种分布不同参数的随机数,并通过图形方式显示它们的概率密度统计。在MATLAB工作环境下,在命令窗口键入randtool并回车,将弹出随机变量模拟工具窗口。Distribution(分布): 在此可选择多种分布。Samples (样本):模拟的样点数,可选择。Resample(重新抽样):刷新结果,重新模拟。Export(输出): 输出结果到工作空间,输出结果后可直接在工作空间中查看数值。

3.dfittool:数据的分布拟合的可视化工具

    dfittool (distribution fit tool的缩写),其主要步骤如下:(1)生成数据集:点击Data弹出子菜单,子菜单中点击Data à 选择数据变量(这里选前面已输出的normrv)à Data set name 中输入数据集名à 点击Create Data Set 建立数据集 à close关闭子菜单。 (2)选择分布密度拟合:点击New Fit 弹出子菜单 à 在fit name输入拟合名(此处输入了“正态拟合”)à Distribution提供了多个分布的菜单选项,此处选中normal à 点击Apply进行拟合并观察效果 à 满意后点击close关闭子菜单。

三、实验内容与步骤

1.绘制正态分布密度函数曲线。

clear all
close all
x=-10:0.1:10;
u=0;c12=4;
c11=sqrt(c12);
pf1=1/(sqrt(2*pi)*c11)*exp((-(x-u).^2)/(2*c11.^2));
u=0;c22=1;
c21=sqrt(c22);
pf2=1/(sqrt(2*pi)*c21)*exp((-(x-u).^2)/(2*c21.^2));
u=0;c32=1/4;
c31=sqrt(c32);
pf3=1/(sqrt(2*pi)*c31)*exp((-(x-u).^2)/(2*c31.^2));
plot(x,pf1,'r-',x,pf2,'b-',x,pf3,'g-');
legend('C^2=4','C^2=1','C^2=0.25');
title('正态分布概率密度函数曲线');
xlabel('x');
ylabel('f(x)');
grid on;

2. disttool

 

3. randtool

 

4. dfittool

以上是关于java中如何以不同概率产生随机数1-30的主要内容,如果未能解决你的问题,请参考以下文章

如何根据概率密度函数产生随机数

JAVA中如何产生20个不同的随机数?

Java:怎样产生1~6的随机数,并使1~4产生的概率大一些呢?

概率论实验 02 - | 基于Matlab随机数的产生和特性统计

java如何实现这样的随机数字呢?

关于Java里产生1-6随机数的方法