2011-05-20 35 views
14

我有一個整數多項式在四個變量(w,x,y和z),我知道可以寫成這些六個變量中的整數多項式:如何執行一個多項式變量的複雜變化(在Mathematica中)

  • 一個= WZ
  • b = XY
  • C =瓦特^ 3 + Z^3
  • d = X + Y
  • E =瓦特^ 3×+ YZ^3
  • f = w^3 y + xz^3

如何使用Mathematica(或者Java)輕鬆完成變量的這種變化?

+0

泰森·威廉姆斯,歡迎StackOverflow上。 – 2011-05-20 21:30:50

+0

@ Mr.Wizard謝謝。我特別感到受到歡迎,因爲我的問題得到了很好的回答。 – 2011-05-22 14:59:19

回答

15

這樣的重寫可以通過形成替代多項式的Groebner基來完成,就可變順序而言,有利於在w-z上使用a-f。然後根據相同的順序使用PolynomialReduce來重寫您的多項式。

這裏是一個例子。我將從替換規則開始,這樣我就可以構造一個多項式,以便我們知道預期的結果。

reprules = {a -> w*z, b -> x*y, c -> (w^3 + z^3), 
d -> (x + y), e -> (w^3*x + y*z^3), f -> (w^3*y + x*z^3)}; 

現在重寫爲多項式關係。

reppolys = Apply[Subtract, reprules, 1]; 

這裏我們創建一個例子。

poly = 
a^2*b + 3*b^2*c^3 - 2*d*e*f + 11*b*f^2 - 5 a*d^2*e /. reprules // Expand 

Out[11]= -2*w^6*x^2*y - 2*w^6*x*y^2 + 3*w^9*x^2*y^2 + 11*w^6*x*y^3 - 
    5*w^4*x^3*z - 10*w^4*x^2*y*z - 5*w^4*x*y^2*z + w^2*x*y*z^2 - 2*w^3*x^3*z^3 - 
    2*w^3*x^2*y*z^3 - 2*w^3*x*y^2*z^3 + 22*w^3*x^2*y^2*z^3 + 9*w^6*x^2*y^2*z^3 - 
    2*w^3*y^3*z^3 - 5*w*x^2*y*z^4 - 10*w*x*y^2*z^4 - 5*w*y^3*z^4 - 
    2*x^2*y*z^6 + 11*x^3*y*z^6 - 2*x*y^2*z^6 + 9*w^3*x^2*y^2*z^6 + 3*x^2*y^2*z^9 

形成上述的Groebner基礎。

gb = GroebnerBasis[reppolys, {w, x, y, z, a, b, c, d, e, f}]; 

用它來減少我們的輸入以恢復預期結果。

PolynomialReduce[poly, 
    gb, {w, x, y, z, a, b, c, d, e, f}][[2]] 

Out[12]= a^2*b + 3*b^2*c^3 - 5*a*d^2*e - 2*d*e*f + 11*b*f^2 

---編輯---

註釋詢問的GROEBNER基的描述。對於我自己承擔的Mathematica功能,有一篇老年人TMJ文章。可以在

http://library.wolfram.com/infocenter/Articles/2179/

在與該主題相關的書籍更好地發現存在的UTM系列文本

理想,品種,並通過算法考克斯,Lottle,和奧謝。

Adams和Loustaunau(AMS)對GröbnerBases的介紹也很好。

---結束---編輯

丹尼爾Lichtblau

+2

@Daniel,我曾多次嘗試瞭解Groebner的基礎,但迄今爲止我失敗了。你有任何好的/可理解的描述的鏈接?謝謝。 – rcollyer 2011-05-20 18:52:48

+0

@rcollyer查看編輯 – 2011-05-20 19:19:41

+0

謝謝,我已將它添加到我的閱讀列表中。 – rcollyer 2011-05-20 20:01:00

相關問題