MATLAB:我能否以某种方式将函数用作第一个 class 对象?
MATLAB: can I somehow use functions as first class objects?
我有一个用例,我需要根据用户选择的基函数数量来计算变量。例如,如果用户指定 num_basis_funcs = 4
:
y = const() + linear(x) + rational1(x) + sin(x)
1 2 3 4
如果用户指定 num_basis_funcs = 2
,则 y
只会计算为:
y = const() + linear(x)
1 2
如果用户指定 num_basis_funcs = 1
,则 y
只会计算为:
y = const()
1
为了举例,我选择了一些简单的基函数;可以这么说,在完整的应用程序中,这些基本功能将由用户定义。
来自 Python,我想到的是制作一个功能列表,我根据用户输入有选择地应用这些功能。从 C++ 的角度来看,想到的是使用函数指针来传递应该执行哪个函数。
一般来说,如何在 MATLAB 中将函数作为 "first class objects" 传递?
您正在寻找 function handles。我建议传递函数句柄的单元格数组并在循环中评估它们,如下所示:
function out = evalFns(x, fnCell)
out = 0;
for iFn = 1:length(fnCell)
out = out + fnCell{iFn}(x);
end
您可以通过 y = evalFns(x, {@const, @linear, @rational, @sin})
调用。
我有一个用例,我需要根据用户选择的基函数数量来计算变量。例如,如果用户指定 num_basis_funcs = 4
:
y = const() + linear(x) + rational1(x) + sin(x)
1 2 3 4
如果用户指定 num_basis_funcs = 2
,则 y
只会计算为:
y = const() + linear(x)
1 2
如果用户指定 num_basis_funcs = 1
,则 y
只会计算为:
y = const()
1
为了举例,我选择了一些简单的基函数;可以这么说,在完整的应用程序中,这些基本功能将由用户定义。
来自 Python,我想到的是制作一个功能列表,我根据用户输入有选择地应用这些功能。从 C++ 的角度来看,想到的是使用函数指针来传递应该执行哪个函数。
一般来说,如何在 MATLAB 中将函数作为 "first class objects" 传递?
您正在寻找 function handles。我建议传递函数句柄的单元格数组并在循环中评估它们,如下所示:
function out = evalFns(x, fnCell)
out = 0;
for iFn = 1:length(fnCell)
out = out + fnCell{iFn}(x);
end
您可以通过 y = evalFns(x, {@const, @linear, @rational, @sin})
调用。