2.2函数调用和参数传递(续) 2.2.3参数传递 MATLAB在函数调用上有一个与众不同之处:函数所传递的 参数具有可调性。 传递参数数目的可调性来源于如下两个 MATLAB永久变量: 函数体内的 nargin给出调用该函数时的输入参数数目。 函数体内的 nargout给出调用该函数时的输出参数数目 只要在函数文件中包括这两个变量,就可以知道该函数文件 调用时的输入参数和输出参数数目 (参考:cixc1e,m,am1m) 值得注意: nargIn、 nargout本身都是函数,不是变量,所 以用户不能赋值,也不能显示。 “变长度”输入输出宗量: varargIn、 varrgout。具有接受 “任意多输入”、返回“任意多输出”的能力。 跨空间变量传递: evalin
6 2.2 函数调用和参数传递(续) 2.2.3 参数传递 ▪ MATLAB在函数调用上有一个与众不同之处 :函数所传递的 参数具有可调性。 ▪ 传递参数数目的可调性来源于如下两个MATLAB永久变量: • 函数体内的nargin 给出调用该函数时的输入参数数目。 • 函数体内的nargout 给出调用该函数时的输出参数数目。 ▪ 只要在函数文件中包括这两个变量,就可以知道该函数文件 调用时的输入参数和输出参数数目。 ▪ 值得注意:nargin、 nargout 本身都是函数,不是变量,所 以用户不能赋值,也不能显示。 ▪ “变长度”输入输出宗量:varargin 、 varrgout。具有接受 “任意多输入” 、返回“任意多输出”的能力 。 ▪ 跨空间变量传递:evalin。 (参考 : circle .m,am1.m)
2.3 MATLAB的程序结构和控制流 2.3.1程序结构 顺序结构 循环结构: MATLAB提供两种循环方式。 for--end循环和 while-end循环。 分支结构:if- else- -end。 switch-case结构。 atry- catch结构。 2.3.2程序流控制 常用指令: return,echo, input, pause, keyboard, break 警示指令:eror, warning
7 2.3 MATLAB的程序结构和控制流 2.3.1 程序结构 ▪ 循环结构:MATLAB提供两种循环方式。 ▪ 顺序结构 ▪ 分支结构:if—else—end 。 for—end 循环和while---end循环。 2.3.2 程序流控制 ▪ 常用指令:return,echo,input,pause,keyboard,break。 ▪ switch---case 结构。 ▪ try---catch 结构。 ▪ 警示指令:error, warning
2.3 MATLAB的程序结构和控制流(续) 2.3.3图形用户界面(GUI编程 现代的主流应用程序已经从命令行的交互方式转变为以图 形界面为主的交互方式,这主要是由于它给用户带来了操作 和控制的方便与灵活性。(面向对象编程) MATLAB能够以比较简单的方式实现一系列的图形界面功 能。通过对控件、菜单属性的设置和 callback的编写,就能 够满足大多数用户的需求。 控件的 Callback属性: Callback属性的取值是字符串,可 以是某个M文件名或一小段 MATLAB语句。当用户激活控件 对象(例如:在控件对象图标上单击鼠标左键)时,应用程 序就运行 Callback属性定义的子程序。 菜单的 Callback属性: Callback属性的取值是字符串,可 以是某个M文件名或一小段 MATLAB语句。当用户激活菜单 对象时,若没有子菜单就运行 Callback属性定义的子程序。 若有,先运行 Callback属性定义的子程序,再显示子菜单
8 2.3 MATLAB的程序结构和控制流(续) 2.3.3 图形用户界面(GUI)编程 ▪ 现代的主流应用程序已经从命令行的交互方式转变为以图 形界面为主的交互方式,这主要是由于它给用户带来了操作 和控制的方便与灵活性。(面向对象编程) ▪ MATLAB能够以比较简单的方式实现一系列的图形界面功 能。通过对控件、菜单属性的设置和 Callback 的编写,就能 够满足大多数用户的需求。 ▪ 控件的 Callback 属性: Callback 属性的取值是字符串,可 以是某个M文件名或一小段MATLAB语句。当用户激活控件 对象(例如:在控件对象图标上单击鼠标左键)时,应用程 序就运行 Callback 属性定义的子程序。 ▪ 菜单的 Callback 属性: Callback 属性的取值是字符串,可 以是某个M文件名或一小段MATLAB语句。当用户激活菜单 对象时,若没有子菜单就运行Callback 属性定义的子程序。 若有,先运行Callback 属性定义的子程序,再显示子菜单
2.4M文件的调试 编写M文件时,错误(Bug)在所难免。错误有两种:语法 ( Syntax)错误和运行(Run-time)错误 语法错误是指变量名、函数名的误写,标点符号的缺、漏等。 对于这类错误,通常能在运行时发现,终止执行,并给出相应 的错误原因以及所在行号 运行错误是算法本身引起的,发生在运行过程中。相对语法 错误而言,运行错误较难处理。尤其是M函数文件,它一旦运 行停止,其中间变量被删除一空,错误很难查找。 有两种调试方法:直接调试法和工具调试法
9 2.4 M文件的调试 ▪ 编写 M文件时,错误(Bug)在所难免。错误有两种:语法 (Syntax)错误和运行(Run-time)错误。 ▪ 语法错误是指变量名、函数名的误写,标点符号的缺、漏等。 对于这类错误,通常能在运行时发现,终止执行,并给出相应 的错误原因以及所在行号。 ▪ 运行错误是算法本身引起的,发生在运行过程中。相对语法 错误而言,运行错误较难处理。尤其是M函数文件,它一旦运 行停止,其中间变量被删除一空,错误很难查找。 ▪ 有两种调试方法:直接调试法和工具调试法
2.4M文件的调试(续1) 直接调试法:可以用下面方法发现某些运行错误。 在M文件中,将某些语句后面的分号去掉,迫使M文件输 出一些中间计算结果,以便发现可能的错误。 在适当的位置,添加显示某些关键变量值的语句(包括使 用disp在内)。 利用echo指令,使运行时在屏幕上逐行显示文件内容。 echo on 能显示M脚本文件; echo funNsme on能显示名为 Funnsme的M函数文件。 在原M脚本或函数文件的适当位置,增添指令 keyboard。 keyboard语句可以设置程序的断点。 通过将原M函数文件的函数申明行注释掉,可使一个中 间变量难于观察的M函数文件变为一个所有变量都保留在 基本工作空间中的M脚本文件
10 2.4 M文件的调试(续1) ▪ 直接调试法:可以用下面方法发现某些运行错误。 • 在M文件中,将某些语句后面的分号去掉,迫使M文件输 出一些中间计算结果,以便发现可能的错误。 • 在适当的位置,添加显示某些关键变量值的语句(包括使 用 disp 在内)。 • 利用 echo 指令,使运行时在屏幕上逐行显示文件内容。 echo on 能显示M脚本文件;echo FunNsme on 能显示名为 FunNsme 的M函数文件。 • 在原M脚本或函数文件的适当位置,增添指令 keyboard 。 keyboard 语句可以设置程序的断点 。 • 通过将原M函数文件的函数申明行注释掉,可使一个中 间变量难于观察的M函数文件变为一个所有变量都保留在 基本工作空间中的M脚本文件