在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中是否有一个函数来替换这个功能?我宁愿不通过它来regexprep
和eval
。
答案 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') ...
之后还有其他几个例子,尽管这个例子与你的问题完全一致。我不确定这是否与您正在阅读的文件兼容。希望如此!如果没有,请告诉我,很高兴尝试帮助任何潜在的后续行动。