4つの変数(w、x、y、z)に整数多項式があり、これらの6つの変数に整数多項式として記述できることがわかっています。
- a = wz
- b = xy
- c = w ^ 3 + z ^ 3
- d = x + y
- e = w ^ 3 x + yz ^ 3
- f = w ^ 3 y + xz ^ 3
Mathematica(またはJava)を使ってこの変数変換を簡単に行うにはどうすればよいですか?
4つの変数(w、x、y、z)に整数多項式があり、これらの6つの変数に整数多項式として記述できることがわかっています。
Mathematica(またはJava)を使ってこの変数変換を簡単に行うにはどうすればよいですか?
このような書き換えは、wzよりもafの使用を優先する可変次数に関して、置換多項式のグレブナー基底を形成することによって実行できます。次に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
上記のグレブナー基底を形成します。
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
- -編集 - -
グレブナー基底の説明についてのコメントがあります。Mathematicaの機能についての私自身の見解として、古いTMJの記事があります。で見つけることができます
http://library.wolfram.com/infocenter/Articles/2179/
このトピックに関連する優れた本の中には、UTMシリーズのテキストがあります
Cox、Lottle、およびO'Sheaによる理想、品種、およびアルゴリズム。
Adams and Loustaunau(AMS)によるグレブナー基底の紹介も非常に優れています。
---編集を終了---
ダニエル・リヒトブラウ