第周逻辑判断及流程控制_第1页
第周逻辑判断及流程控制_第2页
第周逻辑判断及流程控制_第3页
第周逻辑判断及流程控制_第4页
第周逻辑判断及流程控制_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

注意,前面的单个等号表示赋值,后面的双等号则表示关系运算。式中2+2==4是关系运算,它的优先级高,算出的结果给a赋值,为了改善可读性,最好加上括号,写成a=(2+2==4),表明是把括号内的关系式的结果给a赋值,但表示关系运算的相等符号仍必须用双等号。当前第1页\共有40页\编于星期三\9点MATLAB中的关系运算都适用于矩阵,它是对矩阵的各个元素进行元素群运算,因此两个相比较的矩阵必须有相同的阶数,输出的结果也是同阶矩阵。例如键入

A=magic(6)得

A=3516261924 3327212325 3192222720 82833171015 30534121416 43629131811当前第2页\共有40页\编于星期三\9点要找到此矩阵中所有被3整除的元素,并在其位置上标以1,可以用表2-4中的rem函数,rem(A,3)表示A除以3的余数,余数为零就是整除。键入

p=(rem(A,3)==0)得

p=001001100100010010001001100100010010当前第3页\共有40页\编于星期三\9点rem(A,3)表示A除以3的余数,余数为零就是整除。当前第4页\共有40页\编于星期三\9点关系运算中还包括某些条件判断,例如判断矩阵元素中有无NaN、Inf值,矩阵是否为实数阵、稀疏阵或空阵等,它们不能直接用上述六种关系符简单地表述,MATLAB把它们编成了专用的函数以备直接调用,见表2-5。当前第5页\共有40页\编于星期三\9点当前第6页\共有40页\编于星期三\9点当前第7页\共有40页\编于星期三\9点[j,k]=find(p~=0)给出p矩阵中不为零的元素的两个下标,find(p~=0)或lp=find(p~=0)给出p矩阵中不为零的元素的顺序号。矩阵元素是按列排序号的,先排第一列,再排第二列……,依次排完后,再确定它们的顺序号。一个6×6的矩阵的36个元素的序号排列见表2-6。因此一个m×n阵中下标为(j,k)的元素,其序号为l=(k-1)*n+j。当前第8页\共有40页\编于星期三\9点[j,k]=find(p~=0)给出p矩阵中不为零的元素的两个下标当前第9页\共有40页\编于星期三\9点键入

lp=find(p~=0)'得

lp=259121316202327303134

当前第10页\共有40页\编于星期三\9点find(p~=0)或lp=find(p~=0)给出p矩阵中不为零的元素的顺序号。矩阵元素是按列排序号的,先排第一列,再排第二列……,依次排完后,再确定它们的顺序号。一个6×6的矩阵的36个元素的序号排列见表2-6。因此一个m×n阵中下标为(j,k)的元素,其序号为l=(k-1)*n+j。可以看出这些序号确实对应于p中的l元素。矩阵的序号(index)与下标(subscript)是一一对应的。当前第11页\共有40页\编于星期三\9点逻辑量只能取0(假)和1(真)两个值。逻辑量的基本运算为“与(&)”、“或(|)”和“非(~)”三种。有时也包括“异或(xor)”,不过“异或”可以用三种基本运算组合而成。两个逻辑量经这三种逻辑运算后的输出仍然是逻辑量,表示逻辑量的输入/输出关系的表称为真值表,见表2-7。当前第12页\共有40页\编于星期三\9点所有的算法语言中都有逻辑运算。MATLAB的特点是使逻辑运算用于元素群,得出同阶的0-1矩阵。为了按列、按行判断一群元素的逻辑值,它又增加了两种对元素群的逻辑运算函数all(全为真)和any(不全为假),见表2-5。现在来看逻辑式u=p|~p,这是把p和非p求“或”。得

u=111111111111111111111111111111111111当前第13页\共有40页\编于星期三\9点~p就是把p中的0元素换成1,1元素换成0。在p和非p对应位置上的元素,必有一个是1,把p和~p“或”起来,一定是全1。当前第14页\共有40页\编于星期三\9点all和any后的输入变量应为矩阵,它是按列运算的。从它们的定义可知

all(p)=000000(列中有一个元素为0,即得0)all(u)=111111(列中元素为全1,才得1) any(p)=111111(列中有一个元素为1,即得1)

当前第15页\共有40页\编于星期三\9点当前第16页\共有40页\编于星期三\9点计算机程序通常都是从前到后逐条执行的。但有时也会根据实际情况,中途改变执行的次序,称为流程控制。MATLAB设有四种流程控制的语言结构,即if语句、while语句、for语句和switch语句。

1.if语句根据复杂程度,if语句有三种形式。

