Matlab匿名函数列表参数

时间:2016-04-17 22:38:15

标签: matlab anonymous-function

我对匿名功能比较陌生,我无法通过谷歌搜索找到任何东西,所以我以为我会来这里寻求帮助。对于符号函数,我可以使用symvar来确定函数依赖性。是否存在匿名函数的等价物?

实施例: 此功能告诉您如何将水变成金色

afun = @(temp,pressure,volume,time,mass) ...

disp(afun)之外,有没有办法用symvar之类的函数捕获因变量,其中输入变量列表可以存储在另一个变量中?例如test = symvars(afun),其中symvar被与匿名函数相关的东西替换。换句话说,我喜欢"测试"是一个等于"温度,压力,体积,时间,质量"?

的数组

1 个答案:

答案 0 :(得分:2)

匿名函数中的“匿名”不是指未知内容。它指的是这个函数没有像m文件中的函数那样的静态名称

例如,如果您创建以下函数,则可以使用它的名称myfunction

function out = myfunction(a,b)

但是,使用函数句柄,它被赋值给一个变量,而变量的名称用于调用该函数。

myfunc = @(a,b)disp('I am a walrus');
myfunc2 = myfunc;

现在可以使用 myfunc()myfunc2()来调用相同的函数。

现在我们已经得到了命名法,如果给你一个函数句柄,你实际上只需显示函数句柄(使用disp)并查看函数定义(完成输入参数) )。

f = @(a,b)disp('I am a sneaky function');
disp(f)

    f = @(a,b)disp('I am a sneaky function');

由此可以很容易地推断f有两个输入参数(ab)。

对于这些输入参数应该是什么以及使用这些参数执行什么,你必须查看函数句柄的函数组件或询问创建它的人。如果你不能说,这不会使它“匿名”,它只会使它记录不清。

如果您想以编程方式获取有关输入参数的信息,那么对常规函数起作用的大多数函数内省函数可以在匿名函数上工作。

%// Get the number of input arguments
nargin(f)

更新

如果您使用matlabFunction从符号表达式生成匿名函数,则可以在调用matlabFunction using the Vars input时指定输入参数。

作为示例from the documentation

syms x y z t
r = (x + y/2 + z/3)*exp(-t);

%// The first input argument will be t and the second will be an array of [x,y,z]
matlabFunction(r, 'Vars', {t,[x y z]});
%// @(t,in2)exp(-t).*(in2(1)+in2(2).*(1.0./2.0)+in2(3).*(1.0./3.0));

或者作为我使用数组而不是包含值的单元格数组的另一个示例。然后它们将按名称显示为匿名函数的单独输入。

syms x y z
r = x + y/2 + z/3;
matlabFunction(r, 'Vars', [x,y,z]);
%// @(x,y,z)x+y.*(1.0./2.0)+z.*(1.0./3.0);

如果您不指定它们,MATLAB会自动选择文档中指定的顺序:

  

默认情况下,转换符号表达式时,顺序是按字母顺序排列的。转换符号函数时,它们的输入参数出现在其他变量的前面,所有其他变量按字母顺序排序。

更新2

如果确实想要某种方式来检查匿名函数的输入变量,这里有一个匿名函数来为你做这个。

anoninputs = @(f)strsplit(regexp(func2str(f), '(?<=^@\()[^\)]*', 'match', 'once'), ',');

现在我们可以测试它:

f = @(a,b)disp('Just another function. Do not mind me');

anoninputs(f)

    'a'   'b'