• 概率论与数据统计学习:随机变量(一)——知识总结与C语言案例实现


    Hello,大家好

    这是第三期概率论与数理统计的学习,我将用这篇博客来整理我所学习的内容,及用C语言去做例题的过程。
    在这里插入图片描述
    那么这一期要学习的是随机变量的定义离散型随机变量。还是一样,先总结知识点在再进行C语言案例实现。在这里插入图片描述

    💦 随机变量的定义

    啥是随机变量?

    我们常把随机试验的结果与实数对应起来,也就是把随机试验的结果进行数量化。那么什么又是数量化呢?不要着急,先给出随机变量的定义👇:

    🌱 定义:设 E E E是随机试验, Ω \Omega Ω是其样本空间。如果对于每个 w ∈ Ω w \in \Omega wΩ,总有一个实数 X ( w ) X(w) X(w)与之对应,则称 Ω \Omega Ω上的实值函数 X ( w ) X(w) X(w) E E E的一个随机变量。

    从定义可以知道,随机变量是一个函数,它的自变量是随机试验的结果(也就是样本点)。那么随机试验结果的数量化就是将这个结果用某个具体的值来替代。例如,我们进行一次掷硬币的试验,它的结果只有正面朝上( w 1 w_{1} w1)或反面朝上( w 2 w_{2} w2),然后再用1来表示正面朝上,0表示反面朝上,于是就有: X ( w 1 ) = 1 , X ( w 2 ) = 0 X(w_{1})=1,X(w_{2})=0 X(w1)=1,X(w2)=0,这就是所谓的数量化。

    如果将 X ( w ) X(w) X(w)简记为 X X X,且试验的所有结果( w 1 , w 2 , . . . , w n w_{1},w_{2},...,w_{n} w1,w2,...,wn)都能用一个具体的实数( X ( w 1 ) , X ( w 2 ) , . . , X ( w n ) X(w_{1}),X(w_{2}),..,X(w_{n}) X(w1),X(w2),..,X(wn))来表示,则可用随机变量 X X X来描述随机事件。要注意 X X X是表示一个函数!!!!

    下面再举例说明:

    例如掷硬币中,可用 X = 1 X=1 X=1表示 w 1 w_{1} w1:正面朝上,用 X = 0 X=0 X=0表示 w 2 w_{2} w2:反面朝上。那么 P ( X = 1 ) P(X=1) P(X=1)就表示正面朝上的概率, P ( X = 0 ) P(X=0) P(X=0)表示反面朝上的概率。

    总结:之前我们都是用语言来具体描述一个试验的结果(也就是一个随机事件),引入随机变量后我们就可以用一个具体的值来表示一个随机事件(其实也不一定是具体的值,例如掷骰子中, X ≤ 4 X\leq4 X4就可以表示掷到的点数小于4这一事件)。

    💦 离散型随机变量

    随机变量也有很多种类型,常见的随机变量,根据其可能取值的整体情况,分为两大类:离散型连续型。那么我们首先介绍介绍离散型~

    ☁️ 离散型随机变量

    离散离散,啥是离散?科学的解释即连续的反义词就是离散,离散就是不连续。

    那么对于随机变量 X X X,如果它只可能取有限个可列无限个(虽然是无限个,但可以一个一个地排列起来)值,则称其为离散型随机变量。

    这样说得我都有点摸不着头脑了,还是举几个例子👇:

    1. 掷硬币中,随机变量 X X X只可能取0和1两个值,所以, X X X是离散型随机变量。
    2. 电梯在一年中发生故障的次数,随机变量 X X X只可能取0,1,2,…无限个,但是可以一个一个地排列起来,所以 X X X是离散型随机变量。

    那么再举一个连续性随机变量的例子作为对比:

    例如,灯泡的使用寿命,对于随机变量 X X X,它的取值不能一个一个地排列,而是充满了一个区间,所以 X X X是连续性随机变量。

    ☁️ 离散型随机变量的概率分布

    设离散型随机变量 X X X所有可能取的值为 x 1 , x 2 , . . . x_{1},x_{2},... x1,x2,...

    那么有 P { X = x k } = p k , k = 1 , 2 , . . . P\{X=x_{k}\}=p_{k},k=1,2,... P{X=xk}=pk,k=1,2,...
    这些 p k p_{k} pk满足:
    { p k ≥ 0 , k = 1 , 2 , . . . ∑ k = 1 ∞ p k = 1 {pk0,k=1,2,...k=1pk=1 {pk0,k=1,2,...k=1pk=1

    概率分布体现了随机变量取各个可能值得概率的分布情况。

    ☁️ 常见的离散型随机变量的概率分布

    ☀️ 两点分布

    若随机变量 X X X只可能取0或1两个值,其概率分布为
    P { X = 1 } = p P\{X=1\}=p P{X=1}=p
    P { X = 0 } = q P\{X=0\}=q P{X=0}=q
    其中, 0 < p < 1 , q = 1 − p 00<p<1,q=1p,则称 X X X服从参数为p的两点分布或(0-1)分布,记为 X X X~ B ( 1 , p ) B(1,p) B(1,p)

    ☀️ 二项分布

    首先记住,二项分布就是一次试验只有两种结果,将这个试验进行n次。

    将试验 E E E在相同条件下重复进行n次,每次的结果都相互独立,即每次试验结果出现的概率都不依赖于其它各次试验的结果,则称这n次试验是相互独立的。

    设试验 E E E只有两个结果: A A A A ‾ \overline A A,记 P ( A ) = p , P ( A ‾ ) = 1 − p , 0 < p < 1 P(A)=p,P(\overline A)=1-p,0P(A)=p,P(A)=1p,0<p<1,将试验 E E E独立地重复进行n次,则称这n次独立重复的试验为n次伯努利试验,简称伯努利试验

    下面给出二项式的公式: P { X = k } = C n k p k ( 1 − p ) n − k P\{X=k\}=C_{n}^kp^k(1-p)^{n-k} P{X=k}=Cnkpk(1p)nk
    该公式的意义就是:进行n次试验,有 k k k次结果为 A A A的概率。

    记为 X X X~ B ( n , p ) B(n,p) B(n,p)

    ☀️ 泊松分布

    如果随机变量 X X X的概率分布为: P { X = k } = λ k k ! e − λ , k = 0 , 1 , 2 P\{X=k\}=\frac{\lambda^k}{k!}e^{-\lambda},k=0,1,2 P{X=k}=k!λkeλ,k=0,1,2
    那么就称随机变量 X X X服从参数为 λ \lambda λ的播=泊松分布,记为 X X X~ P ( λ ) P(\lambda) P(λ)

    λ \lambda λ是啥?它是一个常数,经常题目中会给出。这里就不多做讨论了,下面开始C语言案例的实现!!!!
    在这里插入图片描述

    💦 C语言案例实现

    在做题之前呢,首先写出要三种常见的离散型随机变量的概率分布的算法,别怕难!你难我也难
    在这里插入图片描述
    那么首先是两点分布(Two-Point Distrubution),可别看它简单啊,一样要动手写一些👇:

    // m denotes the one of the two results ——m代表两种结果的一种结果
    // n denotes the another result ——n代表两种结果中的另一种
    void TPDistrbution(float m,float n)
    {
    	// p denotes the posibility of m; ——p代表m发生的概率
    	// q denotes the posibilitu of n; ——q代表n发生的概率,也就是1-p
    	float p = m / (m + n);
    	float q = n / (m + n);
    	printf("The posibility of m is :%f.\n",p);
    	printf("The posibility of n is :%f.",q);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    然后呢就是二项分布(Binary Distrubution)👇:

    #include 
    // combined algorithms ——组合算法
    // it means the results of select m items in n items ——从n个中选m个的可能性
    int Combination(int n,int m)
    {
    	int sum = 1,p = 1;
    	for( ; m > 0 ; m--)
    	{
    		sum *= n--;
    		p *= m;
    	}
    	return sum/p;
    }
    
    // in n tests,the result you expect will happen k times ——n次试验中,你期待的结果发生了k次
    // and in one test,the posibility of it is p ——一次试验中,你期待的结果发生的概率为p
    float BinDistrubution(int n,int k,float p)
    {
    	float _P;
    	_P = Combination(n,k);
    	for(int i = 0 ; i < k ; i++)
    		_P *= p;
    	for(int i = 0 ; i < n - k ; i++)
    		_P *= (1 - p);
    	return _P;
    }
    
    int main()
    {
    	// in five shooting tests,calculate the the posibility that you only make two shots ——在5次射击中,求你只射中两次的概率
    	// the posibility of every time you make shot is 0.6 ———你每一次试验的概率为0.6
    	float P = BinDistrubution(5,2,0.6);
    	printf("%f",P);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    紧接着就是那个啥泊松分布,不过这个泊松分布设计到了自然数 e e e,它的后面可是有好多位小数的啊
    在这里插入图片描述
    不过咱自然不能服输,用C语言将 e e e求出来!

    首先呢,我们要知道 e e e的计算公式: e = ∑ n = 0 ∞ 1 n ! e=\sum_{n=0}^\infty\frac{1}{n!} e=n=0n!1
    同时我们也不能取 e e e小数点后面的全部哇,所以只需要精确到小数点后6位即可。

    #include 
    float Figure_e(int n)
    {
    	float e = 1;
    	int sum = 1;
    	for(int i = 1 ; i <= n ; i++)
    	{
    		sum *= i;
    		e += 1.0 / sum;
    	}
    	return e;
    }
    
    int main()
    {
    	float a = Figure_e(20);
    	printf("%.6f",a);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述
    好!
    在这里插入图片描述
    go on!
    泊松分布(Poisson Distrubution)👇:

    #include 
    #include 
    float Figure_e()
    {
    	float e = 1;
    	int sum = 1;
    	for(int i = 1 ; i <= 20 ; i++)
    	{
    		sum *= i;
    		e += 1.0 / sum;
    	}
    	return e;
    }
    
    // w denotes the parameter,and k denotes the result you expect ——w表示参数λ,k表示你所期待的结果
    float PoiDistrubution(float w,int k)
    {
    	// figure out e first ——先把e算出来
    	float e = Figure_e();
    	// _P denotes the posibility of the result that you expect to happen ——_P表示你所期望的结果发生的概率
    	float _P;
    	// first figure out w to the k ——先将参数λ的k次方计算出来
    	if(k == 0)
    		_P = 1;
    	else
    		_P = pow(w,k);
    	// cause w might be less than 1,so we better use the library function ——因为λ可能小于1,所以我们用库函数来求e的负λ次方
    	_P *= 1.0 / pow(e,w);
    	// according to the poisson formula,we need to divide by k! ——根据泊松公式,我们还需要除以k的阶乘 
    	int sum = 1;
    	for(int i = 1 ; i <= k ; i++)
    	{
    		sum *= i;
    	}
    	_P /= sum;
    	return _P;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    各种分布的代码有了,开始实战。

    1. 电子线路中装有两个并联继电器,假设这两个继电器是否接通具有随机性,且彼此独立。已知每个继电器接通的概率为0.8,记 X X X为线路中接通的继电器的个数。1)求 X X X的概率分布。2)线路接通的概率。

    1)

    #include 
    int main()
    {
    	// A1 denotes the possibility  of one of the relays was plugged on,and A2 denotes the posibility of another was plugged.
    	// A1表示其中一个继电器被接通的概率,A2表示另一个继电器被接通的概率
    	float A1,A2;
    	// p denotes the posibility that the relay was plugged on ——p表示继电器被接通的概率
    	float p = 0.8;
    	// use an array to store the possibility distrubution ——用一个数组来存储概率分布
    	float a[3] = {0};
    	// use poss to record the possbility every time we have judged if the relay was plugged on ——用poss来记录每次判断一个继电器被接通或未被接通的概率
    	float poss = 1;
    	// 0 denotes the relay wasn't plugged ——0表示继电器未被接通
    	// 1 denotes the relay was plugged ——1表示继电器被接通
    	for(int i = 0 ; i < 2 ; i++)
    	{
    		i == 0 ? (poss *= 1 - p) : (poss *= p);
    		for(int j = 0 ; j < 2 ; j++)
    		{
    			j == 0 ? (poss *= 1 - p) : (poss *= p);
    			a[i + j] += poss;
    			j == 0 ? (poss /= 1 - p) : (poss /= p);
    		}
    		i == 0 ? (poss /= 1 - p) : (poss /= p);
    	}
    	for(int i = 0 ; i < 3 ; i++)
    		printf("X = %d,p%d = %.2f\n",i,i,a[i]);
    	return 0; 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    在这里插入图片描述
    2)分析:什么情况线路被接通?因为这两个继电器是并联的,所以任意一个被接通整个线路就可以被接通。也就是说我们排除它不被接通的情况即可。当然我们也可以求它被接通的所有情况(只需对上述代码稍作改动)。这里的做法是求出它被连通的所有情况的概率总和。

    #include 
    int main()
    {
    	float A1,A2;
    	float p = 0.8;
    	float poss1 = 1,poss2 = 0;
    	for(int i = 0 ; i < 2 ; i++)
    	{
    		i == 0 ? (poss1 *= 1 - p) : (poss1 *= p);
    		for(int j = 0 ; j < 2 ; j++)
    		{	
    			j == 0 ? (poss1 *= 1 - p) : (poss1 *= p);
    			if(i + j >= 1)
    				poss2 += poss1;
    			j == 0 ? (poss1 /= 1 - p) : (poss1 /= p);
    		}
    		i == 0 ? (poss1 /= 1 - p) : (poss1 /= p);
    	}
    	printf("The possbility of the incident X>=1 is :%.2f.",poss2);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在这里插入图片描述

    1. 设每天每辆出租车出现故障的概率为0.02,某出租汽车公司共有出租车400辆,试求一天内没有出租车出现故障的概率。

    分析:相当于是将观察辆出租车一天是否出现故障看成一次试验。每辆出租车是否出现故障与其它出租车故障无关。也就是说这个题是一个二项分布。

    int main()
    {
    	// p denotes the possibility that the car breaks down ——p表示一辆出租车出现故障的概率
    	float p = 0.02;
    	printf("The possibility of the incident that no cars break down is :%f",BinDistrubution(400,0,p));
    	return 0; 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    1. 某一城市每天发生火灾的次数 X X X服从参数 λ = 0.8 \lambda=0.8 λ=0.8的泊松分布,求城市一天内发生3次或3次以上火灾的概率。

    分析:因为它一天内发生火灾的次数没有上限,所以我们最好是排除它一天发生三次火灾一下的概率。

    int main()
    {
    	float w = 0.8;
    	float poss = 1 - PoiDistrubution(w,0) - PoiDistrubution(w,1) - PoiDistrubution(w,2);
    	printf("The possibility of the incident X>=3 is : %f.",poss);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    这期学习到此结束~~下期再见,各位一起加油!
    在这里插入图片描述

  • 相关阅读:
    全网最详细,软件测试-性能测试岗面试题总结(大全)
    【MAPBOX基础功能】08、mapbox绘制点图层并进行添加、删除、更新、显隐等操作
    Spring学习③__Bean管理
    Git Submodule 全流程使用指南
    2022-09-09 Unity InputSystem5——PlayerInput
    Docsify介绍—md文件直接生成网页的工具
    java programer future plan
    阿里p8软测专家耗时一个月整理出,从0基础自学到功能测试再到自动化测试超全学习指南
    Academic accumulation|社会创业研究:过去的成就和未来的承诺
    HttpUtils工具类
  • 原文地址:https://blog.csdn.net/weixin_62917800/article/details/126843895