这是关于matlab学习的第一篇博文,我是不愿意承认自己不会MATLAB的,因为这东西大一的时候就学过,如果白驹过隙,都不好意思说自己研几了,科研的过程中MATLAB是必须要会的,于是得系统的看一下了。自己什么**水平自己又不是不清楚。


问题提出:

一只失明的小猫掉进山洞里,山洞有三个门,其中一个门进去后走2h后可以回到地面,第二个门进去后走4h又回到原始出发点,第三个门进去后走6h还是回到原始出发点。猫是随机选择的,求小猫走出山洞的期望时间?

解题的思路如下:

设小猫走出山洞的期望时间为t,如果小猫不幸进了第二个或第三个门,那么它过4h或6h后又和进门之前面临的状况一样了,只不过这两种不幸的情况发生的概率都是1/3。而万幸一次性走出去的概率也是1/3。于是可以得到如下的方程:

解得: t = 12。

验证结果的正确性:

下面使用MATLAB编写模拟小猫 n 次出洞时间的函数,该函数返回的结果T为n次出洞时间组成的数组,代码如下:

function T = cat_in_holl(n)
T = zeros(1,n);
for k = 1:nc = unidrnd(3,1);while c ~= 1if c == 2T(k) = T(k) + 4;elseT(k) = T(k) + 6;endc = unidrnd(3,1);endT(k) = T(k) + 2;
end

在MATLAB命令窗口输入edit命令,进入编辑器,将上述代码粘贴进去,保存文件为 cat_in_holl.m文件,并使之在MATLAB搜索路径上,之后在命令窗口输入: Z = cat_in_holl(10000);来观察模拟小猫 10 000次出洞的时间。

之后运行mean(Z)就可以观察平均时间,随着n的增大,mean(Z)也就越来越接近期望值12。

如下:

mean(Z)

ans =

11.8698

>> Z = cat_in_holl_function(100000);
>> mean(Z)

ans =

12.0135


其实,说到这里,单纯这个问题已经解决了,可是我的目的并非仅有这些,重点在于对于程序的理解,上述程序没有一个注释,当然不好理解,下面来解释这个程序:

上述程序是一个函数,程序的第一行是函数的声明,函数体必须另起一行开始写。

第一行:function 是函数声明符,其后定义了函数的输出变量T,函数名cat_in_holl,以及输入变量n。

下面进入函数体部分,T = zeros(1,n);表示生成一个一行n列的全零行向量,这步主要就是预分配内存,因为最后得到的T是n次小猫出洞的时间组成的一个数组,数组长度事先已知。给T预分配内存是基本的MATLAB高效编程准则之一。

接下来是一个for循环体(k从1循环到n),for循环体内部还有一个while循环体(当c不等于1时,运行while循环体内部的代码),while循环体内还有一个if——else选择分支结构。这些循环以及选择分支的意义和其他语言都类似,不同的就是格式,每一个循环体或者选择分支结构结束时,以end结尾。

unidrnd是MATLAB自带的函数,unidrnd(3,1)表示在1,2,3中等概率的生成一个数字。

在命令窗口输入

help unidrnd

得到如下介绍:

unidrnd - Discrete uniform random numbers

This MATLAB function generates random numbers for the discrete uniform
    distribution with maximum N.

R = unidrnd(N)
    R = unidrnd(N,m,n,...)
    R = unidrnd(N,[m,n,...])

其他的都很好理解,这篇博文到此为止。本文参考资料为:《MATLAB高效编程技巧与应用》

