matlabppt第五讲.ppt
第五讲Matlab提供的工作方式包括:提供的工作方式包括:n1交互式指令操作:交互式指令操作:用户在命令窗口输入命令,用户在命令窗口输入命令,系统执行现实结果,适合于简单的问题的处理系统执行现实结果,适合于简单的问题的处理n2M文件的编程工作:文件的编程工作:调用函数文件执行程序调用函数文件执行程序M文件是由文件是由Matlab语句构成的语句构成的ASCII码文本文件,扩展名为码文本文件,扩展名为.m。M文件有两种形式:文件有两种形式:M脚本文件和脚本文件和M函数文件。函数文件。一一M文件文件n1M文件的创建和执行文件的创建和执行n2M脚本文件和函数文件脚本文件和函数文件n3M文件的结构文件的结构1)M文件创建,保存,打开和编辑。(见演示)文件创建,保存,打开和编辑。(见演示)2)搜索和执行搜索和执行M文件:文件:n执行方法:执行方法:用户在命令窗口键入用户在命令窗口键入M文件名,并按文件名,并按下回车键来执行。系统首先搜索该文件,若文件下回车键来执行。系统首先搜索该文件,若文件存在,以解释方式按顺序执行存在,以解释方式按顺序执行M文件的语句。文件的语句。n搜索过程:搜索过程:检查工作空间是否有该名称检查工作空间是否有该名称检查是否为检查是否为MATLAB内部函数内部函数检查当前目录检查当前目录在默认搜索路径中查找文件在默认搜索路径中查找文件n1M文件的创建和执行文件的创建和执行2 脚本文件和函数文件脚本文件和函数文件1)M脚本文件脚本文件是一串按用户意图排列而成的是一串按用户意图排列而成的(包括控制流指令包括控制流指令)matlab指令集合。指令集合。脚本文件中的命令格式和前后位置,与在命令脚本文件中的命令格式和前后位置,与在命令窗口中输入的没有任何区别。窗口中输入的没有任何区别。脚本文件的特点:脚本文件的特点:n1)MATLAB在运行脚本文件时,只是简单地按顺序在运行脚本文件时,只是简单地按顺序从文件中读取一条条命令,送到从文件中读取一条条命令,送到MATLAB命令窗口命令窗口中去执行。中去执行。n2)与在命令窗口中直接运行命令一样,与在命令窗口中直接运行命令一样,脚本文件运脚本文件运行产生的变量都是驻留在行产生的变量都是驻留在MATLAB的工作空间的工作空间(workspace)中中,可以很方便地查看变量,除非用,可以很方便地查看变量,除非用clear命令清除;脚本文件的命令也可以访问工作空命令清除;脚本文件的命令也可以访问工作空间的所有数据,因此要注意避免变量的覆盖而造成间的所有数据,因此要注意避免变量的覆盖而造成程序出错。程序出错。n3)脚本文件创建或定义的变量保留在工作空间中,)脚本文件创建或定义的变量保留在工作空间中,因此因此空间中的其他命令文件和函数文件都可以访问空间中的其他命令文件和函数文件都可以访问这些变量这些变量。n4)因此在程序设计中,脚本文件常作因此在程序设计中,脚本文件常作为主程序来为主程序来设计。设计。2)M函数文件函数文件与脚本文件不同,函数文件是一个黑箱,从外界只能看到传给与脚本文件不同,函数文件是一个黑箱,从外界只能看到传给它的输入量和送出来的计算结果,内部运行是不可见的它的它的输入量和送出来的计算结果,内部运行是不可见的它的特点是:特点是:(1)从形式上看,与脚本文件不同,从形式上看,与脚本文件不同,函数文件的第一函数文件的第一行总是以行总是以”function”引导的函数申明行引导的函数申明行,该行还罗,该行还罗列出函数与外界联系的全部标称输入输出宗量对输列出函数与外界联系的全部标称输入输出宗量对输入输出宗量的数目没有限制即可以没有输入输出宗入输出宗量的数目没有限制即可以没有输入输出宗量,也可以是任意多个数目量,也可以是任意多个数目function输出变量列表输出变量列表=函数名函数名(输入变量列表输入变量列表)函数声明格式:函数声明格式:(2)matlab允许使用比标称数目少的输入输出宗允许使用比标称数目少的输入输出宗 量量,实现对函数的调用实现对函数的调用.(3)函数文件保存的文件名应该和用户定义的函数)函数文件保存的文件名应该和用户定义的函数名一致。名一致。(4)从运行上看从运行上看,与脚本文件不同与脚本文件不同.函数文件运行时函数文件运行时,matlab会专门为它开辟一个临时工作空间会专门为它开辟一个临时工作空间,称为称为函数函数工作空间工作空间.所有中间变量都存放在函数工作空间所有中间变量都存放在函数工作空间.当执当执行完文件最后一条指令或遇到行完文件最后一条指令或遇到return时时,就就结束该函结束该函数文件的运行数文件的运行,同时该临时函数空间及其所有的中间变同时该临时函数空间及其所有的中间变量就立即被清除量就立即被清除(6)假如在函数文件中,发生假如在函数文件中,发生对某脚本文件的调用对某脚本文件的调用,那么该脚本文件运行产生的所有那么该脚本文件运行产生的所有变量都存放在该函数变量都存放在该函数空间中空间中,而不是在基本空间,而不是在基本空间(5)函数空间随具体函数空间随具体M函数文件的调用而产生函数文件的调用而产生,随调用随调用结束而删除结束而删除.函数空间是相对基本空间独立的函数空间是相对基本空间独立的,临时的临时的.在在matlab整个运行期间整个运行期间,可以产生任意多个临时函数可以产生任意多个临时函数空间空间3 M文件的一般结构文件的一般结构(1)函数申明行:位于函数文件的首行,以函数申明行:位于函数文件的首行,以matlab关键字关键字function开头,开头,函数名以及函数的输入输出宗量都在这一行定义函数名以及函数的输入输出宗量都在这一行定义(2)H1行:紧随函数申明行之后以行:紧随函数申明行之后以%开头的第一注释行包括:大写体开头的第一注释行包括:大写体的函数文件名,运用关键词简要描述函数功能该行供的函数文件名,运用关键词简要描述函数功能该行供lookfor关键词查关键词查询和询和help在线帮助使用在线帮助使用(3)在线帮助文本区:在线帮助文本区:H1行及其之后的连续以行及其之后的连续以%开头的所有注释行构成开头的所有注释行构成的整个在线帮助文本的整个在线帮助文本.通常包括通常包括:函数输入输出宗量的含义函数输入输出宗量的含义,调用格式说明调用格式说明.(4)编写和修改记录:以编写和修改记录:以%开头,注释编写和修改的日期,版本记录开头,注释编写和修改的日期,版本记录(5)函数体:是实现函数体:是实现M文件功能的指令集它接收输入宗量,进行程序流文件功能的指令集它接收输入宗量,进行程序流程控制,得到输出宗量如果仅从运算角度看,只有函数申明行和函数体程控制,得到输出宗量如果仅从运算角度看,只有函数申明行和函数体两部分是构成两部分是构成M函数文件必不可少的函数文件必不可少的说明:说明:从结构上看,从结构上看,M脚本文件仅比脚本文件仅比M函数文件少一个函函数文件少一个函数申明行数申明行,其余各部分的构造和作用都相同,其余各部分的构造和作用都相同函数定义名和保存文件名一致两者不一致时,将函数定义名和保存文件名一致两者不一致时,将忽视文件首行的函数定义名,而以忽视文件首行的函数定义名,而以保存文件名为准保存文件名为准函数文件的名字必须以字母开头,后面可以是字母,函数文件的名字必须以字母开头,后面可以是字母,下划线以及数字的任意组合下划线以及数字的任意组合例例 M函数文件示例函数文件示例%circle.mfunction sa=circle(r,s)%函数申明行函数申明行%CIRCL plot a cirlce of radiar in the line specified by s%r 指定半径数值指定半径数值%s 指定线型颜色的字符串指定线型颜色的字符串%sa 圆面积圆面积%circle(r)利用蓝实线画半径为利用蓝实线画半径为r的圆的圆%circle(r,s)利用利用s指定的颜色画半径为指定的颜色画半径为r的圆的圆%sa=circle(r)计算圆面积计算圆面积,并画半径为并画半径为r的兰色圆周的兰色圆周%sa=circle(r,s)计算圆面积计算圆面积,并画半径为并画半径为r的圆的圆,s指定线的颜色指定线的颜色%编写于编写于x年年x月月x日日,修改于修改于x年年x月月x日日if nargin2 error(输入宗量太多输入宗量太多);end;if nargin=1 s=b;end;clf;t=0:pi/100:2*pi;x=r*exp(i*t);if nargout=0 plot(x,s);else sa=pi*r*r;fill(real(x),imag(x),s)endaxis(square)二二Matlab程序控制流程序控制流nfor循环结构循环结构nwhile循环结构循环结构nif-else-end分支结构分支结构nswitch-case结构结构ntry-catch结构结构n控制程序流的其他常用指令控制程序流的其他常用指令matlab提供了五种控制程序流的结构:提供了五种控制程序流的结构:(1)for循环结构循环结构for k=k1:inc:k2 (和一维数组冒号法定义相同)(command)%循环体end例 for循环示例for ii=1:10 x(ii)=ii;endx=1 2 3 4 5 6 7 8 9 10说明:说明:循环不会因为在循环体内对循环变量更新设置而中循环不会因为在循环体内对循环变量更新设置而中 断断 在在for后面的表达式中的数组可以为任何合法的后面的表达式中的数组可以为任何合法的matlab数组数组 循环结构可以嵌套使用循环结构可以嵌套使用 为了得到高效率的代码,应尽量提高代码的向量化程为了得到高效率的代码,应尽量提高代码的向量化程度,避免使用循环结构;在循环指令之前应尽量对数组度,避免使用循环结构;在循环指令之前应尽量对数组进行预定义进行预定义 由于由于i和和j是预定义变量,作虚单位使用建议不作为是预定义变量,作虚单位使用建议不作为循环变量使用循环变量使用例例 多重循环生成多重循环生成9x9乘法表乘法表for ii=1:9 for kk=1:iia(ii,kk)=ii*kk;endendx=1:1:9;y=x;x=x*y;a=ones(9,9);a=tril(a);table=x.*a矩阵的运算得到矩阵的运算得到(2)while循环结构循环结构while expression (command)%循环体循环体end说明:说明:在在while和和end之间的组命令为循环体之间的组命令为循环体.当执行到当执行到while指令时指令时,首先检首先检测测expression的值的值,如其值为逻辑真(非如其值为逻辑真(非0),则执行循环体中的命令,则执行循环体中的命令(组命组命令令).当组命令执行完毕当组命令执行完毕,继续检测表达式的值继续检测表达式的值,若仍为真若仍为真,循环执行组命令循环执行组命令,一旦一旦表达式为假,就结束循环表达式为假,就结束循环 while和和for两种循环的区别在于两种循环的区别在于:while循环结构的循环体被执行的次循环结构的循环体被执行的次数是不确定的,而数是不确定的,而for结构中循环体的执行次数是确定的结构中循环体的执行次数是确定的当当while指令后的表达式是空数组时,认为表达式值为假指令后的表达式是空数组时,认为表达式值为假 使用使用while循环条件时要小心出现无限循环,如果出现按循环条件时要小心出现无限循环,如果出现按Ctrl+C可终止可终止表达式为真?执行组命令退出循环例例 级数收敛性判断:级数收敛性判断:当收敛到终值当收敛到终值 s=2/6的的0.01%以内时以内时,项数项数N是多少是多少.series=1;k=2;exact=pi2/6;while abs(series-exact)/exact)1e-4;series=series+1/k2;k=k+1;End(3)if-else-end分支结构分支结构if-else-end指令为程序流提供了一种分支结构,它的最常用的方式为:单分支单分支双分支双分支多分支多分支ifexpressioncommandendifexpressioncommand1elsecommand2endifexpressioncommand1elseifexpressioncommand2elsecommandnend 常用常用常被switch-case取代 如果判决条件如果判决条件expression为一个空数组,认为条件为假为一个空数组,认为条件为假 表达式由多个逻辑子表达式组成时表达式由多个逻辑子表达式组成时,将尽可能少地检测子表达式的值将尽可能少地检测子表达式的值 if指令判决和指令判决和break指令配合使用,可以强制终止指令配合使用,可以强制终止for或或while循环循环(4)switch-case结构结构switch expression case test1 command1 case test2 case testk commandk otherwise commandsend说明:说明:当遇到当遇到switch结构时,结构时,matlab将表达式的值依次和各个将表达式的值依次和各个case指令后面的指令后面的检测值进行比较。如果比较结果为假,则取下一个检测值再比较,一旦比较检测值进行比较。如果比较结果为假,则取下一个检测值再比较,一旦比较结果为真,结果为真,matlab将执行相应的一组命令,然后跳出该结构。如果所有的将执行相应的一组命令,然后跳出该结构。如果所有的比较结果都为假,即表达式和所有的检测值都不等,比较结果都为假,即表达式和所有的检测值都不等,matlab将执行将执行otherwise后面的一组命令。可见该结构保证至少有一组命令会得到执行。后面的一组命令。可见该结构保证至少有一组命令会得到执行。switch指令后面的表达式为指令后面的表达式为一个标量一个标量或者或者一个字符串一个字符串。对于标量形式的表。对于标量形式的表达式,比较这样进行:表达式检测值达式,比较这样进行:表达式检测值i.对于字符串,将调用函数对于字符串,将调用函数strcmp来实现比较。来实现比较。case指令后面的检测值不仅可以是一个标量值或字符串,还可以是一个指令后面的检测值不仅可以是一个标量值或字符串,还可以是一个单单元数组元数组。如果一个检测值是一个单元数组,。如果一个检测值是一个单元数组,matlab将把表达式的值和该单将把表达式的值和该单元数组中的所有元素进行比较,元数组中的所有元素进行比较,如果单元数组中某个元素和表达式的值相等,如果单元数组中某个元素和表达式的值相等,就认为此次比较结果为真就认为此次比较结果为真。当当matlab检测到某个检测值和表达式相等时,将执行相应的一组命令,检测到某个检测值和表达式相等时,将执行相应的一组命令,执执行完毕,自动跳出行完毕,自动跳出swith结构,无需使用结构,无需使用break指令指令。formonth=1:12switchmonthcase3,4,5season=Spring;case6,7,8season=Summer;case9,10,11season=Autumn;case12,1,2season=Winter;endfprintf(Month%d=%s.n,month,season);end例:根据月份来判断季节例:根据月份来判断季节(5)try-catch结构结构try command1%组命令组命令1总被执行,若正确,则跳出此结构总被执行,若正确,则跳出此结构catch command2%仅当组命令仅当组命令1出现执行错误,组命令出现执行错误,组命令2才被执行才被执行end说明:说明:只有在执行组命令只有在执行组命令1出现错误后,组命令出现错误后,组命令2才被执行才被执行可调用可调用lasterr函数查询出错原因,如果函数函数查询出错原因,如果函数lasterr运行结构为一个空运行结构为一个空串,则表明命令串,则表明命令1被成功执行了。被成功执行了。当执行组命令当执行组命令2时出错,则终止该结构时出错,则终止该结构例例 try-catch结构应用结构应用N=4;A=magic(3);%A为为3x3矩阵矩阵try A_N=A(N,:);%取取A的第的第N行元素行元素catch A_end=A(end,:);endlasterr(6)控制程序流的其他常用指令控制程序流的其他常用指令1)v=input(msg)v=input(msg,s)该指令执行时,控制权交给键盘,待输入结束,按Enter键,控制权交换matlab,msg是提示用的字符串,告诉用户输入什么.第一种格式用于键入数值,字符串等数据,最后v是一个数值(包括数组)或者一个字符串第二种格式,不管键入什么,总以字符串形式赋给变量v2)keyboard从M文件中激活键盘,遇到该命令时,将控制权交给键盘,用户可以从键盘输入各种matlab指令,仅当用户输入return指令后,控制权才交还给程序与input指令的区别是:该指令允许输入任意多个matlab指令,而input只能输入赋给变量的值该指令在调试M文件时非常有用3)continue跳过位于其后的循环中的其他指令,执行循环的下一个迭代例 更改数组中的值a=ones(1,12);for k=1:12 if rem(k,3)=0 continue else a(k)=k;endend4)Break终止while,for循环,也可以在if-end,switch-case,try-catch中导致中断5)pause,pause(n)第一种格式使程序暂停执行,等待用户按任意键继续,第二种格式使程序暂停n秒后,再继续执行8)lasterr,显示最新出错原因,并终止程序 9)lastwarn 显示matlab自动给出的最新警告程序并继续运行6)return 结束return指令所在函数的执行,把控制转至主调函数或指令窗.否则,只有 整个被调函数执行完毕才转出7)error(msg)显示出错信息msg,终止程序10)warning(msg)显示警告信息msg,程序继续执行三三变量的检测传递和限权使用函数变量的检测传递和限权使用函数n1输入输出宗量检测指令输入输出宗量检测指令n2局部变量和全局变量局部变量和全局变量n3子函数和私用函数子函数和私用函数1 输入输出宗量检测指令输入输出宗量检测指令nargin-在函数体内,用于获取实际输入宗量nargout-在函数体内,用于获取实际输出宗量nargin(fun)-获取fun指定函数的标称输入宗量nargout(fun)-获取fun指定函数的标称输出宗量inputname(n)-在函数体内使用,给出第n个输入宗量的实际调用变量名Varargin-输入参数Varargout-输出参数例:参见教学示例circle2 局部变量和全局变量局部变量和全局变量(1)局部变量局部变量它存在于函数空间内部的中间变量它存在于函数空间内部的中间变量,产生于该函数的运行过程中产生于该函数的运行过程中,其影响范围其影响范围也仅限于该函数本身也仅限于该函数本身(2)全局变量全局变量通过通过global指令指令,matlab也允许几个不同的函数空间以及基本工作空间共也允许几个不同的函数空间以及基本工作空间共享同一个变量享同一个变量.这种共享的变量称为全局变量这种共享的变量称为全局变量.每个希望共享全局变量的函数每个希望共享全局变量的函数或或matlab基本工作空间基本工作空间,必须逐个用必须逐个用global对具体变量加以专门定义对具体变量加以专门定义.没没采用采用global定义的函数或基本工作空间定义的函数或基本工作空间,将无权享用全局变量将无权享用全局变量对全局变量的定义必须在该变量被使用之前进行,建议把全局变量的定义放在函数体的首行位置,并使用大写字符命名全局变量由于全局变量损害函数的封装性,因此不提倡使用全局变量3 子函数和私用函数子函数和私用函数(1)子函数子函数matlab允许一个允许一个M函数文件包含多个函数的代码,其中,第一个出现的函函数文件包含多个函数的代码,其中,第一个出现的函数称为主函数该文件中的其他函数称为子函数保存时所用函数文件名与数称为主函数该文件中的其他函数称为子函数保存时所用函数文件名与主函数定义名相同外部程序只能对主函数进行调用主函数定义名相同外部程序只能对主函数进行调用子函数性质:子函数性质:1)每个子函数的第一行是其函数申明行每个子函数的第一行是其函数申明行2)在在M函数文件内,主函数的位置是不可改变的,但子函数的排列次序函数文件内,主函数的位置是不可改变的,但子函数的排列次序可以任意变动可以任意变动3)子函数只能被处于同一文件的主函数或其他子函数调用子函数只能被处于同一文件的主函数或其他子函数调用4)在在M函数文件中,任何指令通过函数名对函数进行调用时,子函数的函数文件中,任何指令通过函数名对函数进行调用时,子函数的优先级仅次于内建函数优先级仅次于内建函数5)同一文件的主函数,子函数的工作空间都是彼此独立的,各函数间的同一文件的主函数,子函数的工作空间都是彼此独立的,各函数间的信息,或通过输入输出宗量,或通过全局变量传递,或通过跨空间指令信息,或通过输入输出宗量,或通过全局变量传递,或通过跨空间指令传递传递(2)私用函数私用函数所谓私用函数,是指位于所谓私用函数,是指位于private目录上的目录上的M文件函数其文件函数其性质如下:性质如下:1)私用函数的构造与普通私用函数的构造与普通M函数完全相同函数完全相同2)私用函数只能被私用函数只能被private目录的直接父目录上的目录的直接父目录上的M文件函数所调用文件函数所调用,它不能被其他目录上的任何它不能被其他目录上的任何M函数,函数,M脚本文件或脚本文件或matlab指令窗指令窗中的命令所调用也不能被直接父目录上的中的命令所调用也不能被直接父目录上的M脚本文件调用脚本文件调用3)M文件中文件中,任何指令通过函数名对函数进行调用时,私用函数的优先任何指令通过函数名对函数进行调用时,私用函数的优先级虽低于内建函数和子函数,但高于其他任何目录上的函数级虽低于内建函数和子函数,但高于其他任何目录上的函数matlab的搜索顺序总结的搜索顺序总结假设matlab在一个文件中碰到指令cow时,它将按以下步骤逐步进行检索(1)检查cow是否一个变量名,如果不是,执行下一步;(2)检查cow是不是内建函数(Built-in Function),不是则执行下一步(3)检查cow是不是cow所在的M文件中的一个子函数,不是则往下执行(4)检查cow是不是它所在M文件的一个私有函数(先找cow.p,然后是 cow.m),不是则往下执行(5)检查cow是不是当前目录下的文件(先找cow.p,然后是cow.m),不是 则往下执行(6)检查搜索路径上是否有cow存在(先找cow.p,然后是cow.m)matlab将使用最先找到的那个cow,如果一直找不到,就给出错误提示四四 P码文件码文件(1)语法分析过程和伪代码一个M文件首次被调用(运行文件名或被M文件编辑器打开)时,matlab将首先对该M文件进行语法分析(Parse),并把生成的相应内部伪代码(简称P码)文件存放在内存中此后,再次调用该M文件时,就直接调用该文件在内存中的P码文件,而不会对原码文件重复进行语法分析matlab的分析器总是把M文件连同被它调用的所有函数M文件一起变换成P码文件的P码文件有与原码文件相同的文件名,其扩展名为.p,P码文件运行速度高于其原码文件.假如存在同名的P码和原码文件,那么当该文件名被调用时,被执行的肯定是P码文件说明:P码文件较之原码文件有两大优点:一是运行速度快,二是它是二进制文件,程序保密性好(3)内存中P码文件的列表和清除inmem-罗列出内存中所有P码文件名clear funname-清除内存中的funname.p P码文件clear functions-清除内存中的所有P码文件如:pcode circle/circle.ppcode funname-在当前目录上生成funname.ppcode funname inplace-在funname.m所在目录上生成P码文件 funname.p(2)P码文件的预生成五五内联函数内联函数内联函数是matlab提供另一种是实现函数功能的对象。创建内联函数可以使用inline命令实现。inline(string,arg1,arg2,)%创建内联函数创建内联函数语法:语法:string必须是不带赋值号(“=”)的字符串;arg1和arg2是函数的输入变量。说明:说明:例:f=inline(sin(x)*exp(-z*x),x,z)%创建内联函数创建内联函数 y=f(5,0.3)%调用函数调用函数f 六六 串演算函数串演算函数matlab还提供了两种演算函数:一是串演算函数eval,它具有对字符串表达式进行计算的能力;另一种是函数句柄演算函数feval,它具有对函数句柄进行操作的能力这两种函数为matlab提供了所谓的宏操作能力,也被广泛使用于GUI的回调操作(1)evaly1=eval(CEM)-执行CEM指定的计算y1,y2,=eval(CEM)-执行对CEM代表的函数文件调用,并输出计算结果说明:eval指令的输入宗量必须是字符串 构成字符串的CEM,可以是任何合法的指令,表达式,语句或M文件名 第二种格式的CEM只能是M函数文件名例例 计算语句串计算语句串cleart=pi;eval(theta=t/2,y=sin(theta);例例 计算合成串计算合成串CEM=cos,sin,tan;for k=1:1:3 theta=pi*k/12;y(1,k)=eval(CEMk,(,num2str(theta),);end(2)函数句柄和)函数句柄和 feval指令指令引如函数句柄的理由是:使feval及借助于它的泛函指令工作更可靠;使函数调用象变量调用一样灵活方便;可迅速获得同名重载函数的位置,类型信息;可在更大范围内调用子函数和私用函数,提高软件重用性;提高函数调用速度函数句柄并不是伴随函数文件而自动形成的文件属性,是必须通过专门的定义才会生产的,为一个函数定义句柄的方法有两种:利用符号,或利用转换函数str2func.例例 为内建函数创建函数句柄,并观察其内涵为内建函数创建函数句柄,并观察其内涵hsin=sin;class(hsin)size(hsin)ans=function_handleans=1 1(2)fevaly1,y2,=feval(FH,arg1,arg2,)-执行函数句柄FH指定的计算feval与函数句柄配套使用,而eval与字符串配套使用例例 feval的使用的使用1)定义M文件%add.mfunction total=add(a,b)total=a+b;2)通过函数句柄调用hadd=add;a=100;b=200;c=feval(hadd,a,b)