数理统计课程设计

子标题:利用MATLAB解决数理统计相关问题

题    目

             数理统计课程设计

  1. 课程设计目的:

通过本次课程设计,使学生进一步理解概率论与数理统计的基本概念、重要论证和方法,并能基本掌握MATLAB统计分析软件的使用,例如基本运算,程序设计,函数,脚本等,初步具备运用计算机完成处理数据的技能,使得课堂知识得以在生活实践中运用。

一、设计问题及原始参数

①求解概率论相关问题

例:将A、B、C三个字母之一输入信道,输出原字母的概率为α,而输出其他字母的概率都是(1-α)/2,今将字符串AAAA、BBBB、CCCC之一输入信道,输入AAAA、BBBB、CCCC的概率分别为P1 、P2 、P3(P1 +P2 +P3=1),输入是ABCA,求输出所有情况的概率?

②求解单因素方差分析问题

例:为了寻找飞机控制板上的仪表盘的最佳布置,试实验三个方案,观察领航员在紧急情况的反应时间(以1/10秒计),随机地选择28名领航员,得他们对不同的布置方案的反应时间如下:

                                                                                    

方案一     14  13  9  15  11  13  14   11     

                                                  

方案二     10    12    7    11     8    12    9       10    13    9    10    9

                                                                                      

方案三     11     5   9     10     6   8     8       9

                                                                                       

试在显著水平下0.05下检验各个方案是否有显著差异。

③验证蒙提霍尔问题

蒙提霍尔问题(Monty Hall problem),也称为三门问题,是一个源自博弈论的数学游戏问题,问题的名字来自美国的电视游戏节目:Let's Make a Deal,该节目的主持人名叫蒙提·霍尔(Monty Hal1)。

这个游戏的玩法是:参赛者面前有三扇关闭的门,其中一扇门的后面藏有一辆汽车,而另外两扇门的后面则各藏有一只山羊。参赛者从三扇门中随机选取一扇,若选中后面有车的那扇门就可以赢得该汽车。当参赛者选定了一扇门,但尚未开启它的时候,节目主持人会从剩下两扇门中打开一扇藏有山羊的门,然后问参赛者要不要更换自己的选择,选取另一扇仍然关上的门。这个游戏涉及到的问题是:参赛者更换自己的选择是否会增加赢得汽车的概率?

二、设计目的:

本文主要解决三个问题:求某个事件概率的实际应用问题、单因素方差分析、蒙提霍尔问题利用MATLAB的相关知识对于问题进行编程求解,并利用概率论与数理统计的相关知识对习题进行求解分析。

三、设计内容                   

2.1.1 问题一的求解

   问题一分析:

由问题一可知,这是一个输出根据输入的概率进行输出的结果的问题,该问题中共有三个变量A、B、C,输入的是ABCA,根据计算输出结果共有81种,需要统计输出结果的概率。可以利用蒙特卡洛法,根据其概率将区间分成3段,第一段为(0,a) ,第二段为(α,a+(1-α)/2) ,第三段为(a+(1-α)/2,1) ,利用rand函数随机生一个0-1之间的数,如果该数在第一段区间内,则原样输出,如果该数位于第二段区间,则输出其他字母,如果该数位于第三段区间,则输出另一个字母,这样就可以得到输出的结果,将这样的实验进行n次时,随机数可以认为是均匀分布的。由大数定律可知,当实验次数n增大时,频率趋近于概率。

问题一中变量有A、B、C三个变量,输出结果的排列为AAAA,BBBB,CCCC等,输出结果有81种。是否可以将排列结果用三进制数表示呢?用0,1,2表示变量A、B、C,四位三进制数可表示的个数刚好是81 ,可以利用三进制数表示输出结果。可用利用十进制将三进制的组合进行存储,此时,矩阵的数的范围是0-80。在MATLAB利用tabulate函数,统计矩阵中元素出现的频率即可。

代码:

(脚步文件:输入数据,结果的代码)


clc;
clear;
%设置问题中的概率
probability=0.5;
%A B C对应一个三位数
data_one=0;
data_two=1;
data_three=2;
for i=1:1000000
    %Analog 是一个返回 0 或 1 或 2 的函数
    %第一位相当于三进制的千位
     ternary_kilobit=Analog(data_one,probability);
    %三进制的百分位数
     ternary_Hundred=Analog(data_two,probability);
    %三进制十位数
     ternary_ten=Analog(data_three,probability);
    %三进制中的单个数字
     ternary_bot=Analog(data_one,probability);
    %将保存的三进制数转换为十进制数
     Decimal_number = ternary_kilobit*27+ternary_Hundred*9+ternary_ten*3+ternary_bot;
    %将十进制数保存到矩阵
     matrix(i) = Decimal_number;     
