如何对多项式执行复杂的变量变化(在 Mathematica 中)
2022-09-04 20:59:28
我在四个变量(w,x,y和z)中有一个整数多项式,我知道可以在这六个变量中写为整数多项式:
- 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
我如何使用 Mathematica(或者 Java)轻松地进行这种变量更改?
我在四个变量(w,x,y和z)中有一个整数多项式,我知道可以在这六个变量中写为整数多项式:
我如何使用 Mathematica(或者 Java)轻松地进行这种变量更改?
这种重写可以通过形成替换多项式的Groebner基来完成,相对于有利于使用a-f而不是w-z的变量顺序。然后使用相同的顺序来重写多项式。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
---编辑---
评论询问了对Groebner基地的描述。对于我自己对Mathematica功能的看法,有一篇老年TMJ文章。可以在以下位置找到
http://library.wolfram.com/infocenter/Articles/2179/
在与这个主题相关的更好的书籍中,有UTM系列文本
Ideals, Variety, and Algorithms by Cox, Lottle, and O'Shea.
Adams和Loustaunau(AMS)对Gröbner Bases的介绍也相当不错。
---结束编辑---
丹尼尔·利希特布劳