概率论与数理统计学习:数字特征(二)——知识总结与C语言实现案例

hello,大家好

这里是第11期概率论与数理统计的学习,我将用这篇博客去总结知识点和用C语言实现简单例题的过程。

本期知识点:方差

  1. 方差的定义
  2. 方差的性质
  3. 几种常用随机变量的方差

在这里插入图片描述

💦 知识总结

☁️ 方差的定义

方差刻画了随机变量取值在其中心位置附近的分散程度,即随机变量取值与平均值的偏离程度

设随机变量 X X X的期望为 E ( X ) E(X) E(X),为了刻画偏离程度的大小,用 E [ ∣ X − E ( X ) ∣ ] E[|X-E(X)|] E[XE(X)]作为描述 X X X取值分散程度的数字特征,称之为 X X X平均绝对差

但由于在数学上绝对值的处理很不方便,因此常用 [ X − E ( X ) ] 2 [X-E(X)]^2 [XE(X)]2的平均值度量 X X X E ( X ) E(X) E(X)的偏离程度,这个平均值就是方差

🌱 定义:设 X X X为一随机变量,如果 E { ∣ X − E ( X ) ] 2 } E\{|X-E(X)]^2\} E{XE(X)]2}存在,则称之为 X X X的方差,记为 V a r ( X ) Var(X) Var(X),有时也记为 D ( X ) D(X) D(X)。即 V a r ( X ) = E { [ X − E ( X ) ] 2 } Var(X)=E\{[X-E(X)]^2\} Var(X)=E{[XE(X)]2}
并称 V a r ( X ) \sqrt{Var(X)} Var(X) X X X标准差

再将上式做一个变换,可得 V a r ( X ) = E ( X 2 ) − [ E ( X ) ] 2 Var(X)=E(X^2)-[E(X)]^2 Var(X)=E(X2)[E(X)]2

☁️ 方差的性质

  1. c c c为常数,则 V a r ( c ) = 0 Var(c)=0 Var(c)=0
    V a r ( X + c ) = V a r ( X ) Var(X+c)=Var(X) Var(X+c)=Var(X)

  2. k k k为常数,则 V a r ( k X ) = k 2 V a r ( X ) Var(kX)=k^2Var(X) Var(kX)=k2Var(X)

  3. X X X Y Y Y相互独立,则
    V a r ( X + ‾ Y ) = V a r ( X ) + V a r ( Y ) Var(X\underline +Y)=Var(X)+Var(Y) Var(X+Y)=Var(X)+Var(Y)

  4. 设随机变量 X X X的期望和方差分别为 E ( X ) E(X) E(X) V a r ( X ) Var(X) Var(X),则 Y = X − E ( X ) V a r ( X ) Y=\frac{X-E(X)}{\sqrt{Var(X)}} Y=Var(X) XE(X)的期望和方差为 E ( Y ) = 0 , V a r ( Y ) = 1 E(Y)=0,Var(Y)=1 E(Y)=0,Var(Y)=1
    这里称 Y Y Y X X X标准化的随机变量
    即:
                  X ~~~~~~~~~~~~~X              X~ N ( μ , σ 2 ) N(\mu,\sigma^2) N(μ,σ2)
      Y = X − μ σ ~Y=\frac{X-\mu}{\sigma}  Y=σXμ~ N ( 0 , 1 ) N(0,1) N(0,1)

☁️ 几种常用随机变量的方差

  1. 两点分布

X X X服从参数为 p p p的两点分布,有 E ( X ) = p E(X)=p E(X)=p,则
V a r ( X ) = p ( 1 − p ) Var(X)=p(1-p) Var(X)=p(1p)

  1. 二项分布

