13

我有一个包含四个变量(w、x、y 和 z)的整数多项式,我知道它可以写成这六个变量中的整数多项式:

  • 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

1 回答 1

15

这种重写可以通过形成替换多项式的 Groebner 基来完成,相对于有利于使用 af 而不是 wz 的变量顺序。然后使用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 系列文本

Cox、Lottle 和 O'Shea 的《理想、品种和算法》。

Adams and Loustaunau (AMS) 的 Gröbner Bases 简介也相当不错。

---结束编辑---

丹尼尔·利赫特布劳

于 2011-05-20T16:35:31.297 回答