如何解析 Matlab 中的符号表达式

How to parse a symbolic expression in Matlab

在 Matlab 2016a 中,Mathworks 弃用了使用 sym 函数来解析符号表达式:

>> expr = sym('x + 1')
Warning: Support of strings that are not valid variable names or define a number will be
removed in a future release. To create symbolic expressions, first create symbolic
variables and then use operations on them. 
> In sym>convertExpression (line 1536)
  In sym>convertChar (line 1441)
  In sym>tomupad (line 1198)
  In sym (line 177) 

expr =

x + 1

当符号表达式是从文件中读取而不是在代码中手动构建时,警告的建议不实用。 Matlab 中是否有函数可以替代此功能?我宁愿不 regexprepeval 我的方式。

sym and syms 上的 Mathworks 网站上查看这一行:(我的强调以粗体显示)

To create symbolic expressions, first create symbolic variables, and then use operations on them. For example, use syms x; x + 1 instead of sym('x + 1') ...

之后还有其他几个示例,尽管这个示例非常准确地回答了您的问题。我不确定这是否与您正在阅读的文件兼容。希望如此!如果没有,请告诉我,很乐意尝试帮助进行任何可能的跟进。

此语法最初在 R2015b (archived documentation) 中被弃用,但很明显它会发生很多年。该警告已添加到 R2016a 中。谁知道这个功能什么时候会被完全删除。

您不想使用 eval,但这实际上是当前符号引擎在您向其传递字符串表达式时使用的内容。即使删除此语法后,仍然可能会有 ways to call the MuPAD engine 像这样:

f1 = evalin(symengine,'2*x+y^2+1')

一个"workaround"当然是禁用R2016a中的warning

S = warning('off','MATLAB:singularMatrix'); % Change second string to correct MsgID
... % Do stuff
warning(S); % Reset warning state

在 Matlab 2017b 中,添加了 str2sym 函数以替代丢失的将字符串解析为符号表达式的功能。它的工作原理基本上类似于 sym 用于:

>> expr = str2sym('x + 1')

expr =

x + 1