![MATLAB与数学实验(第3版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/243/52152243/b_52152243.jpg)
1.3 MATLAB程序设计
M文件程序控制语句通常包括顺序语句、循环语句、选择语句和交互语句等.虽然MATLAB不像C、Fortran等高级语言那样具有丰富的控制语句,但是MATLAB自身强大的函数功能弥补了这种不足,使用户在编写M文件时并不感觉困难.
1.3.1 顺序语句
顺序语句是最简单的控制语句,就是按照顺序从头至尾地执行程序中的各条语句.顺序语句一般不包含其他子语句或控制语句.
例1-18 一个仅由顺序语句构成的M文件.
解 MATLAB命令为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/31_01.jpg?sign=1738942546-Ra6Wzvy20jMM5jimSWaLOTwDVtV7Ptvk-0-f6034225be8fc04987859d70dc54788d)
运行结果为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/31_02.jpg?sign=1738942546-gZnU1PXf6hPtLL3lwD7KVMbXnbY0CSZp-0-933becb890b7afe76d2db0c6385a8963)
1.3.2 循环语句
在实际过程中经常会遇到一些需要有规律地重复进行运算的问题,此时,就需要重复执行某些语句,这样就需要用循环语句进行控制.在循环语句中,被重复执行的语句称为循环体,每个循环语句通常都包含循环条件,以判断循环是否继续进行下去.MATLAB提供了两种循环方式:for循环和while循环.
1.for循环语句
for循环语句使用起来较为灵活,一般用于循环次数已经确定的情况,它的循环判断条件通常是对循环次数的判断.for语句的调用格式为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/31_03.jpg?sign=1738942546-ZmzazAuNEP64zEWts6HNpUzKxB8eaGa9-0-c5d5bbc4bd5687453a9c19c90a54c669)
其中,表达式1为循环初值,表达式2为循环步长,表达式3为循环终值.如果省略表达式2,则默认步长为1.对于正的步长,当i的值大于表达式3的值时,将结束循环;对于负的步长,当i的值小于表达式3的值时,将结束循环.for语句允许嵌套使用,一个for关键字必须和一个end关键字相匹配.
例1-19 用for循环语句生成1~n的乘法表.
解 MATLAB命令为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/31_04.jpg?sign=1738942546-0nglbWCgQubcpC86PUoIwPmGB1M6xu55-0-20f1b7a6bd8fa9bd4cd2c1273a8b4ada)
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/32_01.jpg?sign=1738942546-VWogtpUV0Jt55RGEcWNnKZEXPDigNoLg-0-a1e0195dad548ce301b4926d0facee29)
运行结果为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/32_02.jpg?sign=1738942546-cpKAbAkj4XZTqsWlnt7FN9djeQ1Im3XD-0-99bb31005e2bc53b628b626f622ad799)
在for循环语句中通常需要注意以下事项:
1)for语句一定要有end关键字作为结束标志,否则以下的语句将被认为包含在for循环体内.
2)循环体中每个语句结尾处一般用分号“;”结束,以避免中间运算过程的输出.如果需要查看中间结果,则可以去掉相应语句后面的分号.
3)如果循环语句为多重嵌套,则最好将语句写成阶梯状,这样有助于查看各层的嵌套情况.
4)不能在for循环体内强制对循环变量进行赋值来终止循环的运行.例如:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/32_03.jpg?sign=1738942546-5eG7wYzMlFcnuEApKW5pRnuQeAnDsvXC-0-75a5ca57ab137f597fe5607a35131bc5)
2.while循环语句
与for循环语句相比,while循环语句一般用于不能确定循环次数的情况.它的判断控制可以是一个逻辑判断语句,因此它的应用更加灵活.
while循环语句的调用格式为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/32_04.jpg?sign=1738942546-5Nw9N0ljj7KAknoX6o78zZZ85CCDXzUK-0-15383e872cb875753400edf5431531dc)
当逻辑表达式的值为真时,执行循环体语句;当逻辑表达式的值为假时,终止该循环.当逻辑表达式的计算对象为矩阵时,只有当矩阵中所有元素均为真时,才执行循环体.当表达式为空矩阵时,不执行循环体中的任何语句.为了简单起见,通常可以用函数all和any等把矩阵表达式转换成标量.在while循环语句中,可以用break语句退出循环.
例1-20 寻找阶乘超过1010的最小整数.
解 MATLAB命令为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/32_05.jpg?sign=1738942546-IF0DixH4JwFWE7Ooz1Br8elId7y583Qw-0-3666ff7e1da82e5cf516a3374e06345a)
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/33_01.jpg?sign=1738942546-bf32IHmHWYDXcryyjuRvMqWdFWUpDaEv-0-8d1b22e787231a71fcbaa2b990707ce6)
运行结果为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/33_02.jpg?sign=1738942546-AOlswT9deSowLh1kqBGD3Z7HoUSxwnzR-0-b24ee69cc15da42c60477c57f15bac84)
1.3.3 选择语句
在一些复杂的运算中,通常需要根据特定的条件来确定进行何种计算,为此MATLAB提供了if语句和switch语句,用于根据条件选择相应的计算语句.
1.if语句
if语句根据逻辑表达式的值来确定是否执行选择语句体.if语句的调用格式如下:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/33_03.jpg?sign=1738942546-m4izEgNWSYN8mxyKzpJ90e3MHR1s5KHb-0-b20b7bd02e6eef1bd3ad09a44cec7150)
当执行if语句时,首先判断逻辑表达式1的值,当逻辑表达式1的值为真时,执行选择语句体1,执行完选择语句体1后,跳出该选择语句体继续执行end后面的语句;当逻辑表达式1的值为假时,跳过选择语句体1继续判断逻辑表达式2的值;当逻辑表达式2的值为真时,执行选择语句体2,执行完选择语句体2后跳出选择语句体结构.如此进行,当if和elseif后的所有表达式的值都为假时,执行语句体else.
例1-21 编写一个函数文件,计算分段函数的数值:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/33_04.jpg?sign=1738942546-0D4uRl1KqwghAb0U8ht6ZswW2TKTMjvv-0-064fc88ba27afe623f7835909e3a033e)
解 MATLAB命令为:
1)建立M函数文件li21.m:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/33_05.jpg?sign=1738942546-vGWkmzhdeZq73A40uGofJzMGzDVvTTGs-0-33421f3a17f9d485c71d093d3db93ba2)
2)调用M函数文件计算f(0.2),f(2),f(30),f(10π):
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/33_06.jpg?sign=1738942546-Jqwz6dLzdSVzwIMTeP005w0FXv4eN8gU-0-0f1489756cc5c1450a80e24ec494c28c)
运行结果为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/34_01.jpg?sign=1738942546-U73MSwVTw7266Ahbtdv7FQ4WFQ9evcg9-0-479ab029d699be412436944dde26120d)
2.switch语句
switch语句和if语句类似.switch语句根据变量或表达式的取值不同分别执行不同的命令.该语句的调用格式如下:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/34_02.jpg?sign=1738942546-5oDojdrPilk6PhOXJAIaFP0jP3AdhwZ6-0-3e528daef11ff18154f3b50e257c7f93)
当表达式的值为1时,转到语句体1;当表达式的值为2时,执行语句体2;当表达式的值不为关键字case所列的值时,执行语句体otherwise.
例1-22 编写一个函数文件,根据不同的输入值给出不同的显示信息.
解 MATLAB命令为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/34_03.jpg?sign=1738942546-fNwiMlYPhZkmaGgcx2NEbhVnDZBQsDA7-0-331513232082013a80ce03eb585a2f88)
将文件保存为li22.
运行结果为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/34_04.jpg?sign=1738942546-0HygYam6NMTrOsOBNWLl60Mebn0LGZuD-0-2fa963cd783771bc23d389c4f2381b22)
1.3.4 交互语句
在很多程序设计语言中,经常会遇到输入输出控制、提前终止循环、跳出子程序、显示出错信息等.此时就要用到交互语句来控制程序的进行.
1.输入输出控制语句
输入输出语句包括用户输入提示信息语句(input)和请求键盘输入语句(keyboard).
1)input用来提示用户从键盘输入数据、字符串或表达式,并接收输入值.其调用格式如下:
●a=input(’prompt’)在屏幕上显示提示信息prompt,等待用户的输入,输入的数值赋给变量a.
●b=input(’prompt’,’s’)返回的字符串作为文本变量而不是变量名或数值.
如果没有输入任何字符,只是按回车键,input将返回一个空矩阵.在提示信息的文本字符串中可能包含“n”字符.“
n”表示换行输出,它允许用户的提示字符串显示为多行输出.2)keyboard是在M文件中请求键盘输入命令.其调用格式如下:
keyboard 该命令被放置在M文件中时,将停止文件的继续执行并将控制权传给键盘.
通过在提示符前显示K来表示一种特殊状态.在M文件中使用该命令,对程序的调试及在程序运行中修改变量都很方便.
为了终止keyboard模式,可以输入命令return,然后按回车键.
2.等待用户响应命令pause
pause命令用于暂时中止程序的运行.当程序运行此命令时,将暂时中止,然后等待用户按任意键继续运行.该命令在程序的调试过程和用户需要查询中间结果时十分有用,该命令的调用格式如下:
●pause 此命令将导致M文件停止运行,等待用户按任意键继续运行.
●pause(n) 在继续运行前中止执行程序n秒,这里n可以是任意实数.时钟的精度是由MATLAB的工作平台所决定的,绝大多数工作平台都支持0.01秒的时间间隔.
●pause on 允许后续的pause命令中止程序的运行.
●pause off 保证后续的任何pause或pause(n)语句都不中止程序的运行.
3.中断命令break
break命令通常用在循环语句或条件语句中.通过使用break命令,可以不必等待循环的自然结束,而是根据循环的终止条件来跳出循环.
例1-23 编写一个函数文件,计算鸡兔同笼问题,即输入个数和脚数,求解鸡兔各有多少.
解 MATLAB命令为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/35_03.jpg?sign=1738942546-6MJwXB2urpqVINwUnxVr9OVpTR6Hx5qR-0-b24338c6076cb00d609ee1532feebe11)
运行结果为:
![](https://epubservercos.yuewen.com/3FA990/30861987003132406/epubprivate/OEBPS/Images/35_04.jpg?sign=1738942546-XMo53dIeFOd7B8Bv1gw1kYKb1pJJ5UHY-0-f90791517d0e7a0f4f0442e1abc5c43c)
4.continue命令
continue命令经常与for或while循环语句一起使用,作用是结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次循环.该命令的调用格式如下:
continue结束本次循环进入下一次循环.
5.return命令
return命令能够使当前的函数正常退出.这个语句经常用于函数的末尾,以正常结束函数的运行.当然,该函数也经常用于其他地方,首先对特定条件进行判断,然后根据需要,调用该语句终止当前运行,并返回.
6.error语句
在进行程序设计时,很多情况下会出现错误,此时如果能够及时把错误显示出来,则用户将能够根据错误信息找到错误的根源.MATLAB提供的error语句就是用于完成这类功能的.该语句的调用格式如下:
●error(’message’) 显示错误信息,并将控制权交给键盘.提示的错误信息是字符串message的内容.如果message是空的字符串,则error命令将不起作用.
●error(’message’,A1,A2,…,An) 显示的错误信息字符串中包含有格式化字符,例如,用于MATLABsprintf函数中的特殊字符.在提示信息中,每一个转化字符被转换成参数表中的A1,A2,…,An.
●error(’errID’,____) 包含此异常中的错误标识符。此标识符可用于区分错误,它还允许你控制在MATLAB遇到错误时系统做何反应。可以包括先前语法中的任何输入参数。
●error(errorStruct) 使用标量结构体中的字段抛出错误。
●error(correction,___) 为异常提供建议修复。可以包括先前语法中的任何输入参数。
7.warning语句
warning语句的用法与error语句类似,与error不同的是,warning语句不会中断程序的执行,仅给出警告信息.
8.echo语句
一般情况下,执行M文件时,在命令行窗口中看不到文件中的命令,但在某些情况下,需要查看M文件中命令的执行情况.为此需要将M文件中的所有命令在执行过程中显示出来,此时可以使用echo语句.