使用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
是 OK ,但我不太熟悉它背后的深层理论,所以我在这里完全错了。< / p>
<子> P.S。我听说如果你在帖子中提到GroebnerBasis
三次,Daniel Lichtblau会回答你的问题:)
答案 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 可能的选择顺序 变量。当然,这会成倍增加 计算时间 阶乘[长度[变量]] ...