在v7中使用GroebnerBasis的奇怪行为

时间:2011-06-01 05:03:10

标签: wolfram-mathematica mathematica-7

使用GroebnerBasis时,我遇到了一些奇怪的行为。在下面的m1中,我使用希腊字母作为我的变量,在m2中,我使用了拉丁字母。它们都没有与之相关的规则。为什么根据我选择的变量得到截然不同的答案?

图像:

enter image description here

可复制代码:

Clear["Global`*"]
g = Module[{x}, 
    x /. Solve[
      z - x (1 - b - 
           b x ( (a (3 - 2 a (1 + x)))/(1 - 3 a x + 2 a^2 x^2))) == 0,
       x]][[3]];
m1 = First@GroebnerBasis[\[Kappa] - g, z]
m2 = First@GroebnerBasis[k - g, z]

编辑:

正如belisarius所指出的,我对GroebnerBasis的使用并不完全正确,因为它需要多项式输入,而我的不是。这个错误是由复制意大利面引入的,直到现在还没有引起注意,因为当我使用上面的m1跟进我的其余代码时,我得到了我所期望的答案。 但是,我并不完全相信这是一种不合理的用法。请考虑以下示例:

x = (-b+Sqrt[b^2-4 a c])/2a;
p = First@GroebnerBasis[k - x,{a,b,c}]; (*get relation or cover for Riemann surface*)
q = First@GroebnerBasis[{D[p,k] == 0, p == 0},{a,b,c},k,
    MonomialOrder -> EliminationOrder]; 

Solve[q==0, b] (*get condition on b for double root or branch point*) 

{{b -> -2 Sqrt[a] Sqrt[c]}, {b -> 2 Sqrt[a] Sqrt[c]}}

这是正确的。所以我的解释是在这种情况下使用GroebnerBasis OK ,但我不太熟悉它背后的深层理论,所以我在这里完全错了。< / p>

<子> P.S。我听说如果你在帖子中提到GroebnerBasis三次,Daniel Lichtblau会回答你的问题:)

2 个答案:

答案 0 :(得分:4)

这些示例中显示的错误将在版本9中修复。我不知道如何在版本8和之前的版本中避开它。如果我没记错的话,它是由某些代码中的中间数字溢出引起的,它检查符号多项式系数是否为零。

出于某些目的,可能适合指定更多变量,可能还有非默认的术语顺序。同样清除分母可能会有所帮助,至少在这是有效的事情。也就是说,我不知道这个策略在这个例子中是否会有所帮助。

我会在这段代码中再看一些,但可能不会在不久的将来。

Daniel Lichtblau

答案 1 :(得分:3)

这可能与 Mathematica 不会在Simplify等函数中尝试所有变量顺序的事实有关。这是一个例子:

ClearAll[a, b, c]
expr = (c^4 b^2)/(c^4 b^2 + a^4 b^2 + c^2 a^2 (1 - 2 b^2));
Simplify[expr]
Simplify[expr /. {a -> b, b -> a}]
   (b^2 c^4)/(a^4 b^2 + a^2 (1 - 2 b^2) c^2 + b^2 c^4)
   (a^2 c^4)/(b^2 c^2 + a^2 (b^2 - c^2)^2)

Adam Strzebonski explained that:

  

...可以尝试使用FullSimplify   可能的选择顺序   变量。当然,这会成倍增加   计算时间   阶乘[长度[变量]] ...