end
 %Tabulate (matrix(:)) 显示矩阵中数据的频率表。
 % 对于矩阵中的每个唯一值,tab 函数显示数字实例的数量以及该值在矩阵中的百分比。
 tabulate(matrix(:));

 for i=0:80
     %十进制矩阵的组成部分
    Comparison_matrix_part_I(i+1)=i;
 end
 %十进制转三进制
 Comparison_matrix_part_II=dec2base(Comparison_matrix_part_I,3);
 %dec2base 结果是一个字符类型,而Comparison_matrix_part_I需要转换为字符类型

%对照表中,前四位为三进制,后两位为十进制
 comparison_matrix=[Comparison_matrix_part_II,Comparison_matrix_part_I];

(Anlog函数:设计一个模拟函数)

function result = Analog(data,probability)

%生成一个0-1的随机数

random_number = rand;

%把区间分成3个区间,(0,α)(α,α+((1-α))⁄2)(α+((1-α))⁄2,1)

if data==0

    if random_number<probability

        result=0;

    elseif probability<mrandom number & m<probability+(1-probability)/2

        result=1;

    else

       result=2;

    end

elseif data==1

     if random_number<=probability

        result=data;

    elseif probability<random_number & random_number<(probability+(1-probability)/2)

        result=0;

    else

       result=2;

     end

else

   if 0<random_number & random_number<=probability

        result=data;

   elseif probability<random_number & random_number<(probability+(1-probability)/2)

        result=0;

   else

       result=1;

   end

end

2.1.2 问题一的结果分析

根据题意,输入ABCA的输出结果共有81种。

这里Value 表示矩阵中出现的元素,Count表示元素在矩阵出现的个数,Percent表示出现的频率。

comparison_table表示的是对照表,用于查询进制数的转换关系。前四位表示三进制数,最后两位是十进制数。

2.2.1问题二的求解

问题二分析:

问题二是一个单因素方差问题,关键是构造一个F分布,Fs-1,n-s ,由预设显著水平判断F是否落入拒绝域中。若F在拒绝域则有显著差异。

第一步根据输入的数据写于一个矩阵中,由于各个分量长度的不同,首先取出各个分量的长度,写入一个矩阵中,利用矩阵统计出最大数,然后将分量扩容,是每一个分量具有相同的长度。将分量写入同一矩阵中。

第二步,计算各个量。⑴计算总体均值,需要注意的是由于矩阵是由分量扩容组成的,需要将矩阵中的0排除。首先把矩阵非0为写入另一个矩阵中,统计该矩阵非0个数,记为logical_matrix_add,然后将矩阵进行求和,除以logical_matrix_add就可以得到矩阵的均值。⑵计算总偏差平方和SST= ,历遍矩阵,如果矩阵元素不等于0,则参与计算⑶计算误差平方和SSE= ,历遍矩阵,如果矩阵元素不等于0,则参与计算(4)计算效应平方和SSA= ,历遍矩阵,如果矩阵元素不等于0,则参与计算(5)构造分式F=SSA(s-1)SSE(n-s) ,F服从F(s-1,n-s) 。

第三步,利用finv查询在水平条件下拒绝域的范围,看F分式值是否落入其中,如果落入,则认为有显著差异。

clc;

clear;

%问题中的数据输入

data_comlogical_matrixonent_one=[14 13 9 15 11 13 14 11];

data_comlogical_matrixonent_two=[10 12 7 11 8 12 9 10 13 9 10 9];

data_comlogical_matrixonent_three=[11 5 9 10 6 8 8 7];

%获取每个 comlogical_matrixonent 的列数

numCols=[size( data_comlogical_matrixonent_one,2) size( data_comlogical_matrixonent_two,2) size( data_comlogical_matrixonent_three,2)];

% 获取 comlogical_matrixonent 的最大值

numCols_max=max(numCols);

%将 comlogical_matrixonents 写入矩阵时,comlogical_matrixonent 列需要与列一样大,因此使 ulogical_matrix 不足comlogical_matrixonents 为 0

 data_comlogical_matrixonent_one=[ data_comlogical_matrixonent_one, zeros(1,numCols_max-numCols(1))];

 data_comlogical_matrixonent_two=[ data_comlogical_matrixonent_two, zeros(1,numCols_max-numCols(2))];

 data_comlogical_matrixonent_three=[ data_comlogical_matrixonent_three, zeros(1,numCols_max-numCols(3))];

%将 comlogical_matrixonents 写入矩阵

matrix=[ data_comlogical_matrixonent_one; data_comlogical_matrixonent_two; data_comlogical_matrixonent_three];

%freedom_one

levelCnt=size(matrix,1);

%freedom_two

observeCnt=size(matrix,2);

%logical_matrixological_matrixulation 均值

logical_matrix=(matrix>0);

logical_matrix_add=sum(sum(logical_matrix));

total_mean=(sum(sum(matrix)))/logical_matrix_add;

sum_of_Squars_Total=0;

