Matlab内部函数

a. 基本随机数

Matlab中有两个最基本生成随机数的函数。

1.rand()

生成(0,1)区间上均匀分布的随机变量。基本语法:

rand([M,N,P ...])

生成排列成M*N*P... 多维向量的随机数。如果只写M,则生成M*M矩阵;如果参数为[M,N]可以省略掉方括号。一些例子:

rand(5,1) %生成5个随机数排列的列向量,一般用这种格式

rand(5) %生成5行5列的随机数矩阵

rand([5,4]) %生成一个5行4列的随机数矩阵

生成的随机数大致的分布。

x=rand(100000,1);

hist(x,30);

由此可以看到生成的随机数很符合均匀分布。(视频教程会略提及hist()函数的作用)

2.randn()

生成服从标准正态分布(均值为0,方差为1)的随机数。基本语法和rand()类似。

randn([M,N,P ...])

生成排列成M*N*P... 多维向量的随机数。如果只写M,则生成M*M矩阵;如果参数为[M,N]可以省略掉方括号。一些例子:

randn(5,1) %生成5个随机数排列的列向量,一般用这种格式

randn(5) %生成5行5列的随机数矩阵

randn([5,4]) %生成一个5行4列的随机数矩阵

生成的随机数大致的分布。

x=randn(100000,1);

hist(x,50);

由图可以看到生成的随机数很符合标准正态分布。

b. 连续型分布随机数

如果你安装了统计工具箱(Statistic Toolbox),除了这两种基本分布外,还可以用Matlab内部函数生成符合下面这些分布的随机数。

3.unifrnd()

和rand()类似,这个函数生成某个区间内均匀分布的随机数。基本语法

unifrnd(a,b,[M,N,P,...])

生成的随机数区间在(a,b)内,排列成M*N*P... 多维向量。如果只写M,则生成M*M矩阵;如果参数为[M,N]可以省略掉方括号。一些例子:

unifrnd(-2,3,5,1) %生成5个随机数排列的列向量,一般用这种格式

unifrnd(-2,3,5) %生成5行5列的随机数矩阵

unifrnd(-2,3,[5,4]) %生成一个5行4列的随机数矩阵

%注:上述语句生成的随机数都在(-2,3)区间内.

生成的随机数大致的分布。

x=unifrnd(-2,3,100000,1);

hist(x,50);

由图可以看到生成的随机数很符合区间(-2,3)上面的均匀分布。

4.normrnd()

和randn()类似,此函数生成指定均值、标准差的正态分布的随机数。基本语法

normrnd(mu,sigma,[M,N,P,...])

生成的随机数服从均值为mu,标准差为sigma(注意标准差是正数)正态分布,这些随机数排列成M*N*P... 多维向量。如果只写M,则生成M*M矩阵;如果参数为[M,N]可以省略掉方括号。一些例子:

normrnd(2,3,5,1) %生成5个随机数排列的列向量,一般用这种格式

normrnd(2,3,5) %生成5行5列的随机数矩阵

normrnd(2,3,[5,4]) %生成一个5行4列的随机数矩阵

%注:上述语句生成的随机数所服从的正态分布都是均值为2,标准差为3.

生成的随机数大致的分布。

x=normrnd(2,3,100000,1);

hist(x,50);

如图,上半部分是由上一行语句生成的均值为2,标准差为3的10万个随机数的大致分布,下半部分是用小节“randn()”中最后那段语句生成10万个标准正态分布随机数的大致分布。

注意到上半个图像的对称轴向正方向偏移(准确说移动到x=2处),这是由于均值为2的结果。

而且,由于标准差是3,比标准正态分布的标准差(1)要高,所以上半部分图形更胖(注意x轴刻度的不同)。

5.chi2rnd()

此函数生成服从卡方(Chi-square)分布的随机数。卡方分布只有一个参数:自由度v。基本语法

chi2rnd(v,[M,N,P,...])

生成的随机数服从自由度为v的卡方分布,这些随机数排列成M*N*P... 多维向量。如果只写M,则生成M*M矩阵;如果参数为[M,N]可以省略掉方括号。一些例子:

chi2rnd(5,5,1) %生成5个随机数排列的列向量,一般用这种格式

chi2rnd(5,5) %生成5行5列的随机数矩阵

chi2rnd(5,[5,4]) %生成一个5行4列的随机数矩阵

%注:上述语句生成的随机数所服从的卡方分布的自由度都是5

生成的随机数大致的分布。

x=chi2rnd(5,100000,1);

hist(x,50);

6.frnd()

