问题 如何在Matlab中将字符串转换为函数句柄?


我必须转换一个字符串 str='x^2+3' 成功能。一个解决方案是获得内联函数, f=inline(str),但在将来的版本中将不再支持它。

解决方法是 f=eval(['@(x)',f]) 但它似乎不是一个很好的选择。

功能 str2func 不起作用,因为它只需要现有函数的名称。


1031
2018-03-02 10:57


起源



答案:


以下工作没有?

str = 'x^2+3';
f = str2func(['@(x)' str]);

13
2018-03-02 11:05



正如OP声称的那样 str2func 不行,你可以提一下 ['@(x)' str] 你实际上创建了一个函数 现有 事后并说服 str2func 尽职尽责。只是一个建议,我稍后会删除评论。 - thewaywewalk
感谢您的反馈,至少在解释它的时候,我会留下您的评论。 - am304
你也可以这么说 ['@(x)' str] 是动态创建的匿名函数的“名称” - Luis Mendo
此方法在R2007a中给出错误: Warning: The input to STR2FUNC "@(x)x^2+3" is not a valid function name. This will generate an error in a future release.,我将不得不继续使用 inline。所以没有向前兼容性也没有向后兼容性。 - jinawee
此方法在R2015b中未给出任何警告。此外,最新文档 str2func 在...上 Matlab网站 指定它从“函数名称或定义匿名函数的字符串”构造函数句柄。该 @(x) 语法在Matlab中定义了一个匿名函数。因此,似乎Matlab计划在未来继续支持这种方法。同样不能说 inline。 - d11


答案:


以下工作没有?

str = 'x^2+3';
f = str2func(['@(x)' str]);

13
2018-03-02 11:05



正如OP声称的那样 str2func 不行,你可以提一下 ['@(x)' str] 你实际上创建了一个函数 现有 事后并说服 str2func 尽职尽责。只是一个建议,我稍后会删除评论。 - thewaywewalk
感谢您的反馈,至少在解释它的时候,我会留下您的评论。 - am304
你也可以这么说 ['@(x)' str] 是动态创建的匿名函数的“名称” - Luis Mendo
此方法在R2007a中给出错误: Warning: The input to STR2FUNC "@(x)x^2+3" is not a valid function name. This will generate an error in a future release.,我将不得不继续使用 inline。所以没有向前兼容性也没有向后兼容性。 - jinawee
此方法在R2015b中未给出任何警告。此外,最新文档 str2func 在...上 Matlab网站 指定它从“函数名称或定义匿名函数的字符串”构造函数句柄。该 @(x) 语法在Matlab中定义了一个匿名函数。因此,似乎Matlab计划在未来继续支持这种方法。同样不能说 inline。 - d11