Странное поведение с GroebnerBasis в v7 - PullRequest
5 голосов
/ 01 июня 2011

Я столкнулся со странным поведением при использовании GroebnerBasism1 ниже я использовал греческую букву в качестве переменной, а в 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]}}

, что правильно.Итак, моя интерпретация заключается в том, что OK в таких случаях использовать GroebnerBasis, но я не слишком хорошо знаком с глубокой теорией, лежащей в основе этого, поэтому я могу быть совершенно не прав здесь.

PS Я слышал, что если вы упомянете GroebnerBasis трижды в своем посте, Даниэль Лихтблау ответит на ваш вопрос:)

Ответы [ 2 ]

4 голосов
/ 23 июня 2011

Ошибка, показанная в этих примерах, будет исправлена ​​в версии 9. Не знаю, как ее избежать в версиях 8 и более ранних. Если я правильно помню, это было вызвано промежуточным числовым переполнением в некотором коде, который проверял, может ли символический полиномиальный коэффициент быть нулевым.

Для некоторых целей может быть целесообразно указать больше переменных и, возможно, порядок терминов не по умолчанию. Также очистка знаменателей может быть полезна, по крайней мере, в тех случаях, когда это действительно допустимо. Тем не менее, я не знаю, поможет ли эта тактика в этом примере.

Я еще посмотрю этот код, но, вероятно, не в ближайшем будущем.

Даниэль Лихтблау

3 голосов
/ 01 июня 2011

Это может быть связано с тем, что 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>   (b^2 c^4)/(a^4 b^2 + a^2 (1 - 2 b^2) c^2 + b^2 c^4)</b>
<b>   (a^2 c^4)/(b^2 c^2 + a^2 (b^2 - c^2)^2)</b>

Адам Стржебонски объяснил, что:

... можно попробовать FullSimplify со всеми возможнымиупорядочения выбранных переменных.Конечно, это умножает время вычисления на Factorial [Length [variable]] ...

...