【问题标题】:Why is the Matlab function "feval" needed?为什么需要 Matlab 函数“feval”?
【发布时间】:2020-04-18 19:59:51
【问题描述】:

函数句柄可用于调用函数,例如

f = @sin;
val = f(1.0);

那么为什么需要feval

val = feval(f, 1.0);

什么时候有用?

【问题讨论】:

  • 我发现它使代码更易于阅读,因为括号用于索引和函数调用。使用feval 可以清楚地说明我们在做什么。

标签: matlab function


【解决方案1】:

对于feval,第一个参数可以是带引号的字符串,比函数句柄更灵活。你可以做一些事情,比如在fn1fn2fn3中使用一个基本名称后跟一个索引的函数,然后使用feval(['fn', num2str(k)], x, y, z);动态调用这些函数。

【讨论】:

  • 谢谢,我想知道Python等其他语言是否支持动态生成的函数名?
  • 是的,其他语言有更复杂的机制。你可以阅读内省。还要在 Objective-C 中寻找“消息”。
  • 我要补充一点,从历史上看,TMW 推动了从 eval 方法到“受控”替代方法的转变,例如 @function 句柄。换句话说,上面的构造很容易用@function句柄实现,但仍可能在遗留代码或习惯中使用。
  • 我想补充一点,尽管这可能的,但使用编号函数并不是最好的样式。如果你有这些,你也许应该重新考虑使用一个函数fn,它将索引作为额外的输入。 “为什么需要feval”的答案应该是:“它需要的,但现在应该使用括号来评估函数句柄。”
【解决方案2】:

直到第 14 版 (MATLAB 7),feval 是评估函数句柄的方式...在函数由其指定时评估函数名字。

来源:Mental model for feval()

【讨论】:

  • 感谢奥列格,这很有意义。 cmets中还提到了另一篇博客文章:More on eval
  • 附带说明,在使用 MATLAB 的 5 年中,我可能只使用过一次 feval。
  • 这基本上意味着:不再需要feval了。
【解决方案3】:

不一定总是知道应该使用什么功能;例子很多

这是一个愚蠢的例子:让,在每个数字后面的文本文件中,可以评估为数学函数的不同单词,例如,均值,最小值,最大值,平方表示,并且任务是计算之后的结果每个喜欢,

2,square,2,power,4,log,10 ...

你想写一个程序来遍历这个文本并计算最终结果......

另一个例子是,例如,我想用用户输入函数句柄 f 定义一个绘图函数,所以它必须以某种灵活的方式......

pfun=@(f,x) plot(f(x))

【讨论】:

  • 在这两种情况下,您仍然可以使用函数句柄。
猜你喜欢
  • 1970-01-01
  • 2013-05-24
  • 2020-03-10
  • 2020-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
相关资源
最近更新 更多