2016-03-07 104 views
1

在Maxima中处理多项式,我做了一个函数,从另一个具有相同根的多项式中获得,但所有这些都很简单。全局函数和参数函数之间的冲突Maxima

simplify(p):=block(
    local(q,d,c), 
    define(q(x),diff(p(x),x)), 
    define(d(x),gcd(p(x),q(x))), 
    define(c(x),divide(p(x),d(x))[1]), 

    return(c(x)) 
); 

当我用多项式s并没有p的功能之外定义,一切工作正常:

(%i1) s(x):=x^2-1; 
     simplify(s); 

(%o1) s(x):=x^2-1 
(%o2) x^2-1 

然而,定义一个多项式p一切都在变化后:

(%i3) p(x):=x^6-5*x^5-10*x^4+86*x^3-99*x^2-81*x+108; 

(%o3) p(x):=x^6-5x^5+(-10)*x^4+86*x^3+(-99)*x^2+(-81)*x+108 

(%i4) simplify(p); 
(%o4) x^4+x^3-13x^2-x+12 

(%i5) simplify(s); 
(%o5) x^4+x^3-13x^2-x+12 

我想这个问题是由于Maxima以全局函数取代p,一旦它出现定义,然后它不再考虑作为参数给出的函数s

有没有一种方法可以在函数内部指示我们想使用参数函数p而不是全局函数?我还没有找到任何区别这两种功能的方法。

回答

1

你是正确的,p的全局定义取代任何其他。 Maxima对范围有一些混淆的想法,这是其中之一;我认为这是一个严重的问题。

无论如何,为了解决这个问题,你可以声明p在其中是一个参数的函数中是局部的。我想你可以把p放在simplifylocal声明中。