Sage 中具有未知数的置换向量
Permutation vectors with unknowns in 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 帮助找到这种方法。
错误可能是由于使用包含 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
这里有几个问题:
- 从循环分解创建元素的语法是
G("(1,2)(3,4)")
,中间没有 *。
- 循环必须是不相交的,即任何元素都不能出现两次。你有 1 出现两次。
- 在字符串中使用 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
现在它运行,输出,例如,[-1, 0, 0, 1, 0, 1]
with r=3.
我正在尝试使用 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 帮助找到这种方法。
错误可能是由于使用包含 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
这里有几个问题:
- 从循环分解创建元素的语法是
G("(1,2)(3,4)")
,中间没有 *。 - 循环必须是不相交的,即任何元素都不能出现两次。你有 1 出现两次。
- 在字符串中使用 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
现在它运行,输出,例如,[-1, 0, 0, 1, 0, 1]
with r=3.