首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Matlab匿名函数列表参数

Matlab匿名函数列表参数
EN

Stack Overflow用户
提问于 2016-04-17 22:38:14
回答 1查看 721关注 0票数 0

我对匿名函数相当陌生,而且我无法通过谷歌搜索找到任何东西,所以我想我会来这里寻求帮助。对于符号函数,我可以使用symvar来确定函数的依赖关系。匿名函数是否有等价物?

这个函数告诉你如何把水变成金子。

代码语言:javascript
运行
复制
afun = @(temp,pressure,volume,time,mass) ...

除了disp(afun)之外,是否有一种方法可以用像symvar这样的函数捕获因变量,其中输入变量列表可以存储在另一个变量中?例如,test = symvars(afun),其中symvar被与匿名函数相关的内容替换。换句话说,我希望"test“是一个等于”温度、压力、体积、时间、质量“的数组?

EN

Stack Overflow用户

回答已采纳

发布于 2016-04-17 22:44:10

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

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

代码语言:javascript
运行
复制
function out = myfunction(a,b)

但是,对于函数句柄,它被分配给一个变量,该变量的名称用于调用该函数。

代码语言:javascript
运行
复制
myfunc = @(a,b)disp('I am a walrus');
myfunc2 = myfunc;

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

现在,我们已经排除了命名方法,如果给您一个函数句柄,您实际上可以只显示函数句柄(使用disp),并查看函数定义(完整地带有输入参数)。

代码语言:javascript
运行
复制
f = @(a,b)disp('I am a sneaky function');
disp(f)

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

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

至于这些输入参数应该是什么,以及函数对这些参数做了什么,您必须查看函数句柄的函数组件,或者询问创建它的人。如果你不知道,这并不意味着它是“匿名的”,它只会使它缺乏文档记录。

如果您想以编程方式获取有关输入参数的信息,大多数在常规函数上工作的函数内省函数也会处理匿名函数。

代码语言:javascript
运行
复制
%// Get the number of input arguments
nargin(f)

更新

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

举个例子,从文件中

代码语言:javascript
运行
复制
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));

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

代码语言:javascript
运行
复制
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

如果您真的想要某种方式来检查匿名函数的输入变量,那么这里有一个小小的匿名函数来帮助您。

代码语言:javascript
运行
复制
anoninputs = @(f)strsplit(regexp(func2str(f), '(?<=^@\()[^\)]*', 'match', 'once'), ',');

现在我们可以像这样测试它:

代码语言:javascript
运行
复制
f = @(a,b)disp('Just another function. Do not mind me');

anoninputs(f)

    'a'   'b'
票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36682998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档