凹陷中的未知置换向量

2024-06-07 07:23:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试着和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的帮助,我找不到这个方法是什么。你知道吗


Tags: 方法代码inforifdeforderrange
2条回答

此错误可能是由于使用包含r的字符串调用G("...")。将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

这里有几个问题:

  1. 从循环分解中创建元素的语法是G("(1,2)(3,4)"),中间没有*。你知道吗
  2. 循环必须是不相交的,即没有元素可以出现两次。你有一个出现两次。你知道吗
  3. 在字符串中使用r而不是替换:Samuel Leliè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

现在它运行,输出r=3的[-1, 0, 0, 1, 0, 1]。你知道吗

相关问题 更多 >