X X X~ B ( n , p ) B(n,p) B(n,p) X = X 1 + X 2 + . . . + X n X=X_{1}+X_{2}+...+X_{n} X=X1+X2+...+Xn,则
V a r ( X ) = V a r ( X 1 ) + V a r ( X 2 ) + . . . + V a r ( X n ) = n p ( 1 − p ) Var(X)=Var(X_{1})+Var(X_{2})+...+Var(X_{n})=np(1-p) Var(X)=Var(X1)+Var(X2)+...+Var(Xn)=np(1p)

  1. 泊松分布

X X X~ P ( λ ) P(\lambda) P(λ),则
V a r ( X ) = λ Var(X)=\lambda Var(X)=λ

  1. 均匀分布

X X X~ U [ a , b ] U[a,b] U[a,b],则
V a r ( X ) = ( b − a ) 2 12 Var(X)=\frac{(b-a)^2}{12} Var(X)=12(ba)2

  1. 指数分布

X X X服从参数为 λ \lambda λ的指数分布,则
V a r ( X ) = 1 λ 2 Var(X)=\frac{1}{\lambda^2} Var(X)=λ21

  1. 正态分布

X X X~ N ( μ , σ 2 ) N(\mu,\sigma^2) N(μ,σ2),则
V a r ( X ) = σ 2 Var(X)=\sigma^2 Var(X)=σ2

💦 C语言实现案例

  1. 设离散型随机变量 X X X的概率分布是 P { X = 0 } = 0.2 , P { X = 1 } = 0.5 , P { X = 2 } = 0.3 P\{X=0\}=0.2,P\{X=1\}=0.5,P\{X=2\}=0.3 P{X=0}=0.2,P{X=1}=0.5,P{X=2}=0.3,求 V a r ( X ) Var(X) Var(X)

题目分析:因为是离散型的,所以直接按照公式来即可。

#include <stdio.h>
#include <malloc.h>
#include <math.h>
typedef struct
{
	int X;
	float p;
}Variate;

// The algorithm of variance ——离散型随机变量方差的算法
float D(Variate *b,int pos)
{
	float sum1 = 0,sum2 = 0;
	for(int i = 0 ; i < pos ; i++)
	{
		sum1 += b[i].p * b[i].X;
		sum2 += pow(b[i].X,2) * b[i].p;
	}
	return sum2 - pow(sum1,2);
}


int main()
{
	printf("-----------------------------Read-in datas-------------------------------------\n");	// 读入数据
	// Use pos to judge the number of the datas ——用pos表示数据的个数(一个结构体代表一个数据)
	int pos = 0;
	// Use sign to be the condition of the circle ——用sign作为循环判断的条件
	int sign = 1;
	// It can be regarded as head pointer ——可以把var当作一个头指针
	Variate* var = NULL;
	// And view a as the pointer to move ——把a看作用来移动的指针
	Variate* a = NULL;
	while(sign == 1)
	{
		// Allocate spaces dynamically ——动态分配内存空间
		var = (Variate *) realloc (var,sizeof(Variate));
		a = var;
		// The pointer is moving ——这个指针在移动
		a += pos;
		printf("Please input the value of X:");						// 请输入X的值
		scanf("%d",&a->X);
		printf("Please input the probability of the X:");			// 请输入X的概率
		scanf("%f",&a->p);
		pos++;
		printf("\n");
		printf("Do you want to end up reading in?If so input 0,else input 1------------:"); // 你是否想结束读入数据?若是,输入0,不是则输入1
		scanf("%d",&sign);
	}
	printf("-----------------------------Stop reading--------------------------------------\n");		// 停止读取
	printf("The probability distrubution is :\n");					// 概率分布为:
	for(int i = 0 ; i < pos ; i++)
	{
		printf("P{X=%d}=%.2f\n",var[i].X,var[i].p);
	}
	float result = D(var,pos);
	printf("-------------------------------------------------------------------------------\n");
	printf("\n");
	printf("Var(X)=%.2f",result);
	return 0;
}

