这适用于 MuPAD 的原因mtaylor
syms x y;
feval(symengine,'mtaylor',exp(x^2 - y), x, 4) % [x] is fine too
而这并没有
syms x y;
feval(symengine,'mtaylor',exp(x^2 - y), [x, y], 4)
是该[x, y]
参数被视为单个符号向量参数/变量,而不是扩展的变量列表。您的表达式 ,exp(x^2 - y)
不是向量变量,而是简单的标量,x
并且y
。
解决方法是将列表作为字符串传递:
syms x y;
feval(symengine,'mtaylor',exp(x^2 - y), '[x, y]', 4)
或者
syms x y;
feval(symengine,'mtaylor',exp(x^2 - y), ['[' char(x) ',' char(y) ']'], 4)
或使用evalin
@Daniel 在评论中建议的将 MuPAD 命令写入单个字符串:
syms x y;
evalin(symengine,'mtaylor(exp(x^2 - y), [x, y], 4)')
MuPAD 中的数组和矩阵与列表
为了进一步说明,Matlab 中的符号变量数组对应于 MuPADarray
类型,可以通过feval(symengine,'array','1..1','1..2','[x,y]')
. 更具体地说,它们是 type Dom::Matrix()
,可以通过V=feval(symengine,'Dom::Matrix()','[x,y]')
或 just创建syms x y;
V=[x,y]
。
该mtaylor
函数需要一个列表输入,可以通过L=evalin(symengine,'[x,y]')
. 因此
syms x y;
feval(symengine,'mtaylor',exp(x^2 - y), V, 4)
会产生与您的问题相同的错误,但是
syms x y;
feval(symengine,'mtaylor',exp(x^2 - y), L, 4)
将正常工作。不幸的是,在 Matlab 中看起来相同,但您可以使用 MuPAD 的L
功能来区分它们:V
domtype
feval(symengine,'domtype',V)
feval(symengine,'domtype',L)
它返回Dom::Matrix()
和DOM_LIST
。