1、第三章 Matlab 程序设计前面介绍了 M 文件的概念和组成,看到了一些用 MATLAB 语言编写的简单程序要想实现更强的功能,需要用到循环控制几乎所有实用的程序都包含循环,熟练使用 MATLAB 的循环结构的选择结构是编程的基本要求。MATLAB 提供四种循环和选择控制结构,它们是:for 循环,while 循环,if-else-end 结构和 switch-case-end 结构 们经常出现在 M 文件中1. 运算符MATLAB 的运算符可分为三类:算术运算符、关系运算符和逻辑运算符其中算术运算符的优先级最高,其次是关系运算符,再其次是逻辑运算符。算术运算符在前面已经介绍,这里只介绍关系
2、运算符和逻辑运算符1关系运算符关系运算符对于程序的流程控制非常有用MATLAB 共有六个关系运算符,它们分别是 小于; = 小于等于; 大于;= 大于等于; 等于; =不等于关系运算符可以比较同型矩阵,此时将生成一个 0-l 矩阵,当相应元素经关系运算为真时,对应位置上生成 1,否则为 0 关系运算符也可以比较标量和矩阵,此时是标量与矩阵的每个元素分别比较,生成一个 01 矩阵2逻辑运算符MATLAB 共有三个逻辑运算符:与()或(|)非() 。对于数值矩阵,当元素为 0 时,逻辑上为假;当元素为非 0 时。逻辑上为真同关系运算符一样,逻辑运算符两端的运算数可以是同型矩阵,对两矩阵的相应元素分
3、别运算,结果为一个 01 矩阵当逻辑表达式的值为真时。赋值1,否则为 0同样,其中一个矩阵也可以是标量。与()运算: 两个运算数都为真时,结果为真,其他情况下(一真一假或两个都假)结果为假或(1)运算: 两个运算数都为假时,结果为假,其他情况下(一真一假或两个都真)为真非()运算: 只有一个运算数,当该运算数为真时,结果为假,否则,结果为真2. for 循环for 循环允许一组命令以固定的和预定的次数重复。for 循环的一般形式为:for x=表达式 1:表达式 2:表达式 3语句体end其中表达式 1 的值为循环的初值,表达式 2 的值为步长,表达式 3 的值为循环的终值如果省略表达式 2,
4、则默认步长为 1该循环体的执行过程如下:l)将表达式 1 的值赋给 x;2) 对于正的步长,当 x 的值大于表达式 3 的值时,结束循环;对于负的步长,当 x 的值小于表达式 3 的值时结束循环否则,执行 for 和 end 之间的语句体,然后执行下面的第 3)步3)x 加上一个步长后,返回第 2)步继续执行例如,程序:for kl:4X(k )lk;endformat rat 设置输出格式为有理数x将输出:X1 1/2 1/3 1/4 *注意: l) for 语句可以嵌套使用;2)当有一个等效的数组方法来解给定的问题时,应避免用 for 循环例如,上例可被重写为n1:4; x1n; form
5、at rat;x这种方法执行更快,要求较小的输入3. while 循环while 循环一般用于事先不能确定循环次数的情况while 循环的一般形式为:While 表达式语句体end只要表达式的值为 1(真),就执行 while 与 end 之间的语句体,直到表达式的值为 0(假)时终止该循环通常,表达式的值为标量,但对数组值也同样有效,此时,数组的所有元素都为真,才执行 while 与 end 之间的语句体例如,程序:n0;EPS=1;while(1+EPS) 1EPSEPS2;nnl;endn,EPSEPS * 2运行结果:n53EPS2.2204 e-016这个例子给出了计算 MATLAB
6、 的特殊变量 eps 的一种方法,eps 是一个可以加到 1,在计算机的有限精度下,而使结果大于 1 的最小数值这里我们用大写 EPS,以便与 eps 相区别EPS 从 1 开始,不断被 2 除,直到 EPSl 不大于1。因为 MATLAB 用 16 位数来表示数据,因此,当 EPS 接近 10-16 时,它会认为EPS+1 不大于 1,于是 while 循环结束4. if-else-end 结构在很多情况下,语句序列必须有条件地执行在编程语言里,这种逻辑由某种 ifelse-end 结构来完成最简单的形式为:if 表达式语句体end如果表达式的值为真,则执行 if 与 end 之间的语句体,
7、否则,执行 end 的后续命令if 结构的另一种形式if 表达式语句体 1else语句体 2end如果表达式的值为真,则执行语句体 1,然后跳出该选择结构,执行 end的后续语句;如果表达式的值为假,则执行语句体 2,之后,执行 end 的后续语句当有三个或更多的选择时,可采用 if 结构的下列形式if 表达式 1语句体 1elseif 表达式 2语句体 2.elseif 表达式 n语句体 nelse语句体 n+1end如果表达式 j(j=1,2,n)为真,则执行语句体 j,然后执行 end 的后续语句否则,当 if 和 elseif 后的所有表达式的值都为假时,执行语句体nl,然后执行 en
8、d 的后续语句例如,可用以下程序得到符号函数function ySIGN(x)if X0y1;elseif x0y0;elsey=1;end可用 if 和 break 语句来跳出 for 循环和 while 循环例如,EPS=l;For n1:l000EPS=EPS2;if(1EPS)l;EPSEPS*2;breakendendn,EPS其运行结果同前面一样,n53,EPS22204e016.在此例中,当执行 break 语句时,MATLAB 跳到循环外的下一个语句如果一个 break 语句出现在一个嵌套的 for 循环或 while 循环里,那么只跳出break 所在的那个循环,不跳出整个嵌
9、套结构5. switch-case-end 结构switch 语句根据表达式的值来执行相应的语句,一般形式为switch 表达式(标量或字符串)case 值 1,语句体 1case 值 2.1,值 22,语句体 2.otherwise,语句体 nEnd当表达式的值为值 1 时,执行语句体 1,然后执行 end 的后续语句;当表达式的值为值 2.1,值 22,中之一时,执行语句体 2,然后执行 end 的后续语句;若表达式的值不为任何关键字“case”所列的值时,则执行语句体n,接着执行 end 的后续语句注意:只执行一个语句体,然后就执行 end 的后续语句例如,假设 NAME 是一个字符串变量,下列程序将在 NAME 取值为各种不同字符串的情形下,显示相应的信息switch lower(NAME)case zhanghua,lijiang,disp(He comes form China)case peter,disp(He comes form United States)case monika,disp(She cmoes form Germany)otherwise,disp(He or she comes from other countries)end