(1)if(表达式)语句组A,end。其流程见图2-1(a)。执行到此语句时,计算机先检验if后的逻辑表达式,如为1,就执行语句组A;如为0,就跳过语句组A,直接执行end后的后续语句。注意,这个end是决不可少的,没有它,在表达式为0时,就找不到继续执行的程序入口。当前第17页\共有40页\编于星期三\9点(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的结构。图中表示的是三分支的情况。在语句中间可加入多个elseif以形成多个分支,只是程序结构显得冗长。当前第18页\共有40页\编于星期三\9点图2-1if语句的三种程序结构形式当前第19页\共有40页\编于星期三\9点【例2-4-1】输入数n,判断其奇偶性。程序如下:

n=input('n='),ifrem(n,2)==0A='even',elseA='odd',end运行此程序时,程序要求用户输入一个数,然后判断该数是奇数还是偶数。所以该程序共有两个出口。实际上这个程序并不全面,如果用户根本未键入任何数就回车,程序会判断为“odd”(请读者考虑其原因)。为了使程序在用户无输入时自动中止,可以把程序改为

clcclearn=7;ifisempty(n)==1A='empty'elseifrem(n,2)==0A='even'elseA='odd'end实际上这个程序仍不全面,它不能用于负数,请读者分析其原因。当前第20页\共有40页\编于星期三\9点运行此程序时,程序要求用户输入一个数,然后判断该数是奇数还是偶数。所以该程序共有两个出口。当前第21页\共有40页\编于星期三\9点实际上这个程序并不全面,如果用户根本未键入任何数就回车,程序会判断为“odd”(请读者考虑其原因)。为了使程序在用户无输入时自动中止,可以把程序改为ifisempty(n)==1A='empty',elseifrem(n,2)==0A='even',elseA='odd',end当前第22页\共有40页\编于星期三\9点2.while语句

while语句的结构形式为

while(表达式)语句组A,end其流程见图2-2。执行到此语句时,计算机先检验while后的逻辑表达式,如为1,它就执行语句组A;到end处后,它跳回到while的入口,再检验表达式;如还是1,再执行语句组A;周而复始,直到表达式不成立(结果为零)为止。此时跳过语句组A,直接执行end后的后续语句。while语句与if语句的不同在于它的分支中是循环地执行某个语句组,故称为循环语句。当前第23页\共有40页\编于星期三\9点图2-2while语句流程图当前第24页\共有40页\编于星期三\9点

【例2-4-2】求MATLAB中的最大实数。

解:我们设定一个数x,让它不断增大,直到MATLAB无法表示它的值,只能表示为inf为止。于是,可列出下列程序

clcclearx=1;whilex~=inf,x1=x;x=2*x;end,x1formatshorte其中我们先设x=1,进入while循环。运行这行程序,得

x1=8.9885e+307当前第25页\共有40页\编于星期三\9点先设x=1,进入while循环,只要x不等于inf,就把x加倍,直到x=inf。如果把此时的x显示出来,它是无穷大,不是题中要找的数。要找的是变为无穷大之前的最大数,因此在对x加倍之前,把它存在x1中,显示的x1就是要求的最大数。运行这行程序,得

x1=8.9885e+307系统的最大浮点实数为(2-eps)*21023,其十进制形式为realmax=1.7977e+308。两者数量级接近,但还是相差将近一倍,这是因为我们每次把x翻一番,故求得的数可能比最大数小不到一半当前第26页\共有40页\编于星期三\9点系统的最大浮点实数为(2-eps)*21023,其十进制形式为

realmax=1.7977e+308两者数量级接近,但还是相差将近一倍,这是因为我们每次把x翻一番,故求得的数可能比最大数小不到一半。如果把程序中的x=2*x改为x=1.1*x,结果就会准确一些,得到

当前第27页\共有40页\编于星期三\9点如果把程序中的x=2*x改为x=1.1*x,结果就会准确一些,得到当前第28页\共有40页\编于星期三\9点

【例2-4-3】求MATLAB的相对精度。

解:解题的思路是让y不断减小,直至MATLAB分不出1+y与1的差别为止。其程序为

clccleary=1;while1+y>1y1=y;y=y/2;end,y1结果为

y1=2.2204e-016当前第29页\共有40页\编于星期三\9点它就是MATLAB内部给出的浮点数相对精度。当前第30页\共有40页\编于星期三\9点

3.for语句

for语句的结构形式为

fork=初值:增量:终值语句组A,end即它把语句组A反复执行N次,每次执行时程序中的k值不同。有多少个k值呢?可得

N=1+(终值-初值)/增量

【例2-4-4】用for语句求三角函数表的程序为clcclearforx=0:0.1:pi/4disp([x,sin(x),cos(x),tan(x)])end当前第31页\共有40页\编于星期三\9点所得的结果将和2.3节中的答案相同。这也可以看出,MATLAB的元素群运算功能与一个for循环相当。由于它不需每次检验表达式,因此运算速度比for语句快得多。但是不能认为它可全部取代for语句,由下例可以看出。当前第32页\共有40页\编于星期三\9点

【例2-4-5】列出构成hilbert矩阵的程序,它需要两重循环:clcclearn=input('n='),formatrat%有理数形式fori=1:n,forj=1:n,h(i,j)=1/(i+j-1);end,end,h执行时,先按提示输入n,比如输入5,结果为

h=11/21/31/41/5 1/21/31/41/51/6 1/31/41/51/61/7 1/41/51/61/71/8 1/51/61/71/81/9当前第33页\共有40页\编于星期三\9点当前第34页\共有40页\编于星期三\9点

formatrat,n=input('n='),fori=1:nforj=1:nh(i,j)=1/(i+j-1);endendh为改善可读性用缩进方法。结果和上一结果相同,如本例中应写成:当前第35页\共有40页\编于星期三\9点由于我们现在是在MATLAB命令窗中直接输入程序,因此不得不把它写在一行中。此时要注意,在if、for、while与表达式之间应留空格,在表达式与语句组之间必须用空格或逗号分隔,而在语句组的后面,必须要用逗号或分号来与end或else相分隔,否则,MATLAB会显示出错信息并中止运行。

break是中止循环的命令,在循环语句中,可用它在一定条件下跳出循环,这是常常用到的。在多重循环中,break只能使程序跳出包含它的最内部的那个循环。当前第36页\共有40页\编于星期三\9点

4.switch语句

switch-case-otherwise语

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论