2016-03-07 89 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聲明中。