2

我正在尝试mtaylor从 MatLab 中的 MuPAD 引擎运行该函数,它提供了函数的多元泰勒展开。但是,它一直告诉我我正在尝试围绕一个无效点进行扩展。这是我尝试过的最小工作示例:

syms x y;
feval(symengine,'mtaylor',exp(x^2 - y), [x, y], 4)

Error message:
 vError using mupadengine/feval (line 157)
 MuPAD error: Error: Invalid expansion point. [mtaylor]

为什么这不起作用?

4

1 回答 1

2

这适用于 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功能来区分它们:Vdomtype

feval(symengine,'domtype',V)
feval(symengine,'domtype',L)

它返回Dom::Matrix()DOM_LIST

于 2015-01-30T17:40:30.080 回答