在这里插入图片描述
代码分析:虽然这个题目十分简单,但是我们可以用代码将做题的这个过程丰富起来。写这个代码的时候的主要难度就在于指针的问题,因为动态分配内存空间时,var指针是一直不变的,始终指向分配的第一块内存空间,所以我们需要另设一个指针a来移动,实现对每个分配的空间的赋值。所以需要注意的就是指针与指针之间的关系。

  1. 一台设备由三个部件构成,在设备运转中各部件需要调整的概率分别为0.01,0.02,0.03,设各部件的状态相互独立,用 X X X表示同时需要调整的部件数,求 E ( X ) E(X) E(X) V a r ( X ) Var(X) Var(X)

题目分析:由各部件的状态相互独立可以知道, E ( X ) = E ( X 1 ) + E ( X 2 ) + E ( X 3 ) E(X)=E(X_{1})+E(X_{2})+E(X_{3}) E(X)=E(X1)+E(X2)+E(X3) V a r ( X ) = V a r ( X 1 ) + V a r ( X 2 ) + V a r ( X 3 ) Var(X)=Var(X_{1})+Var(X_{2})+Var(X_{3}) Var(X)=Var(X1)+Var(X2)+Var(X3)。进而每个部件只有两种情况,所以每个部件符合一次实验的二项分布,即 X 1 X_{1} X1~ B ( 1 , 0.01 ) . . . B(1,0.01)... B(1,0.01)...

#include <stdio.h>
#include <malloc.h>
#include <math.h>
typedef struct
{
	int X[2];				// Each X has two values ——每个X有两个值
	float p[2];				// Each X corresponds to a probability ——每个X对应于一个概率
}Data;

// The algorithm of Expectation and Variance ——期望和方差的算法
// Here I calculate them through the cognitions ——这里我用概念法计算的
void D(Data* d,int len)
{
	float sum1 = 0,sum2 = 0;
	for(int i = 0 ; i < len ; i++)
	{
		for(int j = 0 ; j < 2 ; j++)
		{
			float a = d[i].X[j] * d[i].p[j];
			sum1 += a;
			sum2 += pow(d[i].X[j],2) * d[i].p[j];
			sum2 -= pow(a,2);
		}
	}
	printf("E(X)=%.2f\n",sum1);
	printf("Var(X)=%.4f\n",sum2);
}

int main()
{
	Data* d = NULL;
	Data* a = NULL;
	int len;
	printf("Please input the number of the units(which is regarded as the variate 'X'):");			// 请输入部件的数量(X的数量)
	scanf("%d",&len);
	printf("Each unit(Each X) has two values :0,1\n");												// 每个X有两个值
	d = (Data *) malloc (sizeof(Data) * len);
	// Initiate X ——初始化X
	for(int i = 0 ; i < len ; i++)
	{
		d[i].X[0] = 0;
		d[i].X[1] = 1;
	}
	printf("\n");
	printf("Now we need to input the values of the probability of each condition of each X:\n");	// 现在我们需要输入每个X的每个值对应的概率
	for(int i = 0 ; i < len ; i++)
	{
		// Xi=1的概率
		printf("Input P{X%d=1}=",i + 1);
		scanf("%f",&d[i].p[1]);
		// Xi=0的概率
		d[i].p[0] = 1 - d[i].p[1];
	}
	printf("\n");
	for(int i = 0 ; i < len ; i++)
	{
		printf("P{X%d=%d}=%.2f\n",i + 1,d[i].X[0],d[i].p[0]);
		printf("P{X%d=%d}=%.2f\n",i + 1,d[i].X[1],d[i].p[1]);
		printf("\n");
	}
	D(d,len);
	return 0;
}

在这里插入图片描述
代码分析:主要是一个数据存储的问题,你可以用数组,也可以用结构体来实现。然后其它方面跟上面的代码差不多,然后就是具体算法需要仔细跟数学算式比对,用代码一步一步地去实现每一个步骤。

这一期的学习就到这里了,咱们下期再见~~
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值