您的位置:首页 > 编程语言 > MATLAB

随机模拟 (matlab题解)

2020-07-16 08:52 169 查看

目录

题目描述:

解题思路:

对 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 ()函数介绍:

[code]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])  % 指定概率

完整代码

[code]function p=coin(N,m)
A=randsrc(1,N,1);       %生成一个元素1的矩阵A,A中元素为1的位置表示分值向上,0表示向下
for ii=1:m
B=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:lenpos
if(A(pos(jj))==1)   %在需要翻转的位置判断硬币之前的状态,原来是1就赋值为0,是0就赋值为1(如此操作就实现了翻转)
A(pos(jj))=0;
elseif (A(pos(jj))==0)
A(pos(jj))=1;
end
end
end
p=sum(A)/N;          %sum(A)就是向上的硬币总数,除以N就是比例
p

    运行结果分析:

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

[code]>> 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

 

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

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: