我不理解以下代码中的匿名函数:
x = 0.25 * randn(3, 1);
y = 0.25 * randn(3, 1);
h = 0.1*randn(3, 1);
interpolate = @(x, y, h, x_new, y_new) ...
feval(@(int) int(x_new, y_new), ...
TriScatteredInterp([-1; -1; 1; 1; x], ...
[-1; 1; -1; 1; y], ...
[0; 0; 0; 0; h]));
我对匿名函数和feval
函数有一些了解,但我搜索了matlab文档,并没有找到使用几个@符号的示例。 feval
参数也具有匿名功能。
有人可以给出一些暗示吗?
答案 0 :(得分:2)
所以你可能已经知道这是用句柄interpolate
创建一个匿名函数:
interpolate = @(x, y, h, x_new, y_new)...
interpolate
接受这五个输入,并调用feval
。现在这里有点棘手,因为feval
本身包含另一个匿名函数。
@(int) int(x_new, y_new)
表示输入int
并返回int(x_new,y_new)
的输出。 feval
的附加输入(在本例中为TriScatteredInterp
)被视为该匿名函数的输入。这是不对内置函数int
的引用(如果您看到以feval(@int...
开头的内容可能就是这种情况。)
对于任何给定的输入集,interpolate
所做的基本上等同于这样做:
tsi = TriScatteredInterp([-1; -1; 1; 1; x], ...
[-1; 1; -1; 1; y], ...
[0; 0; 0; 0; h]));
tsi(x_new,y_new)
您可以通过将tsi(x_new,y_new)
的输出与interpolate(x, y, h, x_new, y_new)
的输出进行比较来对此进行测试。