数学杂谈:限制条件下的均匀分布考察

news2024/12/26 21:35:13
  • 数学杂谈:限制条件下的均匀分布考察

1. 问题描述

假设 x 1 , . . . , x n x_1, ..., x_n x1,...,xn均为 0 ∼ 1 0 \sim 1 01上的均匀分布,且满足限制条件:

x 1 + x 2 + . . . + x n = 1 x_1 + x_2 + ... + x_n = 1 x1+x2+...+xn=1

求此时 x i x_i xi的真实分布表达式。

2. 问题解答

1. 答案

限制条件下 x x x的密度函数表达式如下:

f n ( x ) = ( n − 1 ) ⋅ ( 1 − x ) n − 2 f_n(x) = (n-1) \cdot (1-x)^{n-2} fn(x)=(n1)(1x)n2

2. 解析

我们可以快速地给出推导公式为:

f n ( x ) = ∫ 0 1 − x d t 1 ∫ 0 1 − x − t 1 d t 2 . . . ∫ 0 1 − x − t 1 − . . . − t n − 3 d t n − 2 ∫ 0 1 d t 1 ∫ 0 1 − t 1 d t 2 . . . ∫ 0 1 − t 1 − . . . − t n − 2 d t n − 1 f_n(x) = \frac{\int_{0}^{1-x}dt_1 \int_{0}^{1-x-t_1}dt_2 ... \int_{0}^{1-x-t_1-...-t_{n-3}}dt_{n-2}}{\int_{0}^{1}dt_1 \int_{0}^{1-t_1}dt_2 ... \int_{0}^{1-t_1-...-t_{n-2}}dt_{n-1}} fn(x)=01dt101t1dt2...01t1...tn2dtn101xdt101xt1dt2...01xt1...tn3dtn2

g n ( x ) = ∫ 0 1 − x d t 1 ∫ 0 1 − x − t 1 d t 2 . . . ∫ 0 1 − x − t 1 − . . . − t n − 1 d t n g_n(x) = \int_{0}^{1-x}dt_1 \int_{0}^{1-x-t_1}dt_2 ... \int_{0}^{1-x-t_1-...-t_{n-1}}dt_{n} gn(x)=01xdt101xt1dt2...01xt1...tn1dtn

则我们有:

f n ( x ) = g n − 2 ( x ) / g n − 1 ( 0 ) f_n(x) = g_{n-2}(x) / g_{n-1}(0) fn(x)=gn2(x)/gn1(0)

g n ( x ) g_{n}(x) gn(x)我们可以通过递归关系 g n ( x ) = ∫ 0 1 − x g n − 1 ( 1 − x − t 1 ) d t 1 g_n(x) = \int_{0}^{1-x} g_{n-1}(1-x-t_1) dt_1 gn(x)=01xgn1(1xt1)dt1快速计算得到:

g n ( x ) = 1 n ! ( 1 − x ) n g_n(x) = \frac{1}{n!}(1-x)^{n} gn(x)=n!1(1x)n

因此,我们即可解得:

f n ( x ) = ( n − 1 ) ⋅ ( 1 − x ) n − 2 f_n(x) = (n-1) \cdot (1-x)^{n-2} fn(x)=(n1)(1x)n2

特别地,积分即可快速得到,某一个元素要取值得到至少 τ \tau τ的概率为: P ( x ≥ τ ) = ( 1 − τ ) n − 1 P(x \geq \tau) = (1-\tau)^{n-1} P(xτ)=(1τ)n1

3. 蒙特卡洛模拟

如果我们要对上述结论进行验证,我们可以使用蒙特卡洛模拟来对上述结论进行验证。

我们直接给出代码如下:

import numpy as np
from random import random
from matplotlib import pyplot as plt

def monte_carlo_simulate(n=5, N=10000):
    s = []
    for _ in range(N):
        while True:
            tmp = [random() for _ in range(n-1)]
            if sum(tmp) <= 1:
                s.append(1 - sum(tmp))
                break
    return s

def show_simulate(n=5, N=10000):
    x = np.linspace(0, 1, num=100)
    y = (n-1) * np.pow(1-x, n-2)
    s = monte_carlo_simulate(n=n, N=N)
    plt.figure(figsize=(15, 7))
    plt.hist(s, bins=100, range=[0, 1], density=True)
    plt.plot(x, y)
    plt.show()
    return

