在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
而不是全局函数?我没有找到区分两种功能的替代方案。
答案 0 :(得分:1)
你是正确的p
的全球定义取代任何其他定义。千里马对范围有一些疑惑,这是其中之一;我认为这是一个严重的问题。
无论如何要解决它,你可以将p
声明为函数中的本地参数。我想您可以将p
放在local
的{{1}}声明中。