Matlab 匿名函数列表参数
Matlab anonymous function list arguments
我对匿名函数比较陌生,通过 google 搜索找不到任何东西,所以我想来这里寻求帮助。对于符号函数,我可以使用 symvar
来确定函数依赖关系。是否有等效的匿名函数?
示例:
这个函数告诉你如何点水成金
afun = @(temp,pressure,volume,time,mass) ...
除了 disp(afun)
之外,有没有办法使用像 symvar
这样的函数来捕获因变量,其中输入变量列表可以存储在另一个变量中?例如 test = symvars(afun) 其中 symvar 被替换为与匿名函数相关的内容。换句话说,我希望 "test" 成为一个等于 "temp,pressure,volume,time,mass"?
的数组
匿名函数中的"anonymous"不是指内容未知。它指的是这个函数 不像 m 文件中的函数那样具有静态名称 。
例如,如果您创建以下函数,它只能按其名称 myfunction
.
使用
function out = myfunction(a,b)
然而,对于函数句柄,它被分配给一个变量,并且变量的名称用于调用该函数。
myfunc = @(a,b)disp('I am a walrus');
myfunc2 = myfunc;
现在可以使用 myfunc()
或 myfunc2()
.[=31= 调用 same 函数]
现在我们已经排除了命名法,如果给你一个函数句柄,你实际上可以只显示函数句柄(使用 disp
)并查看函数定义(完成输入参数)。
f = @(a,b)disp('I am a sneaky function');
disp(f)
f = @(a,b)disp('I am a sneaky function');
由此很容易推断出 f
有两个输入参数(a
和 b
)。
至于这些输入参数应该是什么以及函数对这些参数做了什么,您必须查看函数句柄的函数组件或询问任何人创造了它。如果您不知道,这并不能使它成为 "anonymous",它只会使它缺乏记录。
如果您想以编程方式获取有关输入参数的信息,大多数适用于常规函数的函数内省函数也适用于匿名函数。
%// Get the number of input arguments
nargin(f)
更新
如果您使用 matlabFunction
从符号表达式生成匿名函数,您可以在对 matlabFunction
using the Vars
input.
的调用中指定输入参数
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));
或者作为另一个示例,我使用 array 而不是包含值的元胞数组。然后它们将按名称作为匿名函数的单独输入显示。
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 会自动选择文档中指定的顺序:
By default, when you convert symbolic expressions, the order is alphabetical. When you convert symbolic functions, their input arguments appear in front of other variables, and all other variables are sorted alphabetically.
更新 2
如果您真的想要一些方法来检查匿名函数的输入变量,这里有一个小匿名函数可以为您完成。
anoninputs = @(f)strsplit(regexp(func2str(f), '(?<=^@\()[^\)]*', 'match', 'once'), ',');
现在我们可以像这样测试它:
f = @(a,b)disp('Just another function. Do not mind me');
anoninputs(f)
'a' 'b'
我对匿名函数比较陌生,通过 google 搜索找不到任何东西,所以我想来这里寻求帮助。对于符号函数,我可以使用 symvar
来确定函数依赖关系。是否有等效的匿名函数?
示例: 这个函数告诉你如何点水成金
afun = @(temp,pressure,volume,time,mass) ...
除了 disp(afun)
之外,有没有办法使用像 symvar
这样的函数来捕获因变量,其中输入变量列表可以存储在另一个变量中?例如 test = symvars(afun) 其中 symvar 被替换为与匿名函数相关的内容。换句话说,我希望 "test" 成为一个等于 "temp,pressure,volume,time,mass"?
匿名函数中的"anonymous"不是指内容未知。它指的是这个函数 不像 m 文件中的函数那样具有静态名称 。
例如,如果您创建以下函数,它只能按其名称 myfunction
.
function out = myfunction(a,b)
然而,对于函数句柄,它被分配给一个变量,并且变量的名称用于调用该函数。
myfunc = @(a,b)disp('I am a walrus');
myfunc2 = myfunc;
现在可以使用 myfunc()
或 myfunc2()
.[=31= 调用 same 函数]
现在我们已经排除了命名法,如果给你一个函数句柄,你实际上可以只显示函数句柄(使用 disp
)并查看函数定义(完成输入参数)。
f = @(a,b)disp('I am a sneaky function');
disp(f)
f = @(a,b)disp('I am a sneaky function');
由此很容易推断出 f
有两个输入参数(a
和 b
)。
至于这些输入参数应该是什么以及函数对这些参数做了什么,您必须查看函数句柄的函数组件或询问任何人创造了它。如果您不知道,这并不能使它成为 "anonymous",它只会使它缺乏记录。
如果您想以编程方式获取有关输入参数的信息,大多数适用于常规函数的函数内省函数也适用于匿名函数。
%// Get the number of input arguments
nargin(f)
更新
如果您使用 matlabFunction
从符号表达式生成匿名函数,您可以在对 matlabFunction
using the Vars
input.
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));
或者作为另一个示例,我使用 array 而不是包含值的元胞数组。然后它们将按名称作为匿名函数的单独输入显示。
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 会自动选择文档中指定的顺序:
By default, when you convert symbolic expressions, the order is alphabetical. When you convert symbolic functions, their input arguments appear in front of other variables, and all other variables are sorted alphabetically.
更新 2
如果您真的想要一些方法来检查匿名函数的输入变量,这里有一个小匿名函数可以为您完成。
anoninputs = @(f)strsplit(regexp(func2str(f), '(?<=^@\()[^\)]*', 'match', 'once'), ',');
现在我们可以像这样测试它:
f = @(a,b)disp('Just another function. Do not mind me');
anoninputs(f)
'a' 'b'