show_simulate(n=5, N=10000)

可以看到:

在这里插入图片描述

进一步的,如果我们要快速地获取符合 x x x分布的随机数,也只需要做如下构造即可:

import math
from random import random

def random(k=5):
    x = random()
    z = 1 - math.pow(z, 1/(k-1))
    return z

3. 离散情况延拓

下面,我们稍微拓展一下,如果 x x x不连续,是离散的情况下,那么结果如何。

我们修改问题为:

假设我们有 k k k个均匀分布的离散项,取值范围为 0 ∼ N 0 \sim N 0N,且满足限制条件 x 1 + x 2 + . . . x k = N x_1 + x_2 + ... x_k = N x1+x2+...xk=N,那么其中 x 1 x_1 x1不小于 M M M的概率是多少。

这个问题其实感觉比上述连续的情况还要简单一些,我们只需要将其视为排列组合问题即可进行解答,即视为分堆问题,将 N N N个元素分到 k k k个堆当中,令其中某一个堆中的元素个数不少于 M M M

1. 正整数的情况

首先,我们来考察一下最简单的情况,即要求每个堆中至少有一个元素,且 N , M N,M N,M均为有限整数。

此时,我们要做的事实上就是在 N N N个元素所构成的 N − 1 N-1 N1个间隔位置当中放入 k − 1 k-1 k1个挡板。不妨设要求的堆就是第一个堆,即第一个堆的元素个数不少于 M M M个,此时,符合要求的摆放方式必然要求第一个挡板的出现位置必须要在第 M M M个间隔或者之后。

因此,我们可以得到答案为:

P ( x 1 ≥ M ) = C N − M k − 1 C N − 1 k − 1 P(x_1 \geq M) = \frac{C_{N-M}^{k-1}}{C_{N-1}^{k-1}} P(x1M)=CN1k1CNMk1

2. 整数的情况

对于整数的情况,其结果本质上是与之前正数的情况完全相同的,唯一的区别在于,挡板可以相邻,因此,我们事实上就是将 N N N个元素与 k − 1 k-1 k1个挡板合在一起进行排列组合。

同样的,我们要求第一个堆当中至少包含 M M M个元素,此时我们可以仿上求得答案为:

P ( x 1 ≥ M ) = C N − M + k − 1 k − 1 C N + k − 1 k − 1 P(x_1 \geq M) = \frac{C^{k-1}_{N-M+k-1}}{C^{k-1}_{N+k-1}} P(x1M)=CN+k1k1CNM+k1k1

3. N → ∞ N \to \infty N的情况

最后,我们考察一下 N → ∞ N \to \infty N的情况,令 N → ∞ N \to \infty N,且有 l i m N → ∞ M N = τ \mathop{lim}\limits_{N\to \infty} \frac{M}{N} = \tau NlimNM=τ

此时,上述两个式子的解收敛为:

l i m N → ∞ P ( x 1 ≥ M ) = ( 1 − τ ) k − 1 \mathop{lim}\limits_{N\to \infty} P(x_1 \geq M) = (1-\tau)^{k-1} NlimP(x1M)=(1τ)k1

此结果就是之前讨论的连续情况下的解。

4. 误区分析

这里,其实有一个坑要注意一下,就是如果你在模拟的时候这么写作函数:

def simulate(n=5, N=10000):
    s = []
    for _ in range(N):
        t = 1.0
        for _ in range(n-1):
            t -= t * random()
        s.append(t)
    return s

此时,采样得到的 n n n个点事实上也满足 ∑ i = 1 n x i = 1 \sum\limits_{i=1}^{n} x_i = 1 i=1nxi=1,但是如果我们将 x i x_i xi的分布画出来的话,可以注意到, x i x_i xi的分布与 i i i的取值有关,且 i i i越大,采样得到的 x i x_i xi的均值越小。

我们以 n = 5 n=5 n=5为例,可以绘制得到曲线如下:

在这里插入图片描述

这乍看有点迷糊,其实仔细想想的话你会注意到这里的 x i x_i xi的取值概率是与开始的题目描述不一致的,原本要求的概率应该是:

