5

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

图片:

在此处输入图像描述

可复制代码:

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的,但我不太熟悉它背后的深层理论,所以我在这里可能完全错了。

PS 我听说如果你GroebnerBasis在帖子中提到三遍,Daniel Lichtblau 会回答你的问题 :)

4

2 回答 2

4

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

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

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

丹尼尔·利赫特布劳

于 2011-06-23T13:54:18.170 回答
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 解释说:

...人们可以尝试使用所有可能的所选变量排序的 FullSimplify。当然,这将计算时间乘以 Factorial[Length[variables]]...

于 2011-06-01T11:49:44.657 回答