2015-06-20 38 views
2

如果我们有一个多元多项式在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和x * y> y^2。我仍然无法找到任何已知的排序或方法来做到这一点,所以你的答案仍然是最简单和最接近的。谢谢! – Jimx