【发布时间】:2017-09-14 21:59:22
【问题描述】:
eval 和 str2func 都能够计算由字符串 f.e. 表示的函数。 f='a^x+exp(b)+sin(c*x)+d':
-
使用
eval:y = eval(f)或(由rahnema1建议)
fHandle = eval(['@(x, a, b, c, d) ' f]); y = fHandle(x, a, b, c, d); -
使用
str2func:fHandle = str2func(['@(x, a, b, c, d) ' f]); y = fHandle(x, a, b, c, d);
这两种方法中哪一种性能最好?
备注
请注意,此基准测试的灵感来自 this question。
【问题讨论】:
-
好主意,但请在您的回答中提及
eval对于reasons 而言是不可取的比性能更基本 -
除了性能之外,
eval与str2func相比在哪些方面不受欢迎? -
@m7913d 在我对the question which inspired your benchmark 的回答中,我链接到documentation on why
evalis undesirable。也就是说,它很难调试,它可能会意外地覆盖工作区数据,它不会为将来的运行而编译(这是性能方面),并且通过连接创建的字符串作为eval的输入可能难以阅读。通常可以避免,所以应该是 -
@Wolfie 我认为这些论点在某种程度上也适用于
str2func,尤其是最后两项。 -
我询问了new question,因为我不确定哪些根本原因仅适用于
eval而不适用于str2func。
标签: matlab performance eval