使用带有feval的匿名函数

时间:2013-12-16 02:54:18

标签: matlab anonymous-function

我不理解以下代码中的匿名函数:

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参数也具有匿名功能。

有人可以给出一些暗示吗?

1 个答案:

答案 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)的输出进行比较来对此进行测试。