代码之家  ›  专栏  ›  技术社区  ›  user191919

mtaylor MuPAD-Matlab

  •  2
  • user191919  · 技术社区  · 11 年前

    我正在尝试运行该功能 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]
    

    为什么这不起作用?

    1 回复  |  直到 11 年前
        1
  •  2
  •   horchler    11 年前

    这与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被视为单个符号向量argument/variable,而不是展开的变量列表。你的表情, 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中的符号变量数组对应于MuPAD array 类型,可以通过 feval(symengine,'array','1..1','1..2','[x,y]') 。更具体地说,它们是 Dom::Matrix() ,可以通过 V=feval(symengine,'Dom::Matrix()','[x,y]') 或者只是 syms x y; V=[x,y] .

    这个 多元泰勒展开 函数需要一个列表输入,可以通过 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)
    

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

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

    返回 Dom::矩阵() DOM_LIST .