1、Matlab 中使用匿名函数和内嵌函数处理多变量传递问题(Matlab 7.0 以上) :问题:有一个多变量函数 f(abcx),现需要分别在 a=a0b=b0c=c0 和 a=a1b=b1c=c1 的条件下对f(abcx)进行某一操作。此类问题常在数值积分时出现。解决方案:1 使用全局变量 可在主调函数和被调函数中分别将 a,b,c 声明为全局变量 (global a b c),这时 f 通过全局变量传递 abc, 定义时可以只有一个参数 x。2 使用 anonymous function3 使用 nested function 下面举例说明 anonymous function 和 nes
2、ted function 的使用。例:对任意二次多项式 ax2+bx+c 进行数值积分(此处显然可以解析得到,此例使用anonymousfunction 做演示)解:(1)使用匿名函数编写文件 intpoly2.m如下 function y_int=intpoly2(a,b,c)y_int=quad(x)(poly2(a,b,c,x), 0,1); %此处利用 matlab 内部函%数 quad(fun, x0,xt)进行积分,%被积函数 fun 我们使用匿名函%数(x)(poly2(a,b,c,x)以便%将自变量限制为 x. function y=poly2(ai,bi,ci,x) %此处定
3、义一个多变量的子函数 poly2( a,b,c,x)y=ai.*x.2+bi.*x+ci; %此处使用矩阵元素运算(.* 和.)等便于%被矩阵化的内部函数调用,且提高程序效率执行:保存该文件并将 matlab 切换至该文件目录下,命令行输入 intpoly2(1,2,3), 便给出积分结果 ans=4.33(2)使用 nested function编写函数保存为 intnest.m, 内容如下function y_int=intnest(a,b,c)y_int=quad(poly2, 0,1); %此处利用 matlab 内部函%数 quad(fun, x0,xt)进行积分,%被积函数 fun 我们使用内嵌函%数 poly2(x)的句柄poly2 function y=poly2(x) %此处定义一个内嵌函数 poly2( a,b,c,x) y=a.*x.2+b.*x+c; %直接调用母函数中的变量 a,b,cend % 结束内嵌函数 poly2end % 结束母函数 intpoly2 保存后执行,同样效果。可见 nestedfunction 只是将主调函数和被调函数封装到了一起以共享主调函数的变量。注意:一般函数不需要 end,当出现 nested function 时,主调函数和被调函数都必须有 end 来结束!