比较常见的还有个Feval函数 下面的东东可以参考一下
求由字符串给定的函数值
函数feval与eval类似,但在用法上有更多的限制。feval(' fun ',x)求由字符串' fun '给定的函数值,其输入参量是变量x。即feval(' fun ',x)等价于求fun(x)值。
函数eval,feval的基本用途限在用户创建的函数内。一般地,feval可求出有大量输入参量的函数值
利用feval统一函数的调用方式
先看看这两个函数
function y = testfun1(x)
y = x + 1;
function y = testfun2(x,b)
y = x + b;
一般情况下,输入相应的自变量和参数值,就可以得到函数值
x = 1; y = testfun1(x);
x = 1; b = 2; y = testfun2(x,b);
也可以使用feval函数来执行。
x = 1; y = feval(@testfun1, x);
x = 1; b = 2; y = feval(@testfun2, x, b);
然而,有的时候需要用feval函数把这两个函数的执行方式统一起来。
就会遇到这样的问题:这两个函数一个是带参数的,另外一个是不带参数的,或者有可能会出现函数所带的参数数目不一样的情况,如何统一呢?
定义一个cell型的args参数,可以解决这个问题。
第一种情况: args={}; x = 1; y = feval(@testfun1, x, args{:});
注意:写成这样是不行的 :x = 1; y = feval(@testfun1, x, {});或者y = feval(@testfun1, x, {:});
第二种情况: args={2}; x = 1; y = feval(@testfun1, x, args{:});
当然,也可以采用下面这种比较笨的方法:
if(function==@testfun1)
y = feval(@testfun1, x);
else
y = feval(@testfun2, x, b);
end
当可选函数较多,或者需要反复执行时,这样的调用方式显然是低效的。
这种通过feval将函数的执行方式统一起来的做法,特别适合于在主程序中调用某一类函数。比如在Matlab gads工具箱中,stepGA函数需要调用尺度变换函数,然而有的尺度变换函数是需要指定参数的,有些则不需要。
这种同一类函数参数个数不统一的状况也可以通过引入冗余参数来解决
function y = testfun1(x, b)
y = x + 1 ; |