在讲解第三章课后习题的过程中, 我给大家拓展了一些讲义中没有介绍的新函数, 本文 将对这些新函数进行总结,方便大家学习。
第三章课后习题的讲解视频:
下面表格中列举了这些函数的名称和功能,上方的讲解视频中也有介绍这些函数的使用 方法,大家可以找到对应题目的讲解视频进行学习。另外,表中最后一列给出了各个函数的 重要性, 大家需要重点掌握重要性大于等于四颗星的函数,它们在后续的章节中可能会频繁 使用;重要性小于等于三颗星的函数大家了解即可,它们用的频率不高。
 
notion image

1isempty 函数(★★★★☆)

如果A 为空数组 [ ] , isempty(A) 返回逻辑值 1 (true),否则返回逻辑值 0 (false)。
下面举个应用 isempty 函数的例子: 假设我们想判断常数 x 是否是数组 A 中的某个元素, 如果是则返回逻辑值 1,不是则返回逻辑值 0 。我们可以使用下面两种方法:
notion image
解释: find  函数可以查找非零元素的索引,如果数组中所有的元素均为 0,那么 find  函  数返回空向量[ ] 。因为 A 中所有的元素和 x 都不相等,所以 A==x 返回一个元素全为逻辑值  0 的逻辑向量, 此时 find(A==x,  1)返回空向量[  ] ,因此 isempty(find(A==x,  1))会返回逻辑值 1, 我们对这个结果进行逻辑非~运算, 就会返回逻辑值 0,即 x 不是 A 中的某个元素。
拓展:如果 A 是一个数组,那么命令 length(A) == 0 的返回结果和 isempty(A)的返回结果 一样, MATLAB 推荐大家使用后者判断 A 是否为空数组[ ] ,后者的运行效率更高。

2unifrnd 函数(★★★☆☆)

unifrnd 函数可以生成任意区间内均匀分布的随机数,该函数需要统计和机器学习工具箱 Statistics and Machine Learning Toolbox。
notion image
拓展:a  +  (b  −  a)  *  rand(m, n)等价于unifrnd(a, b, [m, n])或unifrnd(a, b, m, n).

3normrnd 函数(★★☆☆☆)

normrnd  函数可以生成正态分布的随机数,该函数需要统计和机器学习工具箱 Statistics and Machine Learning Toolbox 。(注意: randn 只能生成标准正态分布的随机数)
notion image
拓展:p  +  q ∗ randn(m, n)等价于normrnd(p, q, [m, n])或normrnd(p, q, m, n).

4fibonacci 函数(★☆☆☆☆)

notion image
notion image

5factorial 函数(★★★☆☆)

factorial 函数用于计算阶乘,如果 n 是一个正整数,那么 factorial(n)就是计算 n!。 例如我们计算 3 的阶乘和 10 的阶乘:
notion image
拓展: n 为正整数时, 命令 prod(1:n)也可以计算 n 的阶乘。

6randperm 函数(★★★★★)

randperm  函数是一个非常有用的函数,它能够将一个数字序列进行随机打乱。它有两种 主要的使用方法:
用法 1:randperm(n)可以将向量 1:n 中元素的顺序随机打乱,生成一个长度仍为 n 的新向 量,因此所有可能出现的情况共 n!种(全排列)。例如,当你运行 randperm(4)时,你可能得 到[1 4 3 2],也可能得到[3 2 4 1]。
用法 2:randperm(n,k)表示从打乱的 1:n 序列中随机的选择 k 个数出来,显然这 k 个数都 不相同,且 k 要小于等于 n 。例如,当你运行 randperm(10,3)时,你可能得到[5 3 10],也可能 得到[6 1 8]。
randperm  函数在实际的场景中应用的非常广泛, 第三章课后练习挑战篇中的第五题举了 几个例子, 大家一定要看本讲义最上方的作业讲解视频学习。
(1) 模拟商品推销员访问城市(旅行商问题、 TSP)
(2) 模拟课堂上随机选取同学答题
(3) 模拟抽奖能获得多少金额
(4) 模拟斗地主游戏为地主和农民发牌
注意: randperm(n,k)和 randi(n,k,1)的区别在于:randperm 相当于无放回的抽样,而 randi 相当于有放回的抽样。因此,randperm 函数返回的结果中的各元素都不相同,而 randi 函数返 回的结果中的各元素可能相同。
拓展: 对 randperm  函数背后原理感兴趣的同学可以自行搜索 Fisher –Yates  shuffle  算法 (洗牌算法)。

7randsample 函数(★★★☆☆)

