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

时间:2016-04-06 12:29:55

标签: matlab symbolic-math

在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

3 个答案:

答案 0 :(得分:3)

在Matlab 2017b中,添加了str2sym函数来替换将字符串解析为符号表达式的丢失功能。它基本上像sym用于:

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

expr =

x + 1

答案 1 :(得分:1)

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

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

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

一个"解决方法"当然要禁用R2016a中的warning

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

答案 2 :(得分:-2)

sym and syms上的Mathworks网站查看此行:(我的重点是粗体)

  

要创建符号表达式,首先要创建符号变量,然后对它们使用操作。 例如,使用syms x; x + 1而不是sym(' x + 1') ...

之后还有其他几个例子,尽管这个例子与你的问题完全一致。我不确定这是否与您正在阅读的文件兼容。希望如此!如果没有,请告诉我,很高兴尝试帮助任何潜在的后续行动。