首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >全局函数和参数函数之间的冲突Maxima

全局函数和参数函数之间的冲突Maxima
EN

Stack Overflow用户
提问于 2016-03-08 00:51:06
回答 1查看 56关注 0票数 1

使用Maxima中的多项式,我制作了一个函数,从一个多项式中获得另一个具有相同根的多项式,但它们都很简单。

代码语言:javascript
运行
复制
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时,一切都很好:

代码语言:javascript
运行
复制
(%i1)   s(x):=x^2-1;
        simplify(s);

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

然而,在定义多项式p之后,一切都改变了:

代码语言:javascript
运行
复制
(%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而不是全局函数?我还没有找到任何替代方法来区分这两个函数。

EN

回答 1

Stack Overflow用户

发布于 2016-03-10 08:02:59

p的全局定义取代了任何其他定义,这一点您是正确的。Maxima对作用域有一些困惑的想法,这是其中之一;我认为这是一个严重的问题。

无论如何,要解决这个问题,可以在函数中将p声明为local,其中是一个参数。我认为您可以将p放在simplify中的local声明中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35849397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档