Как записать массивы в sagemath, в котором хранятся многочлены?

#polynomials #sage

Вопрос:

Моя задача состоит в том, чтобы вычислить S-многочлены из 8 заданных мне многочленов. У Sage уже есть встроенная функция (называемая spol ), которая вычисляет S-многочлен различных многочленов, которая выглядит следующим образом:

 from sage.rings.polynomial.toy_buchberger import spol
R.<y_1, y_2, y_3, y_4, x_1, x_2, x_3, x_4> = PolynomialRing(QQ, order='lex')
g = spol(-y_2*x_1   y_2*x_4 - y_3*x_1^2   y_3*x_4^2 - y_4*x_1^3   y_4*x_4^3,
         -y_2*x_2   y_2*x_4 - y_3*x_2^2   y_3*x_4^2 - y_4*x_2^3   y_4*x_4^3)
 

Если я возьму 2 многочлена из заданных 8 многочленов и вычислю S-многочлены вручную, будет 32 возможных комбинации.

Есть ли лучший способ подойти к проблеме?

Поэтому я хочу, чтобы

создайте массив, в котором хранятся 8 многочленов, и создайте цикл for, который возьмет многочлены из массива и вычислит их S-многочлен, а затем выдаст мне мой список.

Я не очень хорошо разбираюсь в кодировании (я из математического образования). Мне действительно нужна помощь.

Ответ №1:

Это может быть что-то вроде этого:

 from sage.rings.polynomial.toy_buchberger import spol
R.<y_1, y_2, y_3, y_4, x_1, x_2, x_3, x_4> = PolynomialRing(QQ, order='lex')
polinoms = [p1, p2, p3, p4, p5, p6, p7, p8] #add the polynoms
spols = [] #the S-polynomials

for i in polinoms:
  for j in polinoms:
    if i != j:
      spols.append(spol(i, j))

 

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

Комментарии:

1. возможно, @smita имел в виду 28 комбинаций (8 выбирают 2)? В этом случае мы могли бы использовать for i,j in itertools.combinations(polinoms,2): . Это также потребовало бы, чтобы у нас были соответствующие import itertools возможности для использования itertools.combinations .