• 概率论与数理统计学习:数字特征(二)——知识总结与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 
    #include 
    #include 
    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;
    }
    
    • 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
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    在这里插入图片描述
    代码分析:虽然这个题目十分简单,但是我们可以用代码将做题的这个过程丰富起来。写这个代码的时候的主要难度就在于指针的问题,因为动态分配内存空间时,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 
    #include 
    #include 
    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
    • 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
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

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

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

  • 相关阅读:
    Gradle基础知识-Wrapper,Daeman;Groovy闭包语法
    12 编译2022年最新的BusyBox rootfs源码,并用QEMU模拟器运行
    Axure 9 使用 font awesome 字体发布原型
    ctfshow—web—一切看起来都那么合情合理
    小功能⭐️退出游戏 && 监听事件
    基于 SpringBoot + MyBatis 的博客系统
    Java idea编译器工程out目录修改
    【重识云原生】第六章容器6.3.3节——Kube-Scheduler使用篇
    pom文件中引入本地jar包到maven项目
    面试官:今天要不来聊聊SpringMVC吧?
  • 原文地址:https://blog.csdn.net/weixin_62917800/article/details/127597491