随机模拟 (matlab题解)
2020-07-16 08:52
169 查看
目录
题目描述:
随机模拟:
编写程序实现以下问题:设有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
相关文章推荐
- matlab 分节
- java调用matlab
- Matlab中画圆
- 2016微软探星夏令营在线技术笔试题解(3)
- MATLAB GUI平台
- matlab调试
- 贯穿时域与频域的方法——傅立叶分析(直观理解+Matlab实现)
- 基于MATLAB的PCM编解码
- 神经网络中的反向传播法算法推导及matlab代码实现
- CCF CSP试题题解:201709-2 公共钥匙盒
- 线性调频信号 与 脉冲压缩技术的多种实现方法(附MATLAB实现)
- 梯度下降(Gradient Descent)简析及matlab实现
- [Matlab] M文件注释被help到注意问题
- 关于matlab绘图中字体及图片大小等的设置
- matlab写数据到txt文件,C语言读取文件内容到数组@项目简介:基于PSS序列(频域)估计整数倍频偏
- [Matlab]Attempt to reference field of non-structure array
- IDL与Matlab的比较
- NSGA2 算法Matlab实现
- 【Matlab/C/Python/VB/...】代码复制到word时如何变成彩色的
- 【Codeforces 808B】【容斥原理】Average Sleep Time 题解