2015-06-20 7 views
2

Если мы имеем многомерный многочлен SAGE, напримерSage полиномиальные коэффициенты, включая нули

f=3*x^3*y^2+x*y+3 

Как можно отобразить полный список коэффициентов, включая нулевые, из-за отсутствия условий между максимальным сроком dregree и постоянным.

P.<x,y> = PolynomialRing(ZZ, 2, order='lex') 
    f=3*x^2*y^2+x*y+3 
    f.coefficients() 

дает мне список

[3, 1, 3] 

, но я хотел бы «полный» список, чтобы поместить в матрицу. В приведенном выше примере это должно быть

[3, ,0 , 0, 1, 0, 0, 0, 0, 3] 

соответствующие условиям:

x^2*y^2, x^2*y, x*y^2, x*y, x^2, y^2, x, y, constant 

ли я что-то отсутствует?

ответ

5

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

coeffs = [] 
for i in range(f.degree(x), -1, -1): 
    for j in range(f.degree(y), -1, -1): 
     coeffs.append(f.coefficient({x:i, y:j})) 

Теперь coeffs является [3, 0, 0, 0, 1, 0, 0, 0, 3], что соответствует

x^2*y^2, x^2*y, x^2, x*y^2, x*y, x, y, constant 

Встроенный .coefficients() метод только полезно, если вы также используете .monomials(), который предоставляет список совпадающих мономы, имеющие эти коэффициенты.

+0

Вы правы. Я не знал о моем выходе и не знал о методе коэффициента(). Обходной путь, который я использовал, заключался в создании мономов ([x, y], [2,2]) и сравнении каждого элемента. Моя проблема с моим упорядочением, хотя и принимает одночлен x * y> x^2 AND x * y> y^2. Я до сих пор не могу найти какой-либо известный порядок или метод, чтобы ваш ответ по-прежнему был самым простым и самым близким. Благодаря! – Jimx