2017-03-03 114 views
0

我要生成許多發電機一FreeAlgebra,索引變量迭代器

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(也沒有)。

這可能是一個非常基本的問題 - 我是賢者中新鮮的新手。 感謝您的幫助。

+1

這是正確的,'X'仍然會認爲它的元素是符號元素。你可能會得到'[F(x)for x in X]'的結果 - 我不知道強制如何工作,也不知道FreeAlgebra語法如何用冒號工作,但無論如何它值得一試。 – kcrisman

+0

與X [i]'相同。例如,'[x * X_12 for x in X]'給了我:'TypeError:'*'不支持的操作數父項:'符號環'和 'Noncommutative Multivariate Polynomial Ring in ...' –

+0

我認爲你必須將所有的東西強制轉換爲'F'。我現在有時間給出一個完整的答案。 – kcrisman

回答

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] 

它會給你想要的東西。請注意0​​確實是F的元素,但x in X不是。

+0

是的,這適用於F.謝謝!我也需要它在A = F.g_algebra(D)中,但是在[參考](http://doc.sagemath.org/html/en/reference/algebras/sage/algebras/free_algebra.html)中說過對於g_algebra「強制不起作用」。你有沒有其他方法可以在g_algebra中使用這個工作而不受強制? –

+0

對不起,我不是那麼熟悉。 – kcrisman