matelor mupad - 意思

mtaylor MuPAD - Matlab

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

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]

为什么这不起作用?

这适用于 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] 参数被视为单个符号向量 argument/variable 而不是扩展的变量列表。您的表达式 exp(x^2 - y) 不是向量变量,而是简单的标量 xy.

解决方法是将列表作为字符串传递:

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 将 MuPAD 命令写入单个字符串,如@Daniel 在评论中所建议:

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


数组和矩阵与 MuPAD 中的列表
为了进一步说明,Matlab 中的符号变量数组对应于 MuPAD array type, which can be created via feval(symengine,'array','1..1','1..2','[x,y]'). More specifically, they are of type Dom::Matrix(),可以通过 V=feval(symengine,'Dom::Matrix()','[x,y]') 或仅 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)

将正常工作。不幸的是,LV 在 Matlab 中看起来完全相同,但您可以使用 MuPAD 的 domtype 函数来区分它们:

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

其中 returns Dom::Matrix()DOM_LIST.