我想生成一个带有许多生成器的FreeAlgebra,在列表X中给出。
X=[var('X_%d%d' %(i,j)) for i in range(1,10) for j in range(i+1,10)]
F = FreeAlgebra(QQ, X)
F.inject_variables()
如何使用迭代器索引变量,例如。比如在F
写一个关系词典X_ij * X_jk : X_jk * X_ij + X_ik, for i in range(1,10) for j in range(i+1,10) for k in range(j+1,10) ?
然后我需要
A = F.g_algebra(D)
如果我单独编写每个关系,X_12 * X_23:X_23 * X_12 + X_13,它可以工作,但我希望它适用于任意数量的变量。
我试过
X[i]*X[j] : X[j]*X[i] + X[some formula],
但似乎列表X不知道它的元素来自代数F(也不是A)。
这可能是一个非常基本的问题 - 我是Sage的新手。 谢谢你的帮助。
答案 0 :(得分:1)
列表X
仍然是符号变量列表(具有注入的副作用,然后通过注入自由代数变量来覆盖它)。这是副作用较少的副作用,但仍然是相同的。
X = ['X_%d%d' %(i,j) for i in range(1,10) for j in range(i+1,10)]
F = FreeAlgebra(QQ, X)
F.inject_variables()
但是如果你然后强迫他们每个人F
你就没事了 - see this example:
X = ['X_%d%d' %(i,j) for i in range(1,10) for j in range(i+1,10)]
F = FreeAlgebra(QQ, X)
F.inject_variables()
print type(X_12)
[F(x)*X_12 for x in X]
它会给你你想要的东西。请注意X_12
确实是F
的元素,但x in X
不是。