赞
踩
讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。
MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili
下面我们介绍三个非常重要的函数,它们的作用请看下表:
其中,all函数和any函数的用法类似,以all函数为例,它的用法如下:
(1)如果A是一个向量,那么当所有元素均为非零值时,all(A)返回逻辑值1 (true),当存在一个或多个元素为零时,返回逻辑值0 (false)。
(2)如果A是一个矩阵,那么all(A,dim) 沿着dim维来判断元素是否全为非零值,dim等于1时沿着行方向来判断每一列是否全为非零值,并将结果返回为一个全为逻辑值的行向量;dim等于2时表示沿着列方向判断每一行是否全为非零值,并将结果返回为一个全为逻辑值的列向量。特别地,当dim等于1时,可以直接简写成all(A)。
(事实上,all函数和any函数的用法和我们之前讲解的sum函数非常像)
可以看出,all函数相当于对向量或者矩阵的元素进行‘逻辑与&’运算,只有全为非零值时才返回逻辑值1。而any函数则相当于对元素进行‘逻辑或|’运算,存在至少一个非零值时就会返回逻辑值1。
我们来看any函数的例子:
事实上,all函数和any函数很少直接运用在数值矩阵上,它常常配合逻辑矩阵来实现特定的功能。我们来看下面的练习题:
(1)请随机生成一个100行3列的矩阵,用来记录学生的考试成绩:矩阵每一行代表一名同学,每一列代表一门科目的成绩,矩阵中的每个元素都是区间[50,100]内的随机整数。
score = randi([50,100],100,3)
(2)三门科目的成绩都不低于85分的同学可以获得奖学金评选的资格,请指出哪些同学可以获得资格。要求返回一个包含100个元素的逻辑向量,元素为逻辑值1的位置对应的同学有评选资格。
all(score >= 85,2)
(3)请指出哪些同学挂科了,至少有一门科目没过60分就算挂科。要求返回一个包含100个元素的逻辑向量,元素为逻辑值1的位置对应的同学挂科了。
any(score < 60,2)
(4)这三门科目中是否存在科目没有人挂科(所有同学的这一门科目的成绩都高于60分)。要求返回一个包含3个元素的逻辑向量,元素为逻辑1的位置对应的科目表示没有人挂科。
all(score >= 60)
大家应该注意到了,上面问题的答案有一点冗余。例如第二问我们关心的是哪些同学可以获得评选资格,但是答案返回的结果是一个长度为100的逻辑向量,向量中也包含了没有获得评选资格的同学,他们用逻辑值0表示。那么有没有一种方法能够找到这个向量中所有非零元素呢?find函数可以帮助我们实现!下面是MATLAB官方文档对于find函数的介绍:
默认情况下,find函数会返回所有非零元素的索引,如果只给find函数一个返回值,那么会返回所有非零元素的线性索引;如果给两个返回值,那么会返回非零元素对应的行和列下标;如果给三个返回值,那么还会返回非零元素构成的向量。另外,大家也可以指定返回前n个非零元素的索引,只需要给定第二个输入参数n,此时会返回前n个非零元素的索引,如果要返回后n个非零元素的索引,那么需要使用find(X,n,'last')。
回到上面练习题的第二个问题,我们可以使用下面的命令对代码进行改进,这样就可以返回获得资格的同学的索引:
tmp = all(score >= 85,2);
ind = find(tmp)
练习题(接着上题来):
(5)找出恰好挂了两门科目的同学的编号。
tmp = sum(score < 60,2); % 每位同学挂科的数目
find(tmp == 2)
(6)找到总分超过260分的同学的编号。
total_score = sum(score,2); % 计算每位同学的总分
find(total_score > 260)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。