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

11

我需要将像str='x^2+3'这样的字符串转换为函数。一种解决方法是获取内联函数,f=inline(str),但在未来版本中将不再支持。

一个解决办法是f=eval(['@(x)',f]),但这似乎不是一个简洁的选项。

str2func函数不能工作,因为它需要现有函数的名称。

1个回答

13

以下代码不起作用吗?

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

1
正如 OP 所声称的那样,str2func 不起作用,你可以提到使用 ['@(x)' str] 实际上创建了一个函数,该函数在之后是存在的,并且能够让 str2func 履行其职责。这只是一个建议,我稍后会删除评论。 - Robert Seifert
感谢您的反馈,我会将您的评论保留下来,至少它能够很好地解释问题。 - am304
1
你也可以说['@(x)' str]是即时创建的匿名函数的“名称”。 - Luis Mendo
这个方法在R2007a中会出错:警告: STR2FUNC的输入“@(x)x^2+3”不是有效的函数名。 这将在未来的版本中生成错误。 我必须继续使用 inline。因此,既没有向前兼容性也没有向后兼容性。 - jinawee
抱歉,这是我最好(也是唯一)的尝试。eval可能仍然有效,但我非常不喜欢它... - am304
1
该方法在R2015b中不会给出任何警告。此外,Matlab网站上最新的str2func文档指定它从“函数名或定义匿名函数的字符串”构造函数句柄。在Matlab中,@(x)语法定义了一个匿名函数。因此,Matlab似乎计划在未来继续支持这种方法。对于inline则不能这样说。 - d11

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接