rand 取自单词 random,翻译成中文表示随机;单词 sample 翻译成中文表示样本, 因此根 据字面意思理解 randsample 函数用于生成随机样本,它是 randperm 函数的进阶版本,该函数 需要统计和机器学习工具箱 Statistics and Machine Learning Toolbox。
下面我们介绍它的主要用法:
(1)y = randsample(n,k) 返回从整数 1 到 n 中无放回随机均匀抽取的 k 个值。
y = randsample(n, k)等价于 y = randperm(n, k),只不过 randsample  返回的是列向量, randperm 返回的是行向量。
notion image
(2)y = randsample(n,k,true) 返回从整数 1 到 n 中有放回随机均匀抽取的 k 个值。 y = randsample(n, k, true) 等价于 y = randi(n, k, 1)。
notion image
(3)y = randsample(population,k) 返回一个向量, 其中包含从向量 population 的 值中无放回随机均匀抽取的 k 个值。
notion image
(4 ) y = randsample(population,k,true) 返 回 一 个 向 量 , 其 中 包 含 从 向 量 population 的值中有放回随机均匀抽取的 k 个值。
notion image
(5)y = randsample(n,k,true,w) 使用长度为 n 的非负权重向量 w 来确定整数 i 被 选为 y 的元素的概率(这里一定是有放回的抽样,因此第三个输入参数只能为 true)。
以下是权重向量 w 的介绍:
notion image
(6)y = randsample(population,k,true,w)使用与向量 population 长度相同的非负 权重向量 w 来确定值 population(i) 被选为 y 的元素的概率(这里一定是有放回的抽样, 因此第三个输入参数只能为 true)。
notion image

8datasample 函数(★★☆☆☆)

datasample 函数是 randsample 函数的进阶版,和 randsample 函数相比,datasample 函数还 可以随机抽取矩阵的行或者列。 函数可以设置是有放回还是无放回的抽取,也能指定权重。
notion image
下面我们通过代码了解 datasample 函数常见的用法:
notion image
dim 等于 1 时,表示沿着行方向进行随机抽取,此时得到的是随机的行; dim 等于 2 则表 示沿着列方向进行随机抽取,此时得到的是随机的列;另外,输入参数 'Replace' 后面的 false 表示无放回的随机抽样,  true 则表示有放回的随机抽样。
当然,我们也可以使用 randsample  函数来实现随机抽取矩阵的行或者列,只需要随机生 成行或列的下标索引即可。 因此 datasample 函数可以由 randsample 函数代替。

9ismembertol 函数(★★☆☆☆)

ismembertol  函数和 ismember  函数的功能类似,它在比较元素是否相等时考虑了一定的 容差。
notion image
我们可以看官网这个例子:
notion image
notion image

10uniquetol 函数(★★☆☆☆)

uniquetol 函数和 unique 函数的功能类似,它在比较元素是否相等时考虑了一定的容差。
notion image
我们可以看官网这个例子:
notion image

11prctile 函数(★★★☆☆)

prctile  函数可计算百分位数。百分位数(percentile)是统计学术语,若将一组数据从小 到大排序,并计算相应的累计百分点,则某百分点所对应数据的值就称为这个百分点对应的 百分位数。你可以认为将一组数据升序排列后,处于k%位置的数就是这组数据的第k百分位 数,我们记为
例如,大家熟悉的中位数就是排序后处于中间位置的数,因此中位数也被称为第 50 百分 位数,我们可以记为 ,有时也记为 .
下四分位数则是位于排序后的数据 25%位置上的数,我们用 Q1 表示;上四分位数 则是处在排序后的数据 75%位置上的数,我们用 Q3 表示。
notion image
下面我们来看 prctile 函数的使用方法:
(1)Y = prctile(X,p) 根据区间 [0,100] 中的百分比 p 返回数据向量或数组 X 中元 素的百分位数。
  • 如果 X  是向量,则 Y  是标量或向量,  向量长度等于所请求百分位数的个数 (length(p)) 。Y(i) 包含第 p(i) 个百分位数。
  • 如果 X  是矩阵,则 Y 是行向量或矩阵, 其中 Y  的行数等于所请求百分位数的个数 (length(p)) 。Y 的第 i 行包含 X 的每一列的第 p(i) 个百分位数。
(2)Y = prctile(X,p,dim) 返回运算维度 dim 上的百分位数。
如果 X 是一个矩阵,那么 dim 等于 1 时表示沿着行方向进行计算,得到每一列元素的百 分位数;dim 等于 2 时表示沿着列方向进行计算,得到每一行元素的百分位数。
notion image

12meshgrid 函数(★★★★☆)