此函数生成服从F分布的随机数。F分布有2个参数:v1, v2。基本语法

frnd(v1,v2,[M,N,P,...])

生成的随机数服从参数为(v1,v2)的卡方分布,这些随机数排列成M*N*P... 多维向量。如果只写M,则生成M*M矩阵;如果参数为[M,N]可以省略掉方括号。一些例子:

frnd(3,5,5,1) %生成5个随机数排列的列向量,一般用这种格式

frnd(3,5,5) %生成5行5列的随机数矩阵

frnd(3,5,[5,4]) %生成一个5行4列的随机数矩阵

%注:上述语句生成的随机数所服从的参数为(v1=3,v2=5)的F分布

生成的随机数大致的分布。

x=frnd(3,5,100000,1);

hist(x,50);

从结果可以看出来, F分布集中在x正半轴的左侧,但是它在极端值处也很可能有一些取值。

7.trnd()

此函数生成服从t(Student's t Distribution,这里Student不是学生的意思,而是Cosset.W.S.的笔名)分布的随机数。t分布有1个参数:自由度v。基本语法

trnd(v,[M,N,P,...])

生成的随机数服从参数为v的t分布,这些随机数排列成M*N*P... 多维向量。如果只写M,则生成M*M矩阵;如果参数为[M,N]可以省略掉方括号。一些例子:

trnd(7,5,1) %生成5个随机数排列的列向量,一般用这种格式

trnd(7,5) %生成5行5列的随机数矩阵

trnd(7,[5,4]) %生成一个5行4列的随机数矩阵

%注:上述语句生成的随机数所服从的参数为(v=7)的t分布

生成的随机数大致的分布。

x=trnd(7,100000,1);

hist(x,50);

可以发现t分布比标准正太分布要“瘦”,不过随着自由度v的增大,t分布会逐渐变胖,当自由度为正无穷时,它就变成标准正态分布了。

接下来的分布相对没有这么常用,同时这些函数的语法和前面函数语法相同,所以写得就简略一些——在视频中也不会讲述,你只需按照前面那几个分布的语法套用即可,应该不会有任何困难——时间足够的话这是一个不错的练习机会。

8.betarnd()

此函数生成服从Beta分布的随机数。Beta分布有两个参数分别是A和B。下图是A=2,B=5 的beta分布的PDF图形。

生成beta分布随机数的语法是:

betarnd(A,B,[M,N,P,...])

9.exprnd()

此函数生成服从指数分布的随机数。指数分布只有一个参数: mu, 下图是mu=3时指数分布的PDF图形

生成指数分布随机数的语法是:

betarnd(mu,[M,N,P,...])

10.gamrnd()

生成服从Gamma分布的随机数。Gamma分布有两个参数:A和B。下图是A=2,B=5 Gamma分布的PDF图形

生成Gamma分布随机数的语法是:

gamrnd(A,B,[M,N,P,...])

11.lognrnd()

生成服从对数正态分布的随机数。其有两个参数:mu和sigma,服从这个这样的随机数取对数后就服从均值为mu,标准差为sigma的正态分布。下图是mu=-1, sigma=1/1.2的对数正态分布的PDF图形。

生成对数正态分布随机数的语法是:

lognrnd(mu,sigma,[M,N,P,...])

12.raylrnd()

生成服从瑞利(Rayleigh)分布的随机数。其分布有1个参数:B。下图是B=2的瑞利分布的PDF图形。

生成瑞利分布随机数的语法是:

raylrnd(B,[M,N,P,...])

13.wblrnd()

生成服从威布尔(Weibull)分布的随机数。其分布有2个参数:scale 参数 A和shape 参数 B。下图是A=3,B=2的Weibull分布的PDF图形。

生成Weibull分布随机数的语法是:

wblrnd(A,B,[M,N,P,...])

还有非中心卡方分布(ncx2rnd),非中心F分布(ncfrnd),非中心t分布(nctrnd),括号中是生成服从这些分布的函数,具体用法用:

help 函数名

查找。

c. 离散型分布随机数

离散分布的随机数可能的取值是离散的,一般是整数。

14.unidrnd()

此函数生成服从离散均匀分布的随机数。Unifrnd是在某个区间内均匀选取实数(可为小数或整数),Unidrnd是均匀选取整数随机数。离散均匀分布随机数有1个参数:n, 表示从{1, 2, 3, ... N}这n个整数中以相同的概率抽样。基本语法:

unidrnd(n,[M,N,P,...])

这些随机数排列成M*N*P... 多维向量。如果只写M,则生成M*M矩阵;如果参数为[M,N]可以省略掉方括号。一些例子:

unidrnd(5,5,1) %生成5个随机数排列的列向量,一般用这种格式

unidrnd(5,5) %生成5行5列的随机数矩阵

unidrnd(5,[5,4]) %生成一个5行4列的随机数矩阵

%注:上述语句生成的随机数所服从的参数为(10,0.3)的二项分布

生成的随机数大致的分布。

x=unidrnd(9,100000,1);

hist(x,9);

可见,每个整数的取值可能性基本相同。

15.binornd()

此函数生成服从二项分布的随机数。二项分布有2个参数:n,p。考虑一个打靶的例子,每枪命中率为p,共射击N枪,那么一共击中的次数就服从参数为(N,p)的二项分布。注意p要小于等于1且非负,N要为整数。基本语法:

binornd(n,p,[M,N,P,...])

生成的随机数服从参数为(N,p)的二项分布,这些随机数排列成M*N*P... 多维向量。如果只写M,则生成M*M矩阵;如果参数为[M,N]可以省略掉方括号。一些例子:

binornd(10,0.3,5,1) %生成5个随机数排列的列向量,一般用这种格式

binornd(10,0.3,5) %生成5行5列的随机数矩阵

binornd(10,0.3,[5,4]) %生成一个5行4列的随机数矩阵

%注:上述语句生成的随机数所服从的参数为(10,0.3)的二项分布

生成的随机数大致的分布。

x=binornd(10,0.45,100000,1);

hist(x,11);

我们可以将此直方图解释为,假设每枪射击命中率为0.45,每论射击10次,共进行10万轮,这个图就表示这10万轮每轮命中成绩可能的一种情况。

16.geornd()

此函数生成服从几何分布的随机数。几何分布的参数只有一个:p。几何分布的现实意义可以解释为,打靶命中率为p,不断地打靶,直到第一次命中目标时没有击中次数之和。注意p是概率,所以要小于等于1且非负。基本语法:

geornd(p,[M,N,P,...])

这些随机数排列成M*N*P... 多维向量。如果只写M,则生成M*M矩阵;如果参数为[M,N]可以省略掉方括号。一些例子:

geornd(0.4,5,1) %生成5个随机数排列的列向量,一般用这种格式

geornd(0.4,5) %生成5行5列的随机数矩阵

geornd(0.4,[5,4]) %生成一个5行4列的随机数矩阵

%注:上述语句生成的随机数所服从的参数为(0.4)的二项分布

生成的随机数大致的分布。

x=geornd(0.4,100000,1);

hist(x,50);

17.poissrnd()

此函数生成服从泊松(Poisson)分布的随机数。泊松分布的参数只有一个:lambda。此参数要大于零。基本语法:

geornd(p,[M,N,P,...])

这些随机数排列成M*N*P... 多维向量。如果只写M,则生成M*M矩阵;如果参数为[M,N]可以省略掉方括号。一些例子:

poissrnd(2,5,1) %生成5个随机数排列的列向量,一般用这种格式

poissrnd(2,5) %生成5行5列的随机数矩阵

poissrnd(2,[5,4]) %生成一个5行4列的随机数矩阵

%注:上述语句生成的随机数所服从的参数为(2)的泊松分布

生成的随机数大致的分布。

x=poissrnd(2,100000,1);

hist(x,50);

其他离散分布还有超几何分布(Hyper-geometric, 函数是hygernd)等,详细见Matlab帮助文档。

【matlab编程】matlab随机数函数的更多相关文章

  1. matlab 全部的随机数函数

    matlab 全部的随机数函数 (一)Matlab内部函数 a. 基本随机数 Matlab中有两个最基本生成随机数的函数. 1.rand() 生成(0,1)区间上均匀分布的随机变量.基本语法: ran ...

  2. Matlab编程实例(3) 函数向左或向右平移N点 左移右移

    %函数移动 close all; clear all; dir=input('请输入平移方向,“1”为向左,“2”为向右'); if dir~=1&&dir~=2;%输入控制    e ...

  3. 【转】利用matlab生成随机数函数

    原文地址:利用matlab生成随机数函数 rand(n):生成0到1之间的n阶随机数方阵  rand(m,n):生成0到1之间的m×n的随机数矩阵 (现成的函数) betarnd:贝塔分布的随机数生成 ...

  4. Matlab编程基础

    平台:Win7 64 bit,Matlab R2014a(8.3) “Matlab”是“Matrix Laboratory” 的缩写,中文“矩阵实验室”,是强大的数学工具.本文侧重于Matlab的编程 ...

  5. MATLAB学习笔记(七)——MATLAB解方程与函数极值

    (一)线性方程组求解 包含n个未知数,由n个方程构成的线性方程组为: 其矩阵表示形式为: 其中 一.直接求解法 1.左除法 x=A\b; 如果A是奇异的,或者接近奇异的.MATLAB会发出警告信息的. ...

  6. MATLAB 编程风格指南及注意事项

    MATLAB编程风格指南Richard Johnson 著Genial 译MATLAB 编程风格指南Richard JohnsonVersion 1.5,Oct. 2002版权: Datatool 所 ...

  7. 【Matlab编程】哈夫曼编码的Matlab实现

    在前年暑假的时候,用C实现了哈夫曼编译码的功能,见文章<哈夫曼树及编译码>.不过在通信仿真中,经常要使用到Matlab编程,所以为了方便起见,这里用Matlab实现的哈夫曼编码的功能.至于 ...

  8. matlab和c++混合编程---matlab和vs的环境配置问题及方法和步骤(转载)

    matlab和c++混合编程---方法和步骤 matlab和c++混合编程---matlab和vs的环境配置问题 摘要:Matlab具有很强的数值计算和分析等能力,而C/C++是目前最为流行的高级程序 ...

  9. 一些matlab教程资源收藏,使用matlab编程的人还是挺多的

    Matlab教程专题资源免费下载整理合集收藏 <MATLAB从入门到精通>高清文字版[PDF] 103.9MB 简体中文 <矩阵实验室>(Mathworks.Matlab.R2 ...

  10. MATLAB编程技巧

    [摘要] MATLAB是一种科学计算语言,和C.Fortran等高级语言相类似,能方便的实现程序控制.以下介绍一点matlab编程的技巧. 嵌套计算 程序执行的速度取决于调用的子程序的个数和算法实现. ...

随机推荐

  1. Android简易实战教程--第四十九话《满屏拖动的控件》

    今天做个有意思的效果吧,控件的拖拽,简单实用,逻辑清晰点3分钟看完. 说的很高大上,其实就是拖动Button按钮跟着鼠标位置满手机屏幕跑罢了. 直接上简单的代码吧: public class Main ...

  2. mongo 读分析

    分布式读 读冲突 分布式中数据库有多份数据,各份数据可能存在不一致性. mongo 只会写到primary节点上,理论上来说不会有文档冲突,也就是说数据库中的数据都以primary节点为标准. 但是有 ...

  3. BlockingQueue(阻塞队列)详解

    一. 前言 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全"传输"数据的问题.通过这些高效并且线程安全的队列类,为我们快速搭建高质量 ...

  4. Dynamics CRM2016 在实体命名时需要注意的事项

    在使用web api的过程中遇到个很无语的设置,体现在对实体名的设置上,之前看到accounts以为只是在实体名上加个s,也没往深处看,但真正进入项目实施了问题就来了,city直接变成了cities不 ...

  5. 微信小程序基础之试图控件View、ScrollView、Swiper

    今天写一篇关于微信小程序视图控件的文章,主要是介绍界面的搭建和部分操作js交互功能的介绍,转载请注明出处,谢谢~ 首先显示首页结构.创建三个navigator,用来跳转页面: <!--index ...

  6. Support Annotation Library使用详解

    概述 Support Annotation Library是在Android Support Library19.1版本开始引入的一个全新的函数包,它包含了诸多有用的元注解.用来帮助开发者在编译期间发 ...

  7. 一个都不能少: DevOps的3大核心基础架构

    DevOps的涵盖面非常广,因为这个概念的火热,又有很多文章和技术都在把DevOps的帽子扣在自己头上,让很多人迷惑不解.其实,DevOps的知识体系如果从顶层上来分解,只有2块:方法论和工具链.方法 ...

  8. FFmpeg源代码简单分析:av_write_frame()

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  9. Java基础---Java---正则表达式-----匹配、切割、替换、获取等方法

    正则表达式:符合一定规则的表达式 作用:用于专门操作字符串 特点:用于一些特定的符号来表示一些代码操作,这样就简化书写,主要是学习一些特殊符号的使用 好处:可以简化对字符串的复杂操作. 弊端:符号定义 ...

  10. MySQL输入密码后闪退,这里有解

    不知道怎么的,我的MySQL就像抽风了一样,可能是不想理我了吧.只要我输入密码,它就会闪退.而且使用其他的数据库管理工具也是链接不成功的.于是下决心,调教调教它,于是有了下面的这些解决方案. 解决方法 ...