在Sage中具有未知数的置换向量

时间:2015-07-23 16:17:58

标签: python sage

我试图与Sage合作,但我无法理解如何做到以下几点。

我写了一些小代码:

def ElementDr1(r):
    G = SymmetricGroup(r)
    E = G.list()
    O = G.order()
    coeff = ZeroCoeff(O)

    for i in range(0,O):
        if E[i] == G("(1,r)"): 
            coeff [i]=1
        if E[i] == G("(2,3)*(1,r)"):
            coeff [i]=1
        if E[i] == G("(1,3)*(1,r)"):
            coeff [i]=-1
    return coeff

和Sage说排列向量(1,r)无效。我确定必须有一种方法来编写具有未知数的置换向量,但我无法通过查看Sage帮助来找到此方法的内容。

2 个答案:

答案 0 :(得分:2)

这里有几个问题:

  1. 从循环分解中创建元素的语法是G("(1,2)(3,4)"),其间没有*。
  2. 循环必须是不相交的,即没有元素可以出现两次。你有1次出现两次。
  3. 在字符串中使用r而不是替换:SamuelLelièvre已经对此进行了评论。
  4. 由于(1,3)(1,r)不是有效的循环分解,你想要做的是将(1,3)乘以(1,r)。为此,首先创建这些元素,然后然后将它们相乘(使用*运算符)。由于元素是循环,因此您甚至不需要字符串:可以从元组创建元素。

    def ElementDr1(r):
        G = SymmetricGroup(r)
        E = G.list()
        O = G.order()
        coeff = [0 for i in range(0,O)]  # self-contained examples are good
    
        for i in range(0,O):
            if E[i] == G((1,r)):
                coeff[i] = 1
            if E[i] == G((2,3))*G((1,r)):
                coeff[i] = 1
            if E[i] == G((1,3))*G((1,r)):
                coeff[i] = -1
        return coeff
    

    现在它运行,输出例如[-1, 0, 0, 1, 0, 1],其中r = 3。

答案 1 :(得分:1)

错误可能是由于使用包含G("...")的字符串调用r。将r替换为这些字符串中的值,例如:

def ElementDr1(r):
    G = SymmetricGroup(r)
    E = G.list()
    O = G.order()
    coeff = ZeroCoeff(O)

    for i in range(0,O):
        if E[i] == G("(1,%s)"%r): 
            coeff[i] = 1
        if E[i] == G("(2,3)*(1,%s)"%r):
            coeff[i] = 1
        if E[i] == G("(1,3)*(1,%s)"%r):
            coeff[i] = -1
    return coeff