【 MATLAB 】通过案例学会编写一个 matlab 函数(小猫掉进山洞问题)相关推荐

  1. JAVA编写一个函数计算1到n之和_编写一个求和函数,用以求1到n的和 ,并返回和值。_学小易找答案...

    [简答题]民宿 怎样做好个性化服务? (10.0分) [多选题]采取产品-市场集中化时,企业的目标市场( ) [单选题]So many mistakes in your homework! You m ...

  2. 3、编写一个prod()函数,可以接受一个list并利用reduce()求积

    3.编写一个prod()函数,可以接受一个list并利用reduce()求积 # -*- coding: utf-8 -*-from functools import reducedef prod(L ...

  3. 编写一个求和函数sum,用于计算 1+2+…+n ,在主函数调用该函数求和。

    编写一个求和函数sum,用于计算 1+2+-+n ,在主函数调用该函数求和. 示例 输入 输出 1️⃣ 5 15 2️⃣ 7 28 3️⃣ 3 6

  4. C语言编程>第六周 ① 编写一个录入函数:用来从键盘接收n个整型数并存放在一个整型数组中。 在主函数中调用该函数计算出这n个整数之和。

    例题:编写一个录入函数:用来从键盘接收n个整型数并存放在一个整型数组中. 在主函数中调用该函数计算出这n个整数之和. 代码如下: /*代码分析:录入函数需要两个参数:一个参数是需要用来存储数字的数组, ...

  5. 用泰勒公式编写一个sin函数--C语言

    通过麦格劳林展开式,来编写一个sin函数,C语言内置了三角函数,这个三角函数在   #include<math.h>  的头文件下要输入角度数,是有着需要先将角度转化为弧度在进行使用,我编 ...

  6. 以下为一个有理数类,一个有理数由分子和分母组成,目前定义了一个输出函数 十七、编写一个加法函数,可以接收另一个有理数,与自身的值相加 十八、编写一个乘法函数,同理接收另一个有理数,与自身的值相乘

    以下为一个有理数类,一个有理数由分子和分母组成,目前定义了一个输出函数 十七.编写一个加法函数,可以接收另一个有理数,与自身的值相加 十八.编写一个乘法函数,同理接收另一个有理数,与自身的值相乘 十九 ...

  7. 【C语言函数】编写一个C函数,实现保留小数点后第N-1位,从第N位四舍五入。

    编写一个C函数,实现保留小数点后第N-1位,从第N位四舍五入.用该函数对数组a[5]中的各元素从小数点后第2位开始四舍五入. a[5]={2.33,2.56,2.65,2.66,2.30} **输出格 ...

  8. 【Python】利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456

    微信公众号 题目来源:[廖雪峰的官方网站-map/reduce] 利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456: from functo ...

  9. 利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456:

    题目:利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456: 来源:廖雪峰Python上的练习题 思路定位小数点,分割小数部分和整数部分,使用r ...

最新文章

  1. Libvirt — 4 种主机虚拟化网络模式
  2. H. Texas hold'em Poker(2019ICPC区域网络赛沈阳站)
  3. Java判断文件是否为图片文件(GIF,PNG,JPG)
  4. 使用shiro框架,注销问题的解决
  5. 工作总结8:关于Vue中的slot-scope=“scope“
  6. VOIP,PSTN,ISDN
  7. 信息学奥赛一本通 1071:菲波那契数 | OpenJudge NOI 1.5 17:菲波那契数列
  8. c++ helloworld_《Linux设备驱动程序》(二)——Hello World
  9. Android TelephonyManager类
  10. 使用 SQL Server 代理来计划 SSAS 管理任务
  11. java word 添加图片_java – 在word文档中插入图片
  12. 下一个韦神?广西桂林14岁初中生保送清华丘班,明年本硕博连读!
  13. 华北电力计算机考研,华北电力大学考研必知
  14. 焦作大学计算机专业分数线,焦作大学历年分数线 2021焦作大学录取分数线
  15. 【年终总结】回顾我平凡且不平凡的 2021
  16. wps教程 如何恢复文档
  17. 《炼数成金-Linux内核探秘》笔记4
  18. 认知觉醒-2.元认知
  19. 免费开源好看的bootstrap后台模板
  20. 【目标检测】YOLOv3 ,多尺度检测与特征融合

热门文章

  1. 设计模式笔记(1)---开篇(文章索引)
  2. python编译成exe速度会变快吗_python如何编译成exe
  3. linux系统软件包分类,Linux软件包管理和编译安装
  4. 怎么解释三线圈直流电机工作原理更好?
  5. 在AI Studio上部署外部可以直接调用的云端服务
  6. 为什么150kHz定位,距离越远接收信号越强呢?
  7. 如何将代码优雅的放在WORD文档中?
  8. 密封表贴电感的漏磁以及在150kHz导航信号放大器中的性能
  9. 高压桥电路-驱动旧式电话机振铃
  10. python快速排序算法详细图解_Python实现桶排序与快速排序算法结合应用示例