第二篇第二章MATLAB的基本语法。57。2.5程序设计MATLAB提供了一个完善的程序设计语言环境,使我们能方便地编制复杂的程序,完成各种计算。本节先简要介绍关系、逻辑运算和条件、循环语句等许多高级语言都具备的、编程的重要手段,再着重介绍MATLAB所特有的M文件。2.5.1关系和逻辑运算MATLAB的关系运算符有:小于;大于;=小于或等于;=大于或等于;==等于;~=不等于。关系运算比较两个数值,当指出的关系成立时结果为1(表示真),否则为0(表示假)。关系运算可以作用于两个同样大小的矩阵或数组,结果是一个0,1矩阵或数组,每个分量代表相应的矩阵或数组分量的关系运算结果,例如,在MATLAB工作窗口输入程序:》A=1:5,B=5:-1:1运行后输出结果如下:A=12345B=54321在MATLAB工作窗口输入程序:》C=A=4运行后输出结果如下:C=00011在MATLAB工作窗口输入程序:》D=A==B运行后输出结果如下:D=第二章MATLAB的基础语法第二篇第二章MATLAB的基本语法。58。00100下面举一个例子说明如何将关系运算和数值运算结合起来。在MATLAB工作窗口输入程序:》x=(-3:3)/3运行后输出结果如下:x=-1.0000-0.6667-0.333300.33330.66671.0000在MATLAB工作窗口输入程序:》sin(x)./x运行后输出结果如下:Warning:Dividebyzeroans=0.84150.92760.9816NaN0.98160.92760.8415在计算sinx/x时给出了警告信息,是因为第4个数据sin0/0没有定义,MATLAB返回NaN。为了避免这种情况出现可以用最小浮点数eps来代替0,在MATLAB工作窗口输入程序:》x=(-3:3)/3;x=x+(x==0)*eps;sin(x)./x运行后输出结果如下:ans=0.84150.92760.98161.00000.98160.92760.8415给出了sinx/x在x=0时正确的极限值。MATLAB的逻辑运算符有:&与运算;|或运算;~非运算。它们满足熟知的运算规则:aba&ba|b~a00001100101111逻辑运算将任何非零元素视为1(真)。逻辑运算也可以作用于矩阵或数组。在MATLAB工作窗口输入程序:》a=1:9,b=9-a,c=~(a4),d=(a=3)&(b6)第二篇第二章MATLAB的基本语法。59。运行后输出结果如下:a=123456789b=876543210c=111100000d=000111111MATLAB还提供了一些关系和逻辑函数,常见的有all和any,用法是:y=all(x)若x为向量,当所有元素非零时y=1,否则y=0;若x为矩阵,all作用于列元素,y为行向量。y=any(x)若x为向量,当有一元素非零时y=1,否则y=0;若x为矩阵,all作用于列元素,y为行向量。例如,在MATLAB工作窗口输入程序:》a=[10-50;-3082],b=all(a),c=any(a),d=all(b),e=any(c)运行后输出结果如下:a=10-50-3082b=1010c=1011d=0e=12.5.2条件和循环语句条件和循环语句属于流控制语句,MATLAB的流控制语句主要有四个:if,while,for,switch,它们都用end结束。(一)if语句条件语句if最简单的用法是:第二篇第二章MATLAB的基本语法。60。if关系表达式语句1end如果关系表达式的值为1,则语句1执行;否则,执行end的后续命令。if语句的另外一种用法是:if关系表达式语句1else语句2end如果关系表达式的值为1,则语句1执行;否则(关系表达式的值为0),语句2执行,然后执行end的后续命令。当我们有多个选择时还可以用下列结构:if关系表达式1语句1elseif关系表达式2语句2…elseif关系表达式n语句nelse语句n+1end如果关系表达式j(j=1,2,…,n)的值为1,则语句j执行,然后执行end的后续命令;否则,语句2执行,然后执行end的后续命令。例如,可用以下程序得到图2-1的分段函数。functiony=fun(x)ifx=0y=0;elseifx=pi/2y=x;elsey=1;end在MATLAB工作窗口输入程序:x=31;y=fun(x)运行后输出结果如下:yO01x1图2-1第二篇第二章MATLAB的基本语法。61。y=1(二)for语句循环语句for的一般形式为for循环参数=初值:步长:终值语句end步长为1时可以省略。对于每一参数值,语句都重复执行。当作多重循环时for语句可以嵌套使用,如用以下程序可以生成希尔伯特矩阵。functionA=f(n,m)A=zeros(n,m);fori=1:nforj=1:mA(i,j)=1/(i+j-1);endendformatrat在MATLAB工作窗口输入程序:n=4,m=5,A=f(n,m)运行后输出结果如下:A=11/21/31/41/51/21/31/41/51/61/31/41/51/61/71/41/51/61/71/8for语句的循环参数可以是任意的数组或矩阵,循环参数依次取数组元素的值,或按矩阵的列依次取值。(三)while语句for循环主要应用于已知循环次数的情况,如果不知道循环次数,可以使用while循环来完成,其表达方式为while关系表达式语句end当关系表达式的值为1(真)时,语句被反复执行,直至关系表达式为0(假)时终止,如,在MATLAB工作窗口输入程序:第二篇第二章MATLAB的基本语法。62。n=0;EPS=1;while(1+EPS)1EPS=EPS/2;n=n+1;endEPS=2*EPS;n,formatshortE,EPS运行后输出结果如下:n=53EPS=2.2204e-016这个例子给出了计算MATLAB中特殊常量eps的过程(我们用大写EPS以便与eps相区别)。EPS不断地被2除直到(1+EPS)1为假时终止。这里需要注意的是,MATLAB用16位数来表示数据,因此当EPS接近10-16时,它会认为(1+EPS)1不成立。MATLAB还提供了跳出循环的break语句,遇到此语句立即执行此循环end的后续语句,如上面计算eps的程序可以改为:EPS=1;forn=1:100EPS=EPS/2;if(1+EPS)=1EPS=2*EPS;breakendendn,formatshortE,EPS运行后输出同样的结果。(四)switch语句switch语句根据表达式的值来执行相应的语句,用法如下:switch表达式casevalue1语句1casevalue2语句2otherwise第二篇第二章MATLAB的基本语法。63。语句nend