meshgrid 函数可以基于向量 x 和 y 中包含的坐标来返回二维网格坐标。
举个具体的例子帮助大家理解:假设 x 轴坐标上的取值是[0  1 2  3 4] ,y 轴坐标上的取值 是[0 1 2 3],现在请使用 x 轴坐标和 y 轴坐标共同创建下图所示的二维网格坐标:
notion image
分析: x 轴坐标上的取值有 5 种, y 轴坐标上的取值有 4 种, 将取值进行组合有 20 种, 因此上方左图有 20 个交点,每个交点对应一个网格坐标。如果指定交点的排列顺序为沿着 x 轴的正方向和 y 轴的正方向,这样就能表示这 20 个交点的网格坐标,结果在上方右图中。
在 MATLAB  中,会将点的坐标(x, y)拆分成横坐标矩阵和纵坐标矩阵分别保存,我们可 以使用 meshgrid 函数得到这两个矩阵:
notion image
进一步地, 如果我们想在这 20 个交点构成的二维网格上计算二元函数 的值,我们可以使用下面的代码:
notion image
另外,如果我们只给 meshgrid 函数一个输入变量,那么命令[X,Y] = meshgrid(x) 得到的 结果和 [X,Y] = meshgrid(x,x)得到的结果完全相同。
notion image
事实上 meshgrid 函数在三维图的绘制中用的比较多,我们先给大家看个例子, 后续章节 中会系统讲解三维图的绘制方法。
绘制在x和y都位于区间[ − 1, 1]上的图形。
notion image

13rng 函数(★★★★★)

rng 函数可用来设置随机数种子,这样能生成可重复的随机数。
notion image
使用随机数生成函数(例如 rand, randi 等)之前,使用 rng(seed)命令设置随机数种子,这样 能保证生成的随机数被固定下来。设置不同的随机数种子生成的随机数通常都不相同。
拓展: 每次重新启动 MATLAB  时,随机数生成器均复位到相同的状态,这样使用生成 随机数的命令会返回相同的结果。 我们可以使用 rng('shuffle') 命令,它可以根据当前的时间 使用不同的种子重新设定生成器的种子,这样能避免重复生成相同的随机数。

14poissrnd 函数(★★☆☆☆)

poissrnd  函数用于生成泊松分布的随机数,该函数需要统计和机器学习工具箱 Statistics and Machine Learning Toolbox。
设随机变量X 所有可能的取值为。,12,… ,而取各个值的概率为:
notion image
其中入>0  是常数,则称随机变量X 服从参数为的泊松分布,可以证明:参数为入 的泊 松分布的期望和方差均为入.
泊松分布适合于描述单位时间内随机事件发生的次数,参数入就是单位时间内随机事件 的平均发生次数,有时也被称为事件发生的速率。
notion image
例子:假设某商店每天的客流量服从入=300 的泊松分布,请模拟这个商店最近一个月
每天的客流量,并计算均值和方差。
notion image

15exprnd 函数(★★☆☆☆)

exprnd 函数用来生成指数分布的随机数,该函数需要统计和机器学习工具箱 Statistics and Machine Learning Toolbox。
notion image
其中 θ>0 为常数,则称X 服从参数为 θ 的指数分布。
若X 服从参数为 θ 的指数分布,则记为X~EXP(θ),可以证明 X 的期望为 θ ,方差为.
如果使用随机变量X 表示一件物品的寿命,例如灯泡的使用寿命,那么θ 的含义可以代 表平均寿命。
notion image
例子: 假设某工厂生产的二极管的使用寿命服从均值为 2000 小时的指数分布,请随机生 成 1000 个二极管的使用寿命,并计算均值和方差 (结果请四舍五入)。
notion image
拓展: 有些教材也使用下面的概率密度函数定义指数分布:
notion image
这种定义方法和上面的定义方法是等价的,此时 

16nchoosek 函数(★★★☆☆)

nchoosek 函数主要用来计算组合数,也能返回从向量 v 中抽取 k 个元素的所有组合。
notion image
notion image
下面是 nchoosek 函数的第二种用法: 返回从向量 v 中抽取 k 个元素的所有组合。
notion image

17perms 函数(★★★☆☆)

perms 函数可用来返回向量 v 中各元素所有可能的排列情况。
notion image
拓展:(1)如果 v 中有 k 个元素,那么返回的矩阵的行数为 k 的阶乘;
(2)randperm(n) 得到的结果实际上就是从 perms(1:n)返回的矩阵中随机的抽取一行。

Loading...
公告
🎉大学生科技协会(2024)网站试运行🎉
-- 感谢您的支持 --- 科协获:
小平科技创新团队 (青少年科技创新领域国家级最高荣誉,全校唯一)
全国高校百强社团 中国大学生ican物联网创新创业实践教育基地 校十佳社团 “一院一品”智能空间 科技竞赛优秀组织单位
阅读科协简介了解更多吧!