#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
.