精华内容
下载资源
问答
  • 几何分布随机数
    2022-02-25 21:46:30

    R语言使用rgeom函数生成符合几何分布的随机数、使用plot函数可视化符合几何分布的随机数(Geometric Distribution)

    目录

    更多相关内容
  • 几何分布定义: 代码实现: 因为是离散型随机变量,所以顺次计算出每种情况的概率,再随机生成10000个0-1之间的随机数(用于模拟概率),然后用这些生成的概率去比对他们应该落入的区间,最后逐个累加,统计...

    记录一下最近的数学作业:

    超几何分布定义:

    代码实现:

    因为是离散型随机变量,所以顺次计算出每种情况的概率,再随机生成10000个0-1之间的随机数(用于模拟概率),然后用这些生成的概率去比对他们应该落入的区间,最后逐个累加,统计频率,然后用频率/10000去计算概率,最后绘制2条曲线,1条是理论,1条是模拟。

    package test;
    
    
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartFrame;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.plot.CategoryPlot;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.data.category.DefaultCategoryDataset;
    
    import java.awt.*;
    import java.text.DecimalFormat;
    import java.util.Scanner;
    
    public class Cjhfb {
        private static double[] rn;//随机数
        private int n;//摸球总数
        private int m;//黑色球总数
        private int z;//球的总数
    
    
        public Cjhfb() {
            this.rn = randomNum();
        }
    
        //求概率 返回数组
        public double[] Probability() {
            double[] prob = new double[10000];
            for (int i = 0; i <= n; i++) {
                double temp = (double) (combination(i, m)) * (double) (combination(n - i, z - m)) /
                        (double) (combination(n, z));
                String result = String.format("%.6f", temp);
                prob[i] = Double.parseDouble(result);
            }
            return prob;
        }
    
        //计算累计概率
        public double[] cumulativeProbability() {
            double[] probability = Probability();
            double[] cumulativeprobability = new double[10000];
            int k = 0;
            for (int i = 0; i <= n; i++) {
                double temp = 0;
                for (int j = 0; j <= i; j++) {
                    temp += probability[j];
                }
                cumulativeprobability[k++] = temp;
            }
            return cumulativeprobability;
        }
    
        //计算频率
        public int[] frequency() {
            int[] freq = new int[n + 1];
            for (int i = 0; i < n + 1; i++) {
                freq[i] = 0; //初始化数组为0
            }
            double[] rnum = randomNum();
            double[] cpro = cumulativeProbability();
            for (int i = 0; i < 10000; i++) {
                for (int j = 0; j < n + 1; j++) {
                    if (rnum[i] < cpro[j]) {
                        freq[j]++;
                        break;
                    }
                }
            }
            return freq;
        }
    
        //计算生成的频率对应的概率
        public double[] frequencyProbability() {
            double frequencyprobability[] = new double[n + 1];
            int[] freq = frequency();
            for (int i = 0; i < n + 1; i++) {
                frequencyprobability[i] = (double) freq[i] / 10000;
            }
            return frequencyprobability;
        }
    
        //求期望
        public double expectation() {
            return (double) n * (double) m / (double) z;
        }
    
        //求方差
        public double variance() {
            double n1 = (double) n;
            double m1 = (double) m;
            double z1 = (double) z;
            return (n1 * m1 * (z1 - m1) * (z1 - n1)) / (z1 * z1 * (z1 - 1));
        }
    
        //生成随机数
        public static double[] randomNum() {
            double[] rn = new double[10000];
            for (int i = 0; i < 10000; i++) {
                double a = Math.random();
                DecimalFormat two = new DecimalFormat("#.000000");//"0.00"
                String str = two.format(a);
                rn[i] = Double.parseDouble(str);
            }
            return rn;
        }
    
        //求阶乘
        public static long factorial(int x) {
            long sum = 1;
            while (x > 0) {
                sum = sum * x--;
            }
            return sum;
        }
    
        //求组合
        public static long combination(int m, int n) {
            if (m > n)
                return 0;
            if (m == n || m == 0) return 1;
            if (m > n / 2) {
                m = n - m;
            }
            return factorial(n) / (factorial(m) * factorial(n - m));
        }
    
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            System.out.println("请输入样本总数N");
            Cjhfb cjhfb = new Cjhfb();
            cjhfb.z = input.nextInt();
            System.out.println("请输入指定样本数量M");
            int x0 = input.nextInt();
            cjhfb.m = x0;
            System.out.println("请输入抽样个数n");
            int x = input.nextInt();
            cjhfb.n = x;
            if (x0 < x) x = x0;
    
            System.out.println("---------------------期望-------------------------");
            System.out.println(cjhfb.expectation());
            System.out.println("---------------------方差-------------------------");
            System.out.println(cjhfb.variance());
            System.out.println("---------------------概率-------------------------");
            double[] probs = cjhfb.Probability();
            for (int i = 0; i <= x; i++) {
                System.out.println("X="+i+": "+probs[i]);
            }
            System.out.println("--------------------累计概率----------------------");
            double[] cumulativeProbability = cjhfb.cumulativeProbability();
            for (int i = 0; i <= x; i++) {
                System.out.println(cumulativeProbability[i]);
            }
            System.out.println("----------------------频率------------------------");
            int[] freq = cjhfb.frequency();
            for (int i = 0; i <= x; i++) {
                System.out.println("X="+i+":的频率:"+freq[i]+" 对应的概率:"+cjhfb.frequencyProbability()[i]);
            }
    
            DefaultCategoryDataset dataset = new DefaultCategoryDataset();//创建数据集对象
            for (int i = 0; i <= x; i++) {
                dataset.addValue(probs[i],""+i,""+i);//数据值,X轴,Y轴
            }
    
            JFreeChart mchart = ChartFactory.createBarChart(
                    "bar chart",
                    "X",//横坐标1
                    "probability", //纵坐标
                    dataset,//数据集
                    PlotOrientation.VERTICAL,
                    true,//显示图例
                    true,//采用标准生成器
                    false//是否生成超链接
            );
            CategoryPlot mplot = (CategoryPlot) mchart.getPlot();
            mplot.setBackgroundPaint(Color.lightGray);
            mplot.setRangeGridlinePaint(Color.orange);//背景底部横虚线
            mplot.setOutlinePaint(Color.green);//边界线
    
            ChartFrame mchartframe = new ChartFrame("超几何分布", mchart);
            mchartframe.pack();
            mchartframe.setVisible(true);
        }
    }
    

    展开全文
  • 从各种方便的分布生成随机数的例程:二项式、几何、一般离散、帕累托等。请参阅: http://www.math.uu.se/research/telecom/software
  • 1.生成离散型随机变量1.1生成几何分布随机数1.1.1inverse transform method对于形如 的概率密度函数,因为 ,其中 ,所以 几何分布的密度函数为: 等价于 U 1.2生成泊松分布随机数 X 1.3生成二项分布随机数 n 2....

    最近统计模拟课在学模拟生成服从某一分布的随机数,在此做一个整理。

    1.生成离散型随机变量

    1.1生成几何分布随机数

    1.1.1inverse transform method

    对于形如

    的概率密度函数,因为
    ,其中
    ,所以

    几何分布的密度函数为:

    等价于

    U 

    03f0c97d061d7cc17c2a26794b8f093a.png

    1.2生成泊松分布随机数

    X 

    6544a78cb5eabde82ac0ecddc4d964a1.png

    1.3生成二项分布随机数

    n 

    dea2584d05e178c39b3a70a80e505f3a.png

    2.生成连续型随机变量

    2.1Inverse Transform Algorithm:

    首先介绍一个算法:U是一个服从(0,1)上均匀分布的随机数,令

    ,那么有:

    2.1.1生成指数分布随机数

    lam 

    7630a3e492362af332eb0fd0fdb73897.png

    2.2the rejection method

    该算法要求首先有一个分布函数为

    的随机变量,然后利用这个随机变量去simulate另一个随机变量。具体做法是:

    67160941996c0804a70e5ebaa12bc32a.png

    例如:

    ,考虑
    ,接下来找一个最小的c, s.t.
    。因此,只需求
    的一阶导数=0。解得
    X 

    b8c29d76c603549db012ed14780253e6.png

    2.3生成正态分布随机数

    Z 
    展开全文
  • 几何分布 产品抽样检查中经常遇到一类实际问题,假定在N件产品中有M件不合格品,即不合格率 。 在产品中随机抽n件做检查,发现k件不合格品的概率为 ,k=0,1,2,...,min{n,M}。 Numpy中的超几何分布 Numpy...

    超几何分布

    产品抽样检查中经常遇到一类实际问题,假定在N件产品中有M件不合格品,即不合格率
    在产品中随机抽n件做检查,发现k件不合格品的概率
    ,k=0,1,2,...,min{n,M}。

    Numpy中的超几何分布

    Numpy的random包中提供了产生超几何分布结果的函数:

      numpy.random.hyermetric(ngoog,nbad,nsample,size=None)

    https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.hypergeometric.html

    • ngood: 做出好的选择的数量,相当于上面的N件产品中的合格品,即N-M;
    • nbad:做出坏的选择的数量,相当于上面的M件合格品;
    • nsample:每次的采样数;
    • size:采样的组数,即试验组数.

    上面的hypermetric()函数返回一组size大小的数组,数组中的每个数是在一组采样中合格产品的数量,即上面的k.

    下面我们用一个具体的做游戏的例子来说明这个函数的用法:

    一个袋子中有20个球,其中有1个黑球,别的都是红球.从袋子中每次取3个球,如果3个都是红球加1分,如果其中有一个黑球就减4分.我们用程序来模拟100次试验以后的得分情况,并绘制出得分的变化图.

    (为了方便,以下代码是在ipython -pylab运行的)

    1 使用hypermetric()初始化100组试验的结果,并初始化一个分数数组.

    # 初始化一个计分板
    points = zeros(100)
    # 使用超几何分布初始化每次实验结果
    # outcomes数组中的每一个项都是一次试验中取得红球的个数
    # 注意第一个参数是红球个数,即为19而不是20
    outcomes = random.hypermetric(19,1,3,size = len(points))

    2 根据每一次模拟试验的结果来设置分数

    for i in range(len(points)):
        if outcomes[i] == 3:
            points[i] = points[i-1] + 1
        elif outcomes[i] == 2:
            points[i] = points[i-1] - 4
        else:
            print(outcomes[i])

    3 利用matplotlib绘制分数变化的曲线

    plt.plot(np.arange(len(points)),points)
    plt.title("Game SImulation")
    plt.xlabel('# Rounds')
    plt.ylabel('Score')
    plt.grid()
    plt.show()

    4 分数变化的曲线如下

     

    转载于:https://www.cnblogs.com/mzct123/p/8686719.html

    展开全文
  • 均匀分布的随机数据的产生函数rand功能 生成元素均匀分布于(0,1)上的向量与矩阵。用法Y = rand(n) %返回n*n阶的方阵Y,其元素均匀分布于区间(0,1)。若n不是一标量,在显示一出错信息。Y = rand(m,n),或Y = rand([m ...
  • Matlab随机数生成函数betarnd 贝塔分布的随机数生成器binornd 二项分布的随机数生成器chi2rnd 卡方分布的随机数生成器exprnd 指数分布的随机数...生成器gamrnd 伽玛分布的随机数生成器geornd 几何分布随机数生成...
  • 包含六种随机数产生方案及相关matlab代码的实现,均匀分布,泊松分布,几何分布,二项分布,指数分布,正态分布
  • matlab产生随机数

    2021-04-21 12:16:55
    1、rand(n):生成0到1之间的n阶随机数方阵 rand(m,n):生成0到1之间的mn的随机数矩阵 (现成的函数)另外:Matlab随机数生成函数betarnd 贝塔分布随机数生成器 binornd 二项分布随机数生成器 chi2rnd 卡方分布的...
  • R语言使用rhyper函数生成符合超几何分布随机数、使用plot函数可视化符合超几何分布随机数(Hypergeometric Distribution)
  • 1.2 概率分布概率分布=随机变量+概率+分布(在统计图中的形状);Python实现:科学计算SciPy的stats模块;#anaconda prompt下安装scipy包 conda install scipy #导入包,统计计算包的统计模块 import scipy.stats as...
  • 伯努利、指数、几何、泊松等几种不同分布随机数生成器及分析。
  • 这节介绍常用分布。分常用离散分布和常用连续分布两类。常用离散分布二项分布(Binomial Distribution)记 为 重伯努利试验中成功的事件(记为 )的次数,则 服从二项分布。记 为事件 发生的概率, 的分布列为: 记 ...
  • 本文将介绍常见分布随机数如何产生以及一些简单的统计作图。 一、常见分布随机数的产生 随机数是专门的随机试验的结果。在统计学的不同技术中需要使用随机数,比如在从统计总体中抽取有代表性的样本的时候。而...
  • matlab中rand和randn是产生随机数的命令,链接x=rand(1,N) 产生(0,1)区间均匀分布的长度为N的随机信号,设置随机种子 rand('seed', 123);x=randn(1,N)产生长度为N且具有零均值和单位方差的正态分布的随机信号,设置...
  • 生成具有各种分布随机数。 状态 工作正在进行中 特征 公开具有适当范围缩小的快速整数随机生成器 对所有发行版使用最新颖,最快速的算法 所有输入参数均有效且不会引发异常 整数名称空间中的所有分布(Randomi32 /...
  • 随机数种子RandomStateRandomStateexposes anumber of methods for generating random numbersdrawn from a varietyof probability distributions.使用示例prng = np.random.RandomState(123456789)#定义局部种子...
  • MATLAB生成服从各种分布随机数函数

    万次阅读 多人点赞 2019-03-28 18:50:50
    MATLAB随机数生成函数有两种形式,一种是形如***rnd,比如(unifrnd,binornd,exprnd)等,一种就是用一个统一的函数random(‘name’,...),利用不同的 name生成不同的分布随机数 在matlab中,有两个工具箱,...
  • 实验报告1:常见概率分布概率计算的软件实现 【实验目的】 1.二项分布、泊松分布概率计算的软件实现 2.指数分布、正态分布概率计算的软件实现 【实验题目】 1.某一汽车站,每天有大量汽车通过,设每辆车在一天的某段...
  • MATLAB产生随机数

    2021-04-18 05:56:25
    (1)用计算机产生的是... 而用数学方法产生最适合计算机 , 这就是周期有限 , 易重复的 ” 伪随机数 ”matlab里和随机数有关的函数:betarnd 贝塔分布随机数生成器binornd 二项分布随机数生成器chi2rnd 卡方分布...
  • numpy教程:随机数模块numpy.random

    千次阅读 2021-01-13 09:11:40
    随机数种子RandomStateRandomStateexposes a number of methods for generating random numbersdrawn from a variety of probability distributions.使用示例prng = np.random.RandomState(123456789) #定义局部种子...
  • 普通随机数 random.randint 返回给定范围内的随机整数 # 只给一个参数时,范围是[0,10) random.randint(10) 2 # 指定low,high:[0,10) random.randint(0,10) 5 # 指定size,可扩充至多维 random.randint(0,10,...
  • % hygernd 超几何分布随机数生成器  % lognrnd 对数正态分布的随机数生成器  % nbinrnd 负二项分布的随机数生成器  % ncfrnd 非中心f分布的随机数生成器  % nctrnd 非中心t分布的随机数生成器  % ncx2...
  • 高斯分布随机数生成randn(a):生成一个a*a的标准高斯(正态)分布的随机阵。randn(a,b)或者randn([a,b]): 生成一个a行b列的标准高斯分布的随机阵。m+sqrt(n)*randn(a):生成一个均值为m,方差为n的满足高斯分布的a*a随机...
  • 超几何随机变量 创建一个或数组,其中填充了来自的。 想象一个场景,一个holding抱着一个黑色和白色的球。 令m为the中白球的数量, n为黑球... 如果未提供dims参数,则该函数从超几何分布返回一个随机抽奖。 var out
  • 该程序用来检验monte carlo随机数分布是否满足随机性要求,
  • 一、概率分布1、随机变量随机变量是指一个量化随机事件的函数,它将随机事件的每一个可能出现的试验结果赋予了一个数字。随机变量又分为离散随机变量和连续随机变量。2、概率分布概率分布=随机变量+概率+分布在...
  • Problem Description Garfield has three piles of balls, each pile has unique color of following: yellow, blue, and red. Now we also know Garfield has Y yellow balls, B blue balls, and R red balls....
  • 使用VC ++程序生成任意分布随机数,类似示波器的演示代码,基于几何直观面积的方法,以正态分布随机数的产生为例讨论了任意分布随机数的产生方法,界面做的不错,希望大家喜欢。
  • 老是记不住各种分布及其意义,每次用时,回查各个课本资料也很麻烦,一些...先介绍下在R中的使用随机数,密度函数,分布函数,分位函数的命令,使用正态分布为示例。以下不做说明均是使用 R 语言。随机数从服从某...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,583
精华内容 1,833
关键字:

几何分布随机数