我试图与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帮助来找到此方法的内容。
答案 0 :(得分:2)
这里有几个问题:
G("(1,2)(3,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