MATLAB 概率论题
1、

用模拟仿真的方法求解
clc
clear
tic
n=0;
N=100000;
for ii=1:N
b='MAXAM'; %字符串格式
a=randperm(5); %
b=[b(a(1)),b(a(2))];%选择两个字符,组成新的字符串
c=randperm(2);
if (b(1)==b(c(1))) %通过坐标来确定字符串是否一致
n=n+1;
end
end
rate=n/N;
time=toc

运行时间0.3秒,概率约等于0.6
注意,如果某一句忘了加分号,有数据一直输出的话,时间如下

可以看出时间大大增加,所以跑大数据量程序时,避免不必要的输出。
2、
有100条龙,101条凤,102条凰,他们两两随机相碰,当同种动物相碰时不发生变化,当不同动物相碰时,自身消失,变成另外的一种动物,例如龙和凤相碰,变成凰。求最后剩下动物的概率。
clc
clear
tic
c=zeros(1,101);
N=100000;
for ii=1:N
m=100;n=101;p=102;%三种动物初始数据
while((m~=0)&&(p~=0))&&(n>=0)%条件的设置,正常应该设置为两两为0,第三个不为零,三种情况取或
%但我们经过分析后知道奇数的凤会最终留下,所以简化了条件
a=rand;
b=m*n+n*p+m*p;
if ((a>=0)&(a<(m*n/b)))%通过随机数模拟两两随机的概率比例
m=m-1;
n=n-1;
p=p+1;%凰加1
elseif ((a>=(m*n/b))&((a<(m*n+n*p)/b)))
m=m+1;
n=n-1;
p=p-1;%龙加1
elseif ((a>=((m*n+n*p)/b))&((a<(m*n+n*p+m*p)/b)))
m=m-1;
n=n+1;
p=p-1;%凤加1
end
end
c(n)=c(n)+1;%最后剩n个凤时的个数
end
time=toc
hist(c)



实验100000次剩余n只凤的个数。
s=sum(c);
pro=c./s;求出概率
stem(1:20,pro(1:20),'o')画图
xlabel('凤的个数/n')
ylabel('概率')
grid on

3、 假设每个人的出生日期是随机的,求一个班上23个同学中至少有两个同学生日相同的概率。
clc
clear
tic
m=0; %记录相同的天数
N=10000;%仿真的次数
for n=1:N
A=zeros(1,365);%生日的365天
for jj=1:23
ii=unidrnd(365);%选择生日的天数
A(ii)=A(ii)+1;%该天数加1
end
B=(A>=2);%选出有相同的天数
if mean(B)>0
m=m+1;%该天数计数
end
end
rate=m/N
time=toc

可以看出B为布尔类型,只要某一天有两个人以上,该位置就为1,用平均值得方法来判断有没有1的存在,判断方法很巧妙。
该程序思路是将365天为主题,生日在天数上加1,巧妙的解决了选出23个数是否相同的比较,思路很新颖。
4、将A和B传递出去,接收端收到A误作为B的概率为0.02,收到B误作为A的概率为0.01,编码端符号A和B出现的概率为2:1,(1)问正确接收的概率为多少(2)若收到符号为A,则发送端发送为A的概率为多少。
clc
clear
tic
n=0;
n_aa=0;
n_ba=0;
m=0;
N=10000;%实验次数
for ii=1:N
c=rand;%判断发送AorB
if c>1/3 %发送A
m=m+1;%发送A的次数
d=rand;%判断接收到A或者B
if d>0.02 %接收到A
n_aa=n_aa+1;
n=n+1;%正确接收A(B)个数(正确接收A)
end
else %发送B
e=rand;%判断接收AorB
if e>0.01
n=n+1;%正确接收到B(A)的次数
else
n_ba=n_ba+1;%接收到A的次数(错误接收A)
end
end
end
p1=n/N %正确接收的概率
p2=n_aa/(n_aa+n_ba)%发送A的概率
time=toc

