Факторизация одномерных многочленов над некоторым числовым полем с помощью Sympy - PullRequest
0 голосов
/ 29 августа 2018

Я работаю над разложением многомерных полиномов по некоторым полям расширения, используя Sympy.

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

Мой подход теперь состоит в том, чтобы определить эти одномерные многочлены над «QQ», затем посмотреть на корни и решить для каждого корня, является ли он действительным или нет. Если это правда, я добавляю необходимые термины в «QQ», а затем прошу Sympy учитывать. Это означает, что я пытаюсь автоматизировать следующие шаги:

  1. F = поли ((х ^ 2-3) * (х ^ 2-5), х, домен = 'QQ')
  2. решить (е, х)
  3. (дает [-sqrt (3), sqrt (3), - sqrt (5), sqrt (5)])
  4. f.factor (е, расширение = [SQRT (3), SQRT (5)])

(.. или каким-то другим способом, но я думаю, с похожими шагами и временем выполнения)

Этот курс имеет очень длительное время выполнения, так как вы как бы дважды рассчитываете факторы. И есть также много исключений, о которых мне нужно подумать.

Короче говоря: есть ли способ попросить Sympy разложить многочлен над 'QQ' и позволить ему, если необходимо, сделать несколько расширений?

Есть ли что-то вроде f.factor (numberfield = True)?

Заранее спасибо !!

1 Ответ

0 голосов
/ 29 августа 2018

Это планируется, но еще не реализовано (по состоянию на версию 1.2). См. Разложение полиномов на линейные множители (выделено мной):

В настоящее время SymPy может делить многочлены на неприводимые по различным областям, что может привести к расщеплению факторизации (на линейные множители). Однако в настоящее время не существует систематического способа автоматически выводить поле расщепления (поле алгебраических чисел). В будущем будет реализован следующий синтаксис:

factor(x**3 + x**2 - 7, split=True)

Обратите внимание, что это отличается от extension = True, поскольку в последующем сообщается только о том, как должен выполняться синтаксический анализ выражения, а не о том, что должно быть областью вычисления. Можно смоделировать ключевое слово split для нескольких классов полиномов, используя функцию solve().

... где последнее предложение относится к тому, что вы делаете сейчас.

...