for i=1:levelCnt

    for j=1:observeCnt

        %每个元素减去总均值求和

        if matrix(i,j)~=0

        sum_of_Squars_Total=sum_of_Squars_Total+...

        (matrix(i,j)-total_mean)*(matrix(i,j)-total_mean);

        end

    end

end

%groulogical_matrixs 之间的平均值

groulogical_matrix_add=sum(matrix,2);

mean_between_groulogical_matrixs=[ groulogical_matrix_add(1,:)/numCols(1),...

    groulogical_matrix_add(2,:)/numCols(2),groulogical_matrix_add(3,:)/numCols(3)];

Sum_of_Squares_Within=0;

for i=1:levelCnt

    for j=1:observeCnt

        if matrix(i,j)~=0

    %S从总和中的总和中的 groulogical_matrix 减去 groulogical_matrix 均值

        Sum_of_Squares_Within=Sum_of_Squares_Within+...

   (matrix(i,j)-mean_between_groulogical_matrixs(i))*(matrix(i,j)-mean_between_groulogical_matrixs(i));

        end  

    end 

end

Sum_of_Squares_Between=0;

for i=1:levelCnt

    for j=1:observeCnt

        if matrix(i,j)~=0

         Sum_of_Squares_Between=Sum_of_Squares_Between+...

      (mean_between_groulogical_matrixs(i)-total_mean)*(mean_between_groulogical_matrixs(i)-total_mean);

        end

    end  

end

%构建 F 统计量

gruological_matrixIntraDev = Sum_of_Squares_Between/(levelCnt-1);

groulogical_matrixInnerDev = Sum_of_Squares_Within/(sum(numCols)-levelCnt);

Fvalue = gruological_matrixIntraDev/groulogical_matrixInnerDev

%查询拒绝域

Deny_domains=finv(0.95,(levelCnt-1),(sum(numCols)-levelCnt))

%如果落在deny域内,则认为存在差异

if Fvalue>Deny_domains

   disp('认为有显著差异')

end

2.1.2 问题二的结果分析

在该问题中,F分式值Fvalue,查询拒绝域的为Fm, Fvalue落在拒绝域中,认为有显著差异。

2.3.1问题三的求解

    问题三分析:

由于游戏开始时参赛者是从三扇门中随机地选取一扇门,所以在更换选择之前,参赛者赢得汽车的概率为 1/3。经分析可知,若参赛者一开始选中汽车,则更换选择后一定选不到汽车;若参赛者一开始没有选中汽车,则更换选择后一定能选到汽车。为了求解参赛者更换选择之后赢得汽车的概率,这里引人两个随机事件:A=“一开始选中汽车”,B-“更换选择后选中汽车”。根据全概率公式可求得参赛者更换选择之后赢得汽车的概率为PB=PAPBA+PAPBA=13×0+23×1=23

通过蒙特卡洛方法求解参赛者更换选择之后赢得汽车的概率。为表述方便,设两只羊的编号分别为“1”和“2”,汽车的编号为“3”。现在从数字 123 中随机选取一个数字,若一开始选中1或2,则更换选择后选中 3,即赢得汽车;若一开始选中 3,则更换选择后选中1或2,即得不到汽车。将这样的试验重复进行n次记录一开始选中1或2 的次数success(即更换选择后赢得汽车的次数),从而可以确定更换选择后赢得汽车的频率 success/n。由大数定律可知当试验次数 n 增大时,频率success/n趋近于更换选择后赢得汽车的概率。

代码:

clc

clear

%先定义成功次数初始化为0,
...成功表示选择结果是车

success=0;

% total 表示蒙特卡洛模拟重复次数

total = 1000000; 

for i= 1 : total

     % 设置门号3为车,1、2为羊

     % 在1-3之间随机生成一个门来表示你的选择

    random_numbers = randi([1,3]);

    %

当随机数为3时,羊被排除,

...而且羊也换了之后换了,结果不成功

    %

当随机数为1或2时,排除一只羊,

...那么剩下的就是车了,更换之后,结果成功

    if random_numbers==1 || random_numbers==2

        success=success+1;

    end

end

%num2str 将数字类型改为字符类型,

...和 ​​success/total 表示成功的频率

disp(['蒙特卡罗方法得到的改变主意时的获奖概率为:', num2str(success/total)]);

%变量被清除,实验没有改变主意

success=0;

for i=1:total

   random_numbers = randi([1,3]);

   %  当随机数为3时,羊被排除,

...选择不变,结果成功

   %  当随机数为1或2时,排除一只羊,剩下的就是车,

...但选择没有改变,结果是失败

   if random_numbers==3

       success=success+1;

   end

end

%num2str 将数字类型改为字符类型,

...和 ​​success/total 表示成功的频率

disp(['蒙特卡罗方法得到的不改变主意时的获奖概率为:', num2str(success/total)]);

2.3.2 问题三的结果分析

经过模拟计算,验证更改选择后赢得汽车的概率为2/3,而不更改选择赢得汽车的概率1/3。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王某i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值