下面是我在Sage中编写的一段代码,用于计算某些李代数的维数,对于某些$p$,它们等于$p^2$
def A_comb2rep(p):
bound = p*p
name_fund = []
name_comb = []
A = lambda i: WeylCharacterRing("A{0}".format(i))
for i in range(bound):
for k in range(1,bound+1):
fw = A(i+1).fundamental_weights()
if A(i+1)(k * fw[1]).degree() > bound:
break
else:
for v in fw:
if A(i+1)(k * v).degree() == bound:
name_fund.append([])
name_fund[len(name_fund)-1].append('A'+str(i+1)+'('+str(k)+'*'+str(v)+')')
for i in range(1,bound): # now onto combinations of two of the fws #####
fw = A(i+1).fundamental_weights()
for k in fw:
if A(i+1)(fw[1] + fw[2]).degree() > bound:
break
else:
for j in fw:
rep = A(i+1)(j+k)
deg = rep.degree()
if deg == bound:
name_comb.append([])
name_comb[len(name_comb)-1].append('A'+str(i+1)+'['+str(j)+'+'+str(k)+']')
return name_comb, name_fund
代码的后半部分是我考虑两个基本权重的组合。我现在想知道如何使用iterables模块中的combination
函数来扩展3个或更多基本权重的组合
更具体地说,我将如何编码fw
的3个元素的总和?我知道v = combinations(fw, 3)
会放入v
所有${n\choose 3}$三重组合,但是fw
的元素是元组,就像(1,1,1,0,0,0)
。那么我该如何对v
中得到的每个三元组求和呢?如果这个问题不适合这个网站,我深表歉意
我不擅长数学,但如果问题是“我怎样才能把v中得到的每一个三元组相加?”那么答案是:
其中
sv
将包含来自v
的三元组和的列表(实际上是一个迭代器)相关问题 更多 >
编程相关推荐