gpt4 book ai didi

java - 如何对多项式执行复杂的变量更改(在 Mathematica 中)

转载 作者:搜寻专家 更新时间:2023-10-30 19:58:36 24 4
gpt4 key购买 nike

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

  • a = wz
  • 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)轻松地进行这种变量更改?

最佳答案

这种重写可以通过形成替换多项式的 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

形成上述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 和 Loustaunau (AMS) 对 Gröbner Bases 的介绍也很不错。

---结束编辑---

丹尼尔·利希布劳

关于java - 如何对多项式执行复杂的变量更改(在 Mathematica 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6074801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com