当前位置: 代码迷 >> 综合 >> 随机模拟 (matlab题解)
  详细解决方案

随机模拟 (matlab题解)

热度:60   发布时间:2024-01-28 19:40:08.0

目录

题目描述:

解题思路:

对 randsrc ()函数介绍:

完整代码


题目描述:

随机模拟:
编写程序实现以下问题:设有N枚硬币,开始时所有的硬币都是分值向上,接着随机选取硬币,并随机决定是否将其翻转,经过m次后,统计分值向上的硬币所占的比例(注:随机指“等可能”)。

解题思路:

生成一个矩阵A,A中元素为1的位置表示分值向上,为0的位置表示分值向下。在m次循环中随机生成一个只含0和1的矩阵B(具体构造为 B=randsrc(1,N,[0 1;0.5 0.5]) ;),1的位置表示要翻转,0表示不翻转。最后统计A矩阵中1的个数,再除以N即得比例。

对 randsrc ()函数介绍:

out = randsrc                        % -1 或 1
out = randsrc(m)                     % m*m 个 -1 或 1
out = randsrc(m,n)                   % m*n 个 -1 或 1
out = randsrc(m,n,alphabet)          % 指定返回值为 alphabet 中的元素
out = randsrc(m,n,[alphabet; prob])  % 指定概率

完整代码

function p=coin(N,m)
A=randsrc(1,N,1);       %生成一个元素1的矩阵A,A中元素为1的位置表示分值向上,0表示向下
for ii=1:mB=randsrc(1,N,[0 1;0.5 0.5]);  %随机生成一个只含0和1的矩阵B,1的位置表示要翻转,0表示不翻转pos=find(B==1);       %用pos存储需要翻转的位置lenpos=length(pos);for jj=1:lenposif(A(pos(jj))==1)   %在需要翻转的位置判断硬币之前的状态,原来是1就赋值为0,是0就赋值为1(如此操作就实现了翻转)A(pos(jj))=0;elseif (A(pos(jj))==0)A(pos(jj))=1;endend
end
p=sum(A)/N;          %sum(A)就是向上的硬币总数,除以N就是比例   
p

    运行结果分析:

  调用函数coin(10,3),输出中间过程,可以看到程序实现模拟的效果。

>> coin(10, 3)
B =   1     0     0     1     0     1     1     1     0     0
A =   0     1     1     0     1     0     0     0     1     1
B =   0     1     0     1     0     1     0     1     1     1
A =   0     0     1     1     1     1     0     1     0     0
B =   1     0     1     0     0     1     1     0     1     1
A =   1     0     0     1     1     0     1     1     1     1
p =   0.7000

 

 安利我的公众号“狸哥黑脑洞”,欢迎关注我哦!QWQ

 

  相关解决方案