P ( x i = x ∣ ∑ i = 1 n x i = 1 ) P(x_i=x | \sum\limits_{i=1}^{n}x_i=1) P(xi=xi=1nxi=1)

而这里模拟的概率事实上是:

P ( x i = x ∣ ∑ j = 1 i − 1 x j ≤ 1 − x ) P(x_i=x | \sum\limits_{j=1}^{i-1}x_j \leq 1-x) P(xi=xj=1i1xj1x)

因此就会出现两种模拟的结果不一致的情况。

而同样的,如果有读者感兴趣的话,后者事实上我们也可以很轻松地求出其概率密度函数为:

f n ( x i = x ) = g i − 1 ( x ) g i ( 0 ) = i × ( 1 − x ) i − 1 f_{n}(x_i = x) = \frac{g_{i-1}(x)}{g_i(0)} = i \times(1-x)^{i-1} fn(xi=x)=gi(0)gi1(x)=i×(1x)i1

需要注意的是,这里的 i < n i < n i<n,当 i = n i = n i=n时,此时其分布与 i = n − 1 i=n-1 i=n1时相同,多多少少有那么一点点特殊。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/20956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

思科防火墙解析(ASA)

♥️作者&#xff1a;小刘在C站 ♥️每天分享云计算网络运维课堂笔记&#xff0c;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放。 目录 一. 防火墙的分类&#xff0c; 二. 发展史&#xff0c; 三. 思科防火墙技术应用的…

[附源码]java毕业设计铁东社区新冠病毒疫苗接种管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

山东大学线性代数-4-线性方程组

目录 4.1 齐次线性方程组 4.1.1 齐次线性方程组的定义 4.1.2 方程组的三种形式 4.1.3 齐次线性方程组解的性质 4.1.4 行最简形矩阵 4.1.5 两个例题 4.2 基础解系的求法 4.2.1 求解步骤 4.2.2 例题 4.3 非齐次线性方程组 4.3.1 相关概念 4.3.2 非齐次线性方程组的有…

编译安装php扩展

1. 切换到要安装的扩展的目录下 2. 执行phpize(在扩展目录里 可以写自己电脑里的绝对路径) ../../bin/phpize 3. 然后执行 ./configure ./configure 4. 没问题的话 make 然后 make install make 运行之后出现下图就说明可以下一步了 运行 make install make install 出现…

GitHub使用教程

目录概要一. 下载git二. 初始化本地仓库设置签名查看状态&#xff0c;三大分区&#xff0c;添加&#xff0c;提交操作查看状态&#xff0c;三大分区添加查看提交历史查看提交历史的其他指令如何进行版本切换基于索引值基于^符号进行版本切换基于~符号进行版本切换reset指令的参…

【OS】新国立nus操作系统知识点(中文版)

文章目录1. Introduction to OS本章涉及1.1 什么是操作系统&#xff1f;1.2 为什么我们需要操作系统&#xff1f;抽象 Abstraction控制程序Summary1.3 现代操作系统分类1.4 操作系统结构OS结构OS是一个程序OS的实现单片OS Monolithic OS微核OS Microkernel虚拟机 Virtual Machi…

22071.11.20作业

在串口工具进行输入&#xff1a; echo 1 > /dev/myled0 ---->led1灯点亮 echo 0 > /dev/myled0 ---->led1灯熄灭 echo 1 > /dev/myled1 ---->led2灯点亮 echo 0 > /dev/myled1 ---->led2灯熄灭 echo 1 > /dev/myled2 ----&g…

项目实战——创建个人中心页面(上)

ps&#xff1a;本篇文章不涉及复杂代码编写&#xff0c;放心食用~~ 目录 一、整体框架 二、创建新表 bot 三、实现后端API 1、连接数据库和后端 2、实现 增删改查 API 1、增加一个 Bot 2、删除一个 Bot 3、修改一个 Bot 4、查询 Bot 列表 一、整体框架 二、创建新表 bo…

攻防世界nice_bgm

nice_bgm 题目描述&#xff1a;我拿出自己的私密音乐来和你分享&#xff0c;一起享受快乐吧 题目环境&#xff1a;https://download.csdn.net/download/m0_59188912/87097729 private bit隐写&#xff0c;直接用python脚本跑。 脚本源码&#xff1a; import re import binascii…

