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

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

我正在尝试与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帮助找到这种方法。

python sage
2个回答
2
投票

这里有几个问题:

  1. 从循环分解中创建元素的语法是G("(1,2)(3,4)"),中间没有*。
  2. 循环必须是不相交的,即没有元素可以出现两次。你有1次出现两次。
  3. 在字符串中使用r而不是替换:SamuelLelièvre已经对此进行了评论。

由于(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
投票

该错误可能是由于使用包含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
© www.soinside.com 2019 - 2024. All rights reserved.