




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2.4 逻辑判断及流程控制,河西学院物电系 2010/01/19,2.4.1 关系运算,所谓关系运算,是指两个元素之间数值的比较,一共有六种可能,具体如下: = = = 小于 小于等于 大于 大于等于 等于 不等于 关系运算的结果只有两种可能,即0或1。0表示该关系式为“假”,即该关系式不成立; 1表示该关系式为“真”,即该关系式成立。例如键入关系式 a=2+2=4 得 a=1,2.4.1 关系运算,注意,前面的单个等号表示赋值,后面的双等号则表示关系运算。式中2+2=4是关系运算,它的优先级高,算出的结果给a赋值,为了改善可读性,最好加上括号,写成a=(2+2=4), 表明是把括号内的关系式
2、的结果给a赋值,但表示关系运算的相等符号仍必须用双等号。,2.4.1 关系运算,MATLAB中的关系运算都适用于矩阵,它是对矩阵的各个元素进行元素群运算,因此两个相比较的矩阵必须有相同的阶数,输出的结果也是同阶矩阵。例如键入 A=magic(6) 得 A= 35 1 6 26 19 24 3 32 7 21 23 25 31 9 2 22 27 20 8 28 33 17 10 15 30 5 34 12 14 16 4 36 29 13 18 11,2.4.1 关系运算,要找到此矩阵中所有被3整除的元素,并在其位置上标以1, 可以用表2-4中的rem函数,rem(A,3)表示A除以3的余数,
3、 余数为零就是整除。 键入 p=(rem(A,3)=0) 得 p= 0 0 1 0 0 1 1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 1 1 0 0 1 0 0 0 1 0 0 1 0,2.4.1 关系运算,rem(A,3)表示A除以3的余数, 余数为零就是整除。,2.4.1 关系运算,关系运算中还包括某些条件判断,例如判断矩阵元素中有无NaN、 Inf值,矩阵是否为实数阵、 稀疏阵或空阵等,它们不能直接用上述六种关系符简单地表述,MATLAB把它们编成了专用的函数以备直接调用,见表2-5。,2.4.1 关系运算,2.4.1 关系运算,2.4.1 关系运算,j,k=f
4、ind(p=0) 给出p矩阵中不为零的元素的两个下标, find(p=0)或lp=find(p=0)给出p矩阵中不为零的元素的顺序号。矩阵元素是按列排序号的,先排第一列,再排第二列 ,依次排完后,再确定它们的顺序号。一个66的矩阵的36个元素的序号排列见表 2-6。因此一个mn阵中下标为(j,k)的元素,其序号为l=(k-1)*n+j。,2.4.1 关系运算,j,k=find(p=0) 给出p矩阵中不为零的元素的两个下标,2.4.1 关系运算,键入 lp=find(p=0) 得 lp= 2 5 9 12 13 16 20 23 27 30 31 34,2.4.1 关系运算,find(p=0)或
5、lp=find(p=0)给出p矩阵中不为零的元素的顺序号。矩阵元素是按列排序号的,先排第一列,再排第二列 ,依次排完后,再确定它们的顺序号。一个66的矩阵的36个元素的序号排列见表 2-6。因此一个mn阵中下标为(j,k)的元素,其序号为l=(k-1)*n+j。,可以看出这些序号确实对应于p中的l元素。矩阵的序号(index)与下标(subscript)是一一对应的。,2.4.2 逻辑运算,逻辑量只能取0(假)和1(真)两个值。逻辑量的基本运算为“与( 如为0,就跳过语句组A,直接执行end后的后续语句。注意,这个end是决不可少的,没有它,在表达式为0时,就找不到继续执行的程序入口。,2.4
6、.3 流程控制语句,(2) if(表达式) 语句组A,else 语句组B,end。 其流程见图2-1(b)。执行到此语句时,计算机先检验if后的(逻辑)表达式,如为1,就执行语句组A; 如为0,就执行语句组B。else用来标志语句组B的执行条件,同时也标志语句组A的结束(免去了end)。同样, 最后的end是不可少的, 没有它,执行完语句组B后,就找不到进入后续程序的入口。 (3) if(表达式1) 语句组A,elseif (表达式2)语句组B, else 语句组C,end。 其流程见图2-1(c)。前两种形式的if语句都是两分支的程序结构,要实现两个以上分支的结构就得采用含elseif的结构
7、。图中表示的是三分支的情况。在语句中间可加入多个elseif以形成多个分支, 只是程序结构显得冗长。,2.4.3 流程控制语句,图 2-1 if语句的三种程序结构形式,2.4.3 流程控制语句,【例2-4-1】 输入数n,判断其奇偶性。程序如下: n=input(n=), if rem(n,2)=0 A=even,else A=odd,end 运行此程序时,程序要求用户输入一个数,然后判断该数是奇数还是偶数。所以该程序共有两个出口。实际上这个程序并不全面,如果用户根本未键入任何数就回车,程序会判断为 “odd” (请读者考虑其原因)。为了使程序在用户无输入时自动中止,可以把程序改为 clc c
8、lear n=7; if isempty(n)=1 A=empty elseif rem(n,2)=0 A=even else A=odd end 实际上这个程序仍不全面,它不能用于负数,请读者分析其原因。,2.4.3 流程控制语句,运行此程序时,程序要求用户输入一个数,然后判断该数是奇数还是偶数。所以该程序共有两个出口。,2.4.3 流程控制语句,实际上这个程序并不全面,如果用户根本未键入任何数就回车,程序会判断为 “odd” (请读者考虑其原因)。为了使程序在用户无输入时自动中止,可以把程序改为if isempty(n)=1 A=empty, elseif rem(n,2)=0 A=eve
9、n,else A=odd,end,2.4.3 流程控制语句,2. while语句 while语句的结构形式为 while (表达式)语句组A,end 其流程见图2-2。执行到此语句时,计算机先检验while后的逻辑表达式,如为1, 它就执行语句组A; 到end处后,它跳回到while的入口,再检验表达式; 如还是1,再执行语句组A; 周而复始,直到表达式不成立(结果为零)为止。此时跳过语句组A,直接执行end后的后续语句。while语句与if语句的不同在于它的分支中是循环地执行某个语句组,故称为循环语句。,2.4.3 流程控制语句,图 2-2 while语句流程图,2.4.3 流程控制语句,【
10、例2-4-2】 求MATLAB中的最大实数。 解: 我们设定一个数x,让它不断增大,直到MATLAB无法表示它的值,只能表示为inf为止。于是,可列出下列程序 clc clear x=1; while x=inf, x1=x; x=2*x; end, x1 format short e 其中我们先设x=1,进入while循环。运行这行程序, 得 x1= 8.9885e+307,2.4.3 流程控制语句,先设x=1,进入while循环,只要x不等于inf,就把x加倍,直到x=inf。如果把此时的x显示出来,它是无穷大,不是题中要找的数。要找的是变为无穷大之前的最大数,因此在对x加倍之前,把它存在
11、x1中,显示的x1就是要求的最大数。运行这行程序, 得 x1= 8.9885e+307,系统的最大浮点实数为 (2-eps)*21023,其十进制形式为realmax = 1.7977e+308。两者数量级接近,但还是相差将近一倍,这是因为我们每次把x翻一番,故求得的数可能比最大数小不到一半,2.4.3 流程控制语句,系统的最大浮点实数为 (2-eps)*21023,其十进制形式为 realmax = 1.7977e+308 两者数量级接近,但还是相差将近一倍,这是因为我们每次把x翻一番,故求得的数可能比最大数小不到一半。如果把程序中的x=2*x改为x=1.1*x,结果就会准确一些,得到 x1
12、=1.783718732622142e+308,2.4.3 流程控制语句,如果把程序中的x=2*x改为x=1.1*x,结果就会准确一些,得到x1=1.783718732622142e+308,2.4.3 流程控制语句,【例2-4-3】 求MATLAB的相对精度。 解: 解题的思路是让y不断减小,直至MATLAB分不出1+y与1的差别为止。其程序为 clc clear y=1; while 1+y1 y1=y; y=y/2; end,y1 结果为 y1 =2.2204e-016,2.4.3 流程控制语句,它就是MATLAB内部给出的浮点数相对精度。,2.4.3 流程控制语句,3. for语句 f
13、or语句的结构形式为 for k=初值: 增量: 终值 语句组A,end 即它把语句组A反复执行N次, 每次执行时程序中的k值不同。有多少个k值呢? 可得 N1+(终值-初值)/增量 【例2-4-4】 用for语句求三角函数表的程序为 clc clear for x=0: 0.1: pi/4 disp(x,sin(x),cos(x),tan(x) end,2.4.3 流程控制语句,所得的结果将和2.3节中的答案相同。这也可以看出,MATLAB的元素群运算功能与一个for循环相当。由于它不需每次检验表达式,因此运算速度比for语句快得多。但是不能认为它可全部取代for语句,由下例可以看出。,2.
14、4.3 流程控制语句,【例2-4-5】 列出构成hilbert矩阵的程序,它需要两重循环: clc clear n=input(n=),format rat%有理数形式 for i=1: n, for j=1: n,h(i,j)=1/(i+j-1); end, end,h 执行时,先按提示输入n,比如输入5, 结果为 h= 1 1/2 1/3 1/4 1/5 1/2 1/3 1/4 1/5 1/6 1/3 1/4 1/5 1/6 1/7 1/4 1/5 1/6 1/7 1/8 1/5 1/6 1/7 1/8 1/9,2.4.3 流程控制语句,2.4.3 流程控制语句,format rat, n
15、=input(n=), for i=1: n for j=1: n h(i,j)=1/(i+j-1); end end h,为改善可读性用缩进方法。结果和上一结果相同,如本例中应写成:,2.4.3 流程控制语句,由于我们现在是在MATLAB命令窗中直接输入程序,因此不得不把它写在一行中。此时要注意,在if、 for、 while与表达式之间应留空格,在表达式与语句组之间必须用空格或逗号分隔,而在语句组的后面,必须要用逗号或分号来与end或else相分隔,否则,MATLAB会显示出错信息并中止运行。 break是中止循环的命令,在循环语句中,可用它在一定条件下跳出循环,这是常常用到的。在多重循环
16、中,break 只能使程序跳出包含它的最内部的那个循环。,2.4.3 流程控制语句,4. switch语句 switch-case-otherwise语句是一种均衡快速的多分支语句,其基本语言结构可表达为: switch 表达式(标量或字符串) case 值1 语句组 A case 值2 语句组B otherwise 语句组N end,2.4.3 流程控制语句,当表达式的值(或字符串)与某case语句中的值(字符串)相同时,它就执行该case语句后的语句组,而后直接跳到终点的end。case语句可以有N-1个,即可以有N-1个分支,如果没有任何一个case值能与表达式值相符,则将执行otherwise后面的语句组N。 例如,判断输入数n的奇、 偶、 空的程序可用switch语句写成 clc clear n=-3 switch mod(n,2), case 1,A=odd case 0,A=even otherwise,A=emp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年哺乳期饮食试题及答案
- 2025年高职老师面试试题及答案
- 2025年磁力相关试题及解析答案
- 2025年中医骨伤科学考试题库及参考答案
- 2025年酒店整 理考试题及答案
- 2025年麻精药品管理试题及答案
- 2025年人力结构面试题及答案
- 2025年医院收费员考试题题库及参考答案
- 2025年呼吸衰竭测试题及答案
- 2025年中国美术常识试题及答案
- 租房合同范本下载(可直接打印)
- (高清版)TDT 1013-2013 土地整治项目验收规程
- GB/T 28781-2012气动缸内径20 mm至100 mm的紧凑型气缸基本尺寸、安装尺寸
- GB/T 20946-2007起重用短环链验收总则
- GB/T 1040.3-2006塑料拉伸性能的测定第3部分:薄膜和薄片的试验条件
- 做好迎接CNAS现场评审工作的培训课件
- 调味品食材定点配送服务方案
- 完整的旧路改造施工程施工方案设计
- 注塑碎料员作业指导书
- 变压器绕组变形测试报告B4-2
- 中职英语第一册book1unit23Theweekendisfun
评论
0/150
提交评论