Wolfram mathematica v7中GroebnerBasis的怪异行为

Wolfram mathematica v7中GroebnerBasis的怪异行为,wolfram-mathematica,mathematica-7,Wolfram Mathematica,Mathematica 7,我在使用GroebnerBasis时遇到了一些奇怪的行为。在下面的m1中,我使用了希腊字母作为变量,在m2中,我使用了拉丁字母。它们都没有与之关联的规则。为什么根据我选择的变量,我会得到截然不同的答案 图片: 可复制代码: 编辑: 正如belisarius所指出的,我使用的GroebnerBasis并不完全正确,因为它需要多项式输入,而我的则不完全正确。这个错误是由一个复制的意大利面食引入的,直到现在才被注意到,因为当我使用上面的m1完成其余代码时,我得到了预期的答案。然而,我并不完全相信这

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

图片:

可复制代码:
编辑: 正如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
是可以的,但我对其背后的深层理论不太熟悉,所以我可能在这里完全错了


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

这可能与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^2C^4)/(b^2C^2+a^2(b^2-c^2)^2)

…一个人可以试着用所有的 所选产品的可能顺序 变量。当然,这会成倍增加 计算时间由 阶乘[长度[变量]]


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

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

我将进一步研究这段代码,但在不久的将来可能不会


Daniel Lichtblau

@yoda抱歉,删除了我之前的评论。你从Solve[]多项式中得到的解是什么?@yoda我认为
GroebnerBasis
只适用于poly…@yoda我不知道,但我认为你应该用这些信息编辑你的问题usage@yoda让我们等丹尼尔……:)我认为这次事故背后有一个错误。将被修复。不确定接下来会发生什么(挂起或新结果)。在没有崩溃的情况下,结果之间的差异可能是由于内部变量顺序的差异。如果两个结果都正确,那就是。现在就去旅行,下周可能会有时间仔细看看。@yoda我不这么认为;我已经在init.m中解决了这个问题,我仍然有这种行为。谢谢Daniel。这个例子并不重要,因为我选择了一个我知道答案的例子。
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)