1、第09周,Matlab 一、逻辑运算 二、关系运算 三、选择结构 四、循环结构 五、M函数,一、逻辑运算,当逻辑运算中没有标量时,参与运算的数组必须维数相同。运算在两数组相同位置上的元素间进行,因此运算结果数组必定和参与运算的数组同维。,标量(一个数)可以与任何维数组进行逻辑运算。运算比较在标量与数组每个元素间进行,因此运算结果与参与运算的数组同维。,在逻辑表达式中,作为输入的任何非 0 数都被看作是“逻辑真”,只有 0 才被认为是“逻辑假”。,1、Element-Wise Operators and Functions,A = 0, 1, 1, 0, 1 B = 1, 1, 0, 0, 1,
2、2、Bit-Wise Functions,A = 28; % binary 11100 B = 21; % binary 10101,3、Short-Circuit Operators,(1) & 和 | 不能用于数组,即A,B不能是数组 (2) 若A能确定结果,则不计算B,例如: 0 & ( 1 2),二、关系运算,标量可以与任何维数组进行比较。比较在此标量与数组每个元素之间进行,因此比较结果将与被比数组同维。,当比较量中没有标量时,关系符两端进行比较的数组必须维数相同,比较在两数组相同位置上的元素间进行,因此比较结果将与被比数组同维。,关系表达式的计算结果,是一个由0和1组成的“逻辑数组”
3、。1表示“真”,0表示“假”。,4、逻辑函数,4、特殊数据判断函数,三、Matlab中的选择结构,1、if - end 结构 2、if - else - end 结构 3、if - elseif - - else - end 结构 4、switch 结构,选择结构也称为决策结构、分支结构或判断结构,1、 if - end 结构,expression为条件表达式 ,statements为要执行的命令。只有当expression结果中所有元素都为True时,commands才被执行。,if expressionstatements end,是最简单,最常用的选择结构,2、if - else 结构,
4、若要在expression为True和False两种条件下执行不同的操作,可以使用如下格式的if-else-end结构:,if expressioncommands 1 elsecommands 2 end,3、if - elseif - 结构,当需要根据多个条件执行多个不同的操作时,可以采用下面的选择结构,matlab将从上到下检测各个表达式,执行与所遇到的第一个为True的表达式相对应的命令集,然后退出选择结构。,if expression1commands1 elseif expression2commands2 elseif expression3commands3 elsecomma
5、nds end,注意: elseif中间没有空格!,4、switch 结构,switch switch_exprcase case_exprstatementcase case_expr1, case_expr2, .statement otherwisestatement end,与C语言不同,case语句后不要跟break语句。,四、Matlab中循环结构,1、for循环 2、while循环 3、break,continue,1、for循环结构,for循环根据用户设定的条件,对结构中的命令反复执行固定次数的操作,一般用于已知循环次数的情形。for循环的一般格式如下:,for循环根据expr
6、ession中的列数决定其循环的次数。,for variable = expressionstatement(循环体) end,例题,猴子吃桃问题: 有一堆桃子不知数目,猴子第一天吃掉一半,觉得不过瘾,又多吃了一个,第二天照此办理,吃掉剩下桃子的一半另加一个,天天如此,到第十天早上,猴子发现只剩一只桃子了,问这堆桃子原来有多少个?,for 循环练习,1. 所谓“水仙花数”是一个3位数,其各位数字的立方和等于该数本身。例如:,2. 找出所有这样的4位正整数,其各位数字的4次方的和等于该数本身,例如:,编写matlab脚本文件,输出所有的“水仙花数”至一行数组,并求出水仙花数共有多少个。,编写ma
7、tlab脚本文件,输出所有的满足条件的数至一行数组,并求出满足条件的数共有多少个。,2、while循环,while expression (条件)statement(循环体) end,while循环一般用于不知道循环次数的情形,while循环的一般格式如下:,例:一张纸厚0.06mm且足够大,试问将纸对折多少次,其厚度将超过10000m?,While循环练习,1、用while循环求Fibonacci数组中第一个大于10000的元素。,Fibonacci规则:,1202年,Fibonacci(斐波纳契 )在一本书中提出了一个问题:如果一对兔子出生一个月后开始繁殖,每个月产生一对后代,现在有一对新
8、生的兔子,如果兔子没有死亡,那么第20个月月初会有多少兔子。这就是著名的Fibonacci序列。,1,1,2,3,5,8,13,21,34,55,89,,3 、break , continue,break 和 continue 一般与 if 语句配合使用,continue :退出本次循环,执行下一次循环,break :退出当前的 for 循环或 while 循环,问题:下面的加法等式中:两个真分数之和等于第三个真分数;其中每个方框表示一个非零数字,且任意两个数字互不相同,比如:,试找出所有这样的解。,本题可用计算机找到解答,共 10 个解。,如果用 matlab数值 计算,却只能找到 6 个解
9、;用Turbo C 可能找到 7 个、9 个或 11 个解。Why?,a,b,c,d,e,f,g,h,i,数字填图问题,五、M函数文件,第一行:函数声明行,function y = dfw1(r,p)res = r(1); p0 = p(1);y = -sum(res);,输出参数,函数名,输入参数,函数名要遵守Matlab变量名的命名规则, M函数存盘时的文件名与函数名相同。,从函数返回的惟一信息包含在输出参数中,要确保函数中包含一条给输出参数赋值的语句。,M函数文件与M脚本文件的区别,脚本文件运行后,所产生的所有变量都驻留在matlab基本工作空间(base workspace)中。 函数文件运行时,matlab会专门开辟一个临时工作区间,称为函数工作区间。 函数空间随具体M函数文件的被调用而产生,随调用结束而删除。 如果在M函数中,调用某个M脚本文件,那么该脚本文件运行时产生的所有变量都存放于该函数空间中,而不是存放在基本空间,例题,