Matlab 带feval的匿名函数的使用
我不理解以下代码中的匿名函数:Matlab 带feval的匿名函数的使用,matlab,anonymous-function,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], ...
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
参数还具有匿名功能
有人能给出一些提示吗?所以您可能已经知道这是在创建一个带有句柄的匿名函数
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)
的输出来测试这一点。你读过了吗?我不太清楚feval使用@function作为参数@(int)int(x_new,y_new)部分,我仍然有点困惑。我看到了匿名函数doc,看到了这种样式“sqr=@(x)x.^2;”,所以这里的@(int)int(x_new,y_new),第一个“int”应该是一个参数,后一个“int”应该是某种类型的操作。但很明显,它不是。情况如何?两个int
引用是相同的。正在执行的操作返回int(x_new,y_new)
,对于任何int
(int
可以是一个2D矩阵,一个包含两个值的函数,等等)。匿名函数是这样灵活的。如果你写f=@(x)x(5)
,那么f(@ones)
和f(y)
都可以工作。首先调用函数ones(5)
,第二个返回变量y
的第五个值。我有一个问题,TriscatedInterp的效果如何?TriscatedInterp如何在“(x,y)到h”规则上设置函数规则?这里。