2016-12-02 54 views
5

匿名函数我创建了一个匿名函数处理这样:情节没有明确的变量名

f = @(x,y)sqr(x)+sqr(y) 

这是两个变量xy一个球体。这似乎工作,因为我可以调用类似

f(2,3) 

和MATLAB给了我正确的结果ans = 13

在最后一步中,我想将这个函数从-7到7绘制为xy。所以我打电话

fmesh(f,[-7 7]) 

并弹出正确的数字。到现在为止还挺好。

由于种种原因,我不想在这里指定,我现在要编辑的功能句柄这样的:

f = @(x)sqr(x(1))+sqr(x(2)) 

这应该是相同的领域,但这次用2个变量x(1)x(2)。 由于函数现在想要一个数组作为参数我编辑的测试呼叫

f([2,3]) 

,它仍然给了我正确的结果ans = 13

但是,这里是问题:你如何绘制想要数组作为参数的函数? 与之前相同的网格命令当然会失败,因为[-7,7]的维数不正确。 [[-7 7] [-7 7]][[-7 7];[-7 7]]也是如此。

如何从该新功能手柄中获得工作情节? 在此先感谢!

+1

你不能真正做到这一点。你可以在接受两个输入的另一个匿名函数中包装'f'并创建一个:'g = @(x,y)f([x,y])' – Suever

回答

4

您无法获得fmeshxy的值作为您所期望的数组传递。 可以做的是将您的匿名函数f包装在另一个匿名函数中,该函数只需重新排列输入。

g = @(x,y)f([x, y]); 
fmesh(g, [-7 7]) 

一个更广义的解决方案,它需要所有的输入,并将它们放入一个数组将

g = @(varargin)f([varargin{:}])