将循环向量化,一次性生成n个数,然后将n分类
clear
tic
N=10000;%循环次数,本质是将循环次数分类
c=rand(1,N);
m=length(find(c>1/3));%find 返回大于0.3数的位置,求出发送A的个数
d=rand(1,m);%判断接收到AorB
n_aa=length(find(d>0.02));%发A接收A的个数
e=rand(1,N-m);%发送B的个数
n_ba=length(find(e<=0.01));%发B接收A的个数
n=n_aa+(N-m-n_ba);%接收正确的个数
p1=n/N%接收正确的概率
p2=n_aa/(n_aa+n_ba)%收A发A的概率
time=toc

对标两段运行时间,明显向量化后的程序时间更短,更优化。缺点是占用内存。编程时要综合考虑两者问题。
5、一楼到十楼的每层电梯门口都放着一颗钻石,钻石大小不一。你乘坐电梯从一楼到十楼,每层楼电梯门都会打开一次,只能拿一次钻石,问怎样才能拿到最大的一颗?
策略1:直接选第一层
策略2:第一层不拿,从第二层开始,采取如下策略(1)如果第二层比第一层大,则选择第二层,否则在上一层,(2)如果第三层比前面两侧都大,则选择第三层,否则继续上一层。(3)循环,如果到第九层还没有取到要求的钻 石,则选择第十层钻石

策略3,前两层不拿,从第三层开始上述的策略
……

策略10:直接选择第十层
clc
clear
tic
N=10000;
for kk=0:9 %10种策略
n=0;
for ii=1:N %次数
jj=kk; %策略
a=randperm(10);%钻石大小
b=a(1:jj);%jj=0时,产生一个空集
m=max(b);
while(m>a(jj+1))&(jj<9)%初始jj=0,m=[],小于a(jj+1),选择a(1);中间,m是前jj个的最大值,如果m<a(jj+1),则选择a(jj+1),否则,继续选择前jj加1个最大,循环;
%(j<9)的条件是最后的结束条件,此时就是结束条件,选择第10个
jj=jj+1;
b=a(1:jj);
m=max(b);
end
if (a(jj+1)==10)|((jj==9)&(m<10))%前一个条件是中间选择了,比价是否是最大的;后面的条件是,前9个最大的值小于10,则选择的第十个一定是最大值。
n=n+1; %选择到最大数的个数
end
end
rate(kk+1)=n/N;
fprintf('rate%d = %5.4f \n',kk+1,rate)
end
time=toc

plot(rate,'o-')
xlabel('策略/n')
ylabel('概率')
grid on