光线追踪与全域光渲染keyshot中文

keyshot可以快速、轻松地创神奇的渲染和动画效果&#xff0c;支持Mac和PC上的多种3D文件格式。它可以实时查看效果&#xff0c;使用方便&#xff0c;可以更快地创造视觉效果&#xff1b;材料超越了材料的外观&#xff0c;为高质量的视觉效果提供了科学准确的性能&#xff0c;使…

babel:无法将“babel“项目识别问题

全局安装babel命令 npm install --global babel-cli 局部安装babel命令 npm install --save-dev babel-cli 你安装后可能会出现的问题&#xff1a; 可能存在原因&#xff1a; ① 权限不够。 ②前面需改了node的global配置 --------------------------------------------…

i.MX 6ULL 驱动开发 二十三:UART

一、UART 协议 UART详解_sternlycore的博客-CSDN博客 二、UART 和 TTY 关系 基于Linux的tty架构及UART驱动详解 - 一口Linux - 博客园 (cnblogs.com) 三、Linux UART 驱动框架中重要对象 1、UART 驱动 struct uart_driver {struct module *owner;const char *driver_na…

python自动化之——获取钉钉群所有人的昵称

python自动化之——获取钉钉群所有人的昵称 楔子 精神小伙沙大柱入职了一家新公司&#xff0c;该公司所有成员都在钉钉群。 一天&#xff0c;沙大柱的上级沙小牛布置了任务&#xff1a;大柱&#xff0c;你把群里所有人的名称导出来吧&#xff0c;我不会操作。 大柱表示&…

【PyCharm中PIL/Pillow的安装】

&#x1f935;‍♂️ 个人主页老虎也淘气 个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f44d;&#x1f3fb; 收藏…

操作系统 - 进程

文章目录操作系统1.操作系统的定位2.进程2.1 PCB的一些属性2.3 进程调度相关属性 &#xff1a;本文小结操作系统 操作系统是一个软件   用途 &#xff1a;管理   1.对下 &#xff1a;管理硬键设备 2.对上 : 为软件提供稳定的运行环境 进一步来说 &#xff1a; 操作系统是软件…

多重背包问题

多重背包也是 0-1 背包的一个变式。与 0-1 背包的区别在于每种物品有ki个&#xff0c;而非一个。 一个很朴素的想法就是&#xff1a;把「每种物品选ki次」等价转换为「有ki个相同的物品&#xff0c;每个物品选一次」。这样就转换成了一个 0-1 背包模型&#xff0c;套用上文所述…

智慧民政解决方案-最新全套文件

智慧民政解决方案-最新全套文件一、建设背景二、建设思路三、建设方案四、获取 - 智慧民政全套最新解决方案合集一、建设背景 在城市信息化建设的大浪潮中&#xff0c;民政信息化建设关系就业、收入、教育、文体、健康、养老和社保等民间社会事务的管理与服务&#xff0c;在智…

Kettle运行Spoon.bat出现命令框然后闪退【BUG已解决】

文章目录项目场景&#xff1a;问题描述原因分析&#xff1a;解决方案&#xff1a;项目场景&#xff1a; 在内科大数据处理课程中&#xff0c;要求安装Kettle。 Kettle&#xff1a; Pentaho Data Integration以Java开发&#xff0c;支持跨平台运行&#xff0c;其特性包括&#…

【算法入门搜索法】走迷宫|单源最短路径1

✅作者简介&#xff1a;热爱后端语言的大学生&#xff0c;CSDN内容合伙人 ✨精品专栏&#xff1a;C面向对象 &#x1f525;系列专栏&#xff1a;算法百炼成神 文章目录&#x1f525;前言1、AB20 走迷宫1.1、解题思路1.2、代码实现与注释2、AB19 【模板】单源最短路12.1、单源最…

CMake中while/continue/break的使用

CMake中的while命令用于在条件为true时评估(evaluate)一组命令&#xff0c;其格式如下&#xff1a; while(<condition>)<commands> endwhile() 在while和匹配的endwhile之间的所有命令都被记录下来而不被调用。一旦评估了endwhile&#xff0c;只要<condition&g…