[Matlab]概率论与数理统计:随机数的生成与应用

先来给大家介绍一下Matlab的统计工具箱:Statistics Toolbox。能广泛支持统计计算任务。

下面介绍一些基本的随机数生成函数:

分布类型

函数名称

调用格式

二项分布

binornd

R = binordn(N,P,mm,n);

卡方分布

chi2rnd

R = chi2rnd(N,mm,nn)

指数分布

exprnd

R = exprnd(MU,mm,nn)

F分布

frnd

R = frnd(M,N,mm,nn)

正态分布

normrnd

R = normrnd(MU,SIGMA,mm,nn)

泊松分布

poissrnd

R = poissrnd(LAMBDA,mm,nn)

学生t分布

trnd

R = trnd(N,mm,nn)

离散均匀分布

unidrnd

R = unidrnd(N,mm,nn)

连续均匀分布

unifrnd

R = unifrnd(A,B,mm,nn)

下面来用Matlab解决一些随机数应用。

栗1:掷两个骰子,出现点数之和有多少中可能的结果?其中哪个结果概率最大?其值为多少?

解:掷骰子所出现的点数服从均匀分布,所以建立一下MATLAB程序:

% 掷两颗骰子出现的点数之和有多少种可能的结果

clear cs

k = 30000;              %掷骰子的次数

n = 2;                  %骰子的个数

 

for m = n:6*n           %从2到12遍历

    cs(m) = 0;           %清零计数器====为何有warning?

end                     %结束循环

 

for m = 1:k             %进行k次投掷实验

    s2 = unidrnd(6,1,n);%模拟一次投掷n颗骰子的实验,s2中存储了本次试验的结果,即n个数字

    s = sum(s2);        %将s2中的数字求和

    cs(s) = cs(s)+1;    %将求和的结果求出后,在对应的计数器里面加一以记录当前操作

end

 

fprintf('点数\t\t次数\t\t概率\n')

for m = n:6*n           %显示实验结果

    fprintf('%2d\t\t%4d\t%0.4f\n',m,cs(m),cs(m)/k)

end



其中函数unidrnd(6,1,n)的功能是从集合{1,2,3,4,5,6}中产生一个1×n阶的随机数矩阵。(讲解一下MATLAB分号的意义)

再举一个使用乘法原理的栗子。

题目的需求是:在100件产品中有3件次品。现在从中连取两次,每次取一件,取后不放回,求下列事件的概率:

(1)两次都是正品

(2)一件正品,一件次品。

分析略过,程序清单:

 

k = 40000;                  %实验次数

for n = 1:3

    cs(n)=0;                %清零计数器

end;

for m = 1:k

    for n = 1:3

        cp(n) = 0;          %将次品标记为0

    end;

    for n = 4:100

        cp(n) = 1;          %将正品标记为1

    end;

    

    q1 = cp(unidrnd(100));  %抽取第一件商品

    if q1==0

        cp(1)=1;            %如果第一次抽到的是次品,则次品减少一个

    end

    q2 = cp(unidrnd(99));

    q = q1+q2+1;            %若q为0(0+0)则是两件次品,若q为1(1+0或0+1)则是一正一次,若q为2(1+1)则是两件正品

    cs(q) = cs(q)+1;

end

disp('实验结果:  两件次品  一正一次  两件正品')

disp(sprintf('对应概率:  %7.5f  %7.5f   %7.5f',cs(1)/k,cs(2)/k,cs(3)/k))


注意,因为模拟的是随机事件,所以每一次模拟的实验结果都是不完全相等的。

将代码存档时需要注意,应尽量符合Matlab的命名规范,否则无法run对应的.m程序。


在这里简单说明一下Matlab中各个标点符号的功能:

1 空格:用于输入变量之间的分隔符以及数组行元素之间的分隔符

2 逗号:用于要显示计算结果的命令之间的分隔符;输入变量之间的分隔符以及数组行元素之间的分隔符。

3 点号:数值中的小数点

4 分号:不显示计算结果的命令行的结尾;用于不显示计算结果的命令之间的分隔符;用于数组元素行之间的分隔符。

5 冒号:生成一维数值数组,表示一维数组的全部元素或多维数组的某一维的全部元素

6 百分号:用于注释的前面

7 单引号:括住字符串

8 圆括号:引用数组元素;用于函数输入变量列表;用于确定算术运算的先后次序

9 方括号:构成向量和矩阵; 用于函数输出列表

10 下划线:用于一个变量、函数和文件名中的连字符

11 续行号:用于把后面的行和该行连接以构成一个较长的命令

12 艾特号:用于放在函数名前形成函数句柄;用于放在目录名前形成用户对象类目录


你可能感兴趣的:([Matlab]概率论与数理统计:随机数的生成与应用)