可以看到策略4可以取到最大的概率。
MATLAB 概率论题的更多相关文章
- 2014.08.04,读书,读书笔记-《Matlab概率与数理统计分析》-第1章 MATLAB的数据基础
第1章 MATLAB数据基础 虽然一直间或使用MATLAB,但从来没有系统的学习过,现在开始也不晚.先对几个重点或者平时忽略的要点做下笔记. %后的所有文字为注释,多条命令可以放在一行,但要用逗号或分 ...
- matlab 常用函数
Matlab常用函数 Matlab的内部常数 eps 浮点相对精度 pi 圆周率 exp 自然对数的底数e i 或j 虚数单位 Inf或 inf 无穷大 Matlab概率密度函数 ...
- matlab练习程序(概率路线图PRM)
PRM概率路线图全称 Probabilistic Roadmap,是一种路径规划算法,利用随机撒点的方式将空间抽样并将问题转为图搜索,利用A*或Dijkstra算法找到起始结束节点的最短路径. 可以想 ...
- Codeforces 351B Jeff and Furik:概率 + 逆序对【结论题 or dp】
题目链接:http://codeforces.com/problemset/problem/351/B 题意: 给你一个1到n的排列a[i]. Jeff和Furik轮流操作,Jeff先手. Jeff每 ...
- matlab 求已知概率密度函数的随机数生成
N=10000; %需要随机数的个数 a=zeros(N,1); %存放随机数的数列 n=0; f1=@(t) 1./(1.2*pi*(1+5*(t-7.3).^2)); f2=@(t) 1./(1. ...
- 贝努利概率 matlab
参考:http://zhidao.baidu.com/link?url=3XZm35XpFf_kbADwDHEERtgFMKqHftiS5SyTCWcBtlF7B7zeNgoNqIzXxpJsHtBI ...
- Matlab 高斯_拉普拉斯滤波器处理医学图像
前言:本程序是我去年实现论文算法时所做.主要功能为标记切割肝脏区域.时间有点久,很多细节已经模糊加上代码做了很多注释,因此在博客中不再详述. NOTE: 程序分几大段功能模块,仔细阅读,对解决医学图像 ...
- 使用MATLAB对图像处理的几种方法(下)
试验报告 一.试验原理: 图像点处理是图像处理系列的基础,主要用于让我们熟悉Matlab图像处理的编程环境.灰度线性变换和灰度拉伸是对像素灰度值的变换操作,直方图是对像素灰度值的统计,直方图均衡是对 ...
- Matlab中常用机器学习函数
更多内容请参考http://cn.mathworks.com/help/stats/index.html?s_cid=doc_ftr. Naive Bayes(朴素贝叶斯) Factor = Naiv ...
随机推荐
- 微信小程序实战(一)之仿美丽说
被美丽说少女粉吸引,就想着自己也写一个来练练手,正好最近在学习微信小程序.接下来让我们分享一下我的学习历程吧! 选题 其实纠结了好久该仿什么,看到别人都写的差不多了,自己却还没有动手,很着急,那两天一 ...
- 【Amaple教程】6. 路由配置
在 第1节<启动路由> 章节中为了能让单页应用顺利跑起来,我们提前介绍了简单的路由配置方法.我们已了解路由配置的目的是指定不同的url下对应的 模块节点(也叫做模块容器)内应该显示哪个模块 ...
- 2018-05-04 圣杯布局 and 双飞翼布局,display:flex
看到一个神奇的布局,啥都不说了 直接贴代码 要让main在中间,left在左边,可以通过Flex容器下的项目的属性“order”属性来设置:对于order属性:定义项目的排列顺序,越小越靠前,默认为0 ...
- 分布式图数据库 Nebula Graph 的 Index 实践
导读 索引是数据库系统中不可或缺的一个功能,数据库索引好比是书的目录,能加快数据库的查询速度,其实质是数据库管理系统中一个排序的数据结构.不同的数据库系统有不同的排序结构,目前常见的索引实现类型如 B ...
- 如何从普通程序员晋升为架构师 面向过程编程OP和面向编程OO
引言 计算机科学是一门应用科学,它的知识体系是典型的倒三角结构,所用的基础知识并不多,只是随着应用领域和方向的不同,产生了很多的分支,所以说编程并不是一件很困难的事情,一个高中生经过特定的训练就可以做 ...
- ffmpeg 使用
ffmpeg 使用 一.介绍 FFmpeg 是视频处理最常用的开源软件,大量用于视频网站和商业软件(比如 Youtube 和 iTunes),视频本身是一个容器,里面包含了视频.音频和字幕等.FFmp ...
- Java-方法(新手)
//创建的一个类.public class zy1ri0319 { //公共静态的主方法. public static void main(String[] args){ //调用方法. zy1(); ...
- 性能测试工具LoadRuner你所不知道的内幕
谈到性能测试,大家一定会联想到Jmeter和LoadRunner,这两款工具目前在国内使用的相当广泛,主要原因是Jmeter是开源免费,LoadRunner 11在现网中存在破解版本.商用型性能测试工 ...
- 选择tomcat时候提示Project facet Java version 1.8 is not supported.解决办法
是因为jdk版本不一致导致的,如何解决? 方法一: 选中项目Properties,选择Project Facets,右击选择Java,Change Version 方法二: 在项目的目录下有一个.se ...
- CodeMixer工具,完美替代ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具
新工具 ProjectTool 已上线 这是一款快速写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 扣扣交流群:811715780 进入 Proje ...