Matlab函数进阶:使用匿名函数(Anonymous Function)和内嵌函数(Nested Function)处理多变量传递问题(Matlab 7.0以上)
问题:有一个多变量函数f(a b c x),现需要分别在a=a0b=b0c=c0和a=a1b=b1c=c1的条件下对f(a b c x)进行某一操作。
此类问题常在数值积分时出现。
解决方案:
1.使用全局变量
可在主调函数和被调函数中分别将a,b,c声明为全局变量(global a b c),这时f通过全局变量传递abc,定义时可以只有一个参数x。
2.使用anonymous function
3.使用nested function
下面举例说明anonymous function和nested function的使用。
例:对任意二次多项式ax2+bx+c 进行数值积分(此处显然可以解析得到,此例使用anonymous
function做演示)
解:(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.