在sagemath中定义函数的不同方法

问题描述 投票:1回答:1

我想知道为什么这两个“程序”产生不同的输出

    f(x)=x^2
    f(90).mod(7)

    def f(x):
        return(x^2)
    f(90).mod(7)

谢谢

python sage
1个回答
1
投票

好问题!让我们深入研究一下这些函数。

f(x)=x^2
def g(x):
    return(x^2)

print type(g(90))
print type(f(90))

这产生了

<type 'sage.rings.integer.Integer'>
<type 'sage.symbolic.expression.Expression'>

所以你看到的是用f(x)表示法定义的符号函数和使用def关键字的Python函数之间的区别。在Sage中,前者可以访问许多普通的Sage整数所不具备的东西(例如微积分)。

在这种情况下,我建议的仅仅是为了你所需要的

sage: a = f(90)
sage: ZZ(a).mod(7)
1

或者实际上可能更强大

sage: mod(a,7)
1

更长的解释。

对于象征性的东西,mod不是你的想法。事实上,我不确定它会做什么(参见mod的文档,看看如何将它用于理想的多项式模块化工作)。这是代码(可以通过x.mod??访问,可以通过x.mod?访问文档):

    from sage.rings.ideal import is_Ideal
    if not is_Ideal(I) or not I.ring() is self._parent:
        I = self._parent.ideal(I)
        #raise TypeError, "I = %s must be an ideal in %s"%(I, self.parent())
    return I.reduce(self)

事实证明,对于通用环(如符号“环”),最后一步没有任何反应:

return f 

这就是为什么我们需要以某种方式再次要求它为整数。见Trac 27401

© www.soinside.com 2019 - 2024. All rights reserved.