2016-10-22 45 views
3

我正在嘗試將我的腳本從mathematica遷移到sage。我陷入了一些看起來很簡單的事情。在sage中定義一個變量族

我需要任意大的多項式工作說形式的

A00 + A10 * X + A01 * Y + A20 *χ^ 2 + A11 * X * Y + ...

我僅考慮x和y上的多項式,並且我需要給出這樣一個多項式P來得到其單項式的列表。

例如,如果P = a20 * x^2 + a12 * x * y^2我想要一個形式爲[a20 * x^2,a12 * x * y^2]的列表。

我發現一個在鼠尾草中的多項式有一個稱爲係數的類函數,它返回係數和一個稱爲單項函數的類函數,它返回沒有係數的單項式。將這兩個列表相乘,得出我想要的結果。

問題是,爲了這個工作,我需要顯式聲明所有的a作爲變量是不總是可能的東西。

有沒有什麼辦法可以告訴賢者,任何形式的[數字] [數字]是一個變量?或者有什麼方法可以在聖人中定義整個變量族?

在一個完美的世界中,我想讓聖人的行爲像數學一樣,任何不是定義的東西都被認爲是一個變量,但我認爲這太樂觀了。

回答

2

你幾乎肯定會需要一些非常小的字符串處理;答案

比任何我能說的更好。當然,這是可以實現的,但...

在一個完美的世界,我想作聖人行爲像數學,在這個意義上,任何事情不是定義被認爲是一個變量,但我想這太樂觀了。

確實;事實上,這違背了Python的(因此是Sage的)「明顯優於隱含」的哲學;關於是否應該將x預定義爲符號變量(它是!),很長一段時間都有爭論。

(而且說實話,我給予多久做錯別字,我真的寧願不任意一點被認爲是象徵性的變量)。

+0

我很驚訝,有做這種沒有原生的方式。無論如何,sage-support論壇中的代碼片段都有訣竅。謝謝。 – tst

+0

不客氣。我認爲沒有實行本土方式的原因是因爲它會如何發生分歧 - 例如,下標或者只是連接,更不用說數組... – kcrisman

1

我的答案是沒有完全解決你的問題,但一招我發現定義變量是使用PolynomialRing()。例如:

sage: R = PolynomialRing(RR, 'c', 20) 
sage: c = R.gens() 
sage: pol=sum(c[i]*x^i for i in range(10));pol 
c9*x^9 + c8*x^8 + c7*x^7 + c6*x^6 + c5*x^5 + c4*x^4 + c3*x^3 + c2*x^2 + c1*x + c0 

和以後你可以將它們定義爲變量來解決(),例如:

sage: variables=[SR(c[i]) for i in srange(0,len(eq_list))]; 
sage: solution = solve(eqs,variables);