2013-06-03 28 views
0

以下是我在Sage中编写的一些代码,用于计算某些李代数的维数,这些代数等于$ p^2 $对于某些$ p $。使用`组合`3组合或以上组合使用

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个或更多基本权重的组合进行扩展。

更具体地说,我将如何编码总数为3的fw元素?我知道v = combinations(fw, 3)然后会把v所有$ {n \ choose3} $ triple组合,但fw的元素是元组,如(1,1,1,0,0,0)。那么我将如何总结v中的每个三元组?我很抱歉,如果这个问题不适合这个网站。

回答

1

我不擅长数学,但如果问题是“我将如何总结每一个我得到的三元组?”?那么答案是:

sv = map(sum, v) 

其中sv将包含来自v

+0

十分感谢三倍的数额清单(迭代器实际上)!这工作完美 – Moderat