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 X≤4就可以表示掷到的点数小于4这一事件)。
💦 离散型随机变量
随机变量也有很多种类型,常见的随机变量,根据其可能取值的整体情况,分为两大类:离散型和连续型。那么我们首先介绍介绍离散型~
☁️ 离散型随机变量
离散离散,啥是离散?科学的解释即连续的反义词就是离散,离散就是不连续。
那么对于随机变量 X X X,如果它只可能取有限个或可列无限个(虽然是无限个,但可以一个一个地排列起来)值,则称其为离散型随机变量。
这样说得我都有点摸不着头脑了,还是举几个例子👇:
- 掷硬币中,随机变量 X X X只可能取0和1两个值,所以, X X X是离散型随机变量。
- 电梯在一年中发生故障的次数,随机变量 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
\begin{cases} p_{k}\geq 0,k=1,2,...\\ \sum_{k=1}^\infty p_{k}=1\\ \end{cases}
{pk≥0,k=1,2,...∑k=1∞pk=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
0<p<1,q=1-p
0<p<1,q=1−p,则称
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,0<p<1 P(A)=p,P(A)=1−p,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(1−p)n−k
该公式的意义就是:进行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);
}
然后呢就是二项分布(Binary Distrubution)👇:
#include <stdio.h>
// 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;
}
紧接着就是那个啥泊松分布,不过这个泊松分布设计到了自然数
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=0∑∞n!1
同时我们也不能取
e
e
e小数点后面的全部哇,所以只需要精确到小数点后6位即可。
#include <stdio.h>
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;
}
好!
go on!
泊松分布(Poisson Distrubution)👇:
#include <stdio.h>
#include <math.h>
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;
}
各种分布的代码有了,开始实战。
- 电子线路中装有两个并联继电器,假设这两个继电器是否接通具有随机性,且彼此独立。已知每个继电器接通的概率为0.8,记 X X X为线路中接通的继电器的个数。1)求 X X X的概率分布。2)线路接通的概率。
1)
#include <stdio.h>
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;
}
2)分析:什么情况线路被接通?因为这两个继电器是并联的,所以任意一个被接通整个线路就可以被接通。也就是说我们排除它不被接通的情况即可。当然我们也可以求它被接通的所有情况(只需对上述代码稍作改动)。这里的做法是求出它被连通的所有情况的概率总和。
#include <stdio.h>
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;
}
- 设每天每辆出租车出现故障的概率为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;
}
- 某一城市每天发生火灾的次数 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;
}
这期学习到此结束~~下期再见,各位一起加油!