【问题标题】:Plot an anonymous function without explicit variable names绘制一个没有显式变量名的匿名函数
【发布时间】:2016-12-02 13:49:57
【问题描述】:

我创建了一个这样的匿名函数句柄:

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

这是一个包含两个变量 xy 的球体。它似乎有效,因为我可以调用类似的东西

f(2,3)

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

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

fmesh(f,[-7 7])

然后右图弹出。到目前为止,一切顺利。

出于某些我不想在此处指定的原因,我现在想将函数句柄编辑为:

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

这应该是同一个球体,但这次有两个变量 x(1)x(2)。 由于该函数现在需要一个数组作为参数,因此我编辑了测试调用

f([2,3])

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

但问题是:如何绘制需要数组作为参数的函数? 与之前相同的网格命令当然会失败,因为[-7,7] 的尺寸错误。 [[-7 7] [-7 7]][[-7 7];[-7 7]] 也是如此。

我怎样才能从那个新的函数句柄中得到一个工作图? 提前致谢!

【问题讨论】:

  • 你真的不能那样做。您可以将f 包装在另一个匿名函数中,该函数接受两个输入并创建一个:g = @(x,y)f([x,y])

标签: matlab plot anonymous-function


【解决方案1】:

您不能让fmesh 像您期望的那样将xy 值作为数组传递。您可以做的是将您的匿名函数f 包装在另一个匿名函数中,该函数只是重新排列输入。

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

将所有输入放入数组中的更通用的解决方案是

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

【讨论】:

    猜你喜欢
    • 2022-11-10
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 2018-03-07
    • 2015-02-26
    • 2011-10-27
    相关资源
    最近更新 更多