2013-12-16 54 views
2

我不明白,在下面的代码匿名函数:使用匿名函数与feval

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

你读过http://www.mathworks.com/help/matlab/matlab_prog/anonymous-functions.html吗? –

+1

我不是很清楚feval使用@fucntion作为其参数 – user1279988

回答

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)输出进行比较来测试。

+0

@(int)int(x_new,y_new)部分,我仍然有点困惑。我看到匿名函数doc并且看到这个样式“sqr = @(x)x。^ 2;”,所以这里@(int)int(x_new,y_new),第一个“int”应该是一个参数,后者“ int“应该是某种类型的操作。很明显,这不是。事情怎么样? – user1279988

+0

这两个'int'引用是相同的。正在执行的操作是返回int(x_new,y_new)的输出,对于任何int类型(int可以是一个二维矩阵,具有两个值的函数,等等)。匿名功能像这样灵活。如果你写'f = @(x)x(5)',那么'f(@ones)'和'f(y)'都将工作。第一个调用函数'ones(5)',第二个返回变量'y'的第五个值。 – nkjt

+0

我有一个问题,TriScattedInterp的影响? TriScattedInterp如何在“(x,y)为h”规则时设置函数规则?这里。 – user1279988