第四章 程序设计
4.1 M文件函数
Matlab函数有M文件函数与脚本文件之分。所谓的脚本文件是没有输入输出变量,只是一系列系统命令的集合,类似于DOS的宏命令;M文件函数获取传递给它的变量,进行处理,返回计算结果。 讲例:>>type(edit) flipud
M文件函数的构成
? 首行称为函数说明符,以function开头,第一行定义的函数名必须与要保存的文
件名一致,实际上MATLAB忽略首行的函数名,直接根据存储在磁盘上的文件名执行函数。
? 接下来是文件的注释行,即help的帮助文本。(用函数flipud示例)其中第一行
帮助文体称为H1行,是由lookfor命令所搜索的行。 ? M文件名最多31个字符,命名规则与变量相同。
? 调用函数error可中止函数执行,显示出错信息,并把控制权返回命令窗口 ? 调用函数warning可探囊取物报告警告信息,然后继续运行
warning(‘…’) %在命令窗口中显示警告字符串 warning on,warning off在全局范围内打开或关闭
? M文件函数可以调用脚本文件或其它作为子函数的函数,多个子函数的顺序可任
意排列
输入输出变量
? M文件可以没有输入输出变量
? 可以用比M文件函数中的说明行所确定的数目少的实际输入输出变量,可分别调
用函数nargin,nargout确定函数调用中所用的输入输出变量个数。由于nargin,nargout不是变量,所以不能运用赋值函数进行重新赋值。(help mmdigit) ? 调用一个函数时,输入变量不会拷贝到函数的工作空间,但如果改变输入变量内
的任何值,则数组就拷贝到函数的工作空间。因此,为节约存储和增加速度,最好从大数组内抽取元素,对它们作修正,而不使整个数组拷贝到工作空间。 ? 在函数说明行中指定最后一个输入参量为varargin,则函数可接受一个变量和无限
个输入变量。Varargin是一个预定义的单元数组,它的第i个变量是从varargin出现开始的第i个参量。例:
function a=myfunction(x,varargin)
用a=myfunction(x,y,z,t)调用,则varargin(1)=y,varargin(2)=z,,varargin(3)=t 这样每次可以用不同数目的参量进行调用。
? 在函数说明行中指定最后一个输出变量为varargout,则函数可接受一个变量和无
限个输出变量。Varargin是一个预定义的单元数组,它的第i个单元是从varargout出现开始的第i个参量。如
function [a,varargout]=function(x,y)
调用形式为 [a,b,c]=function(x,y),则varargout(1)=b,varargout(2)=c
函数工作空间
函数都有自己的临时工作空间,该空间随函数的调用而建立,随函数操作的结束而删除,递归调用的函数均有自己的独立工作空间,MATLAB提供了几种用于基本工作空间与函数工作空间间的通信关系
1. 全局变量说明为global函数可以和其它函数、MATLAB工作空间共享变量,并自
身递归调用。但必须在每个所期望的工作空间中用global对该变量进行说明。例:tic,toc中变量TICTOC的用法
2. 函数evalin允许延伸到另一工作空间,计算一个表达式,然后返回结果到当前空
间,与eval类似。A=eval(‘caller’,’expression’)在调用空间计算expression,然后返回给变量A;A=evalin(‘base’,’expression’)在MATLAB工作空间中计算expression,把结果返回到当前工作空间变量A;evalin(‘workspace’,’try’,’catch’)提供了捕捉错误功能,如果在空间中第一个表达式’try’出现错误,则‘catch’就是当前工作空间中要计算的表达式
3. 函数assignin可以把当前工作空间内的一些表达式的结果赋值给另一个工作空间
内的变量。Assignin(‘workspace’,’vname’,x)把当前工作空间内的变量X的内容赋值给工作空间名为vname的变量
4. 正在被执行的M文件名可在一个函数内的变量mfilename中得到,这种变量在脚
本文件中也存在。 4.2
4.2.1 顺序结构
若程序是命令文件,则程序运行后,中间变量都予以保留;若程序是函数文件,则程序运行完成后,中间变量将全部删除 4.2.2 循环结构
1. for-end 循环
程序流的控制
for x=arrays (commands) end
? for循环不会因为在循环体内对循环变量重新进行赋值而终止 ? for后面的表达式中的数组可以是任何合法的MATLAB数组 ? for循环结构可以按需要进行嵌套 应用技巧
(1)为得到高效的代码,就尽量提高代码的向量化程度,避免使用循环结构 如 for i=1:10 i=1:10;
A(i)=1/(i+1) A(i)=1./(i+1) end
(2)为得到尽快的运算速度,应尽量对数组进行预定义。 如 对于上面的(1)中编程方法,可改为
i=1:10; A=zeros(1,10); A(i)=1./(i+1)
2. while-end 循环
while expression
statements end
? 表达式的值一般为标量,但MATLAB允许是一个数组,只有当该数组的所有元素
均为真时,才会执行循环体;若表达式为空数组,则不执行循环体
4.2.3 分支结构
1.if-else-end if expression
statements1;
else
statements2;
end
? 如果只有一种选择,else部分可以不写 ? 如果多于两种选择,则中间可填加elseif 结构
2. witch-case-end结构
switch switch-expr case case-expr
statement;
case {case-expr1,case-expr2,…}
statement; …
otherwise statement; end 4.3
? return 指令
在被调函数中插入return语句,强制MATLAB结束执行函数并返回指令窗口 ? pause指令
使程序运行指令暂停,等待用户按任意键继续。主要用于程序调试用查看中间结果 另一种用法 pause(n) 在继续执行前,暂停n秒 ? break指令
使最内层for,while,if语句终止循环 ? input指令
提示用户从键盘输入数值、字符串或表达式,并接受输入
R=input(‘message’) 将用户从键盘输入的内容Message赋值给变量R
R=input(‘message’,’s’) 将用户从键盘输入的内容Message作为字符串的形式赋值
给变量R
输入的字符串需要转行时,可用符号‘\\n’ ? keyboard指令waitforkeyboard
与input一样,在遇到keyboard指令时,MATLAB将会暂停程序的运行,并调用键盘 指令进行处理,用户可以从键盘输入各种命令,只要输入return指令,按enter后, 程序将继续执行 ? error指令
显示错误信息并将控制权返回键盘。其它一些相关的命令 errortrap 错误发生后程序是否继续执行的双位开关
lasterr 显示MATLAB自动判断的最新出错原因,并中止程序执行 warning(‘some message’) 显示警告信息,并继续运行
lastwarn 显示MATLAB自动给出的最新出错信息,然后继续运行 ? echo 指令
程序流控制
用来控制M文件在执行过程中显示与否,这对程序的调试和演示极为有用。 对命令文件
echo on 显示其后所有执行文件的指令 echo off 关闭显示其后所有执行文件的指令 echo 在两种状态之间进行转换 对函数文件或命令文件
echo filename on 使filename指定文件中的指令在执行时显示出来 echo filename off
echo on all 使当前内存中函数文件的指令在执行中显示出来 echo off all 4.4
sprintf('%0.5g',(1+sqrt(5))/2) 1.618
sprintf('%0.5g',1/eps) 4.5036e+15 sprintf('.5f',1/eps) 4503599627370496.00000 sprintf('%d',round(pi)) 3 sprintf('%s','hello') hello
sprintf('The array is %dx%d.',2,3) The array is 2x3. sprintf('\\n') is the line termination character on all platforms
数据显示格式控制
相关推荐: