在SageMath中以相反的顺序显示多项式

时间:2016-04-13 12:29:59

标签: latex polynomial-math sage display

所以我想用一个参数(s)在一个变量(a)中打印多项式,比如说

a·s^3 − s^2 - a^2·s − a + 1

Sage总是以降低的程度显示它,我想得到像

这样的东西

1 - a - a^2·s - s^2 + a·s^3

将其导出到LaTeX。我无法弄清楚如何做到这一点......提前致谢。

2 个答案:

答案 0 :(得分:4)

这并不容易,因为排序顺序是在Pynac(Ginac的一个分支)中定义的,Sage使用它来进行基本的符号操作。但是,根据您的需要,可以通过编程方式实现:

sage: F = 1 + x + x^2
sage: "+".join(map(str,sorted([f for f in F.operands()],key=lambda exp:exp.degree(x))))
'1+x+x^2'
但是,我不知道这种事情是否足以满足您的需求。您可能必须遍历"表达式树"相当多,但至少你的例子似乎有效。

sage: F = a + a^2*x + x^2 - a*x^2
sage: "+".join(map(str,sorted([f for f in F.operands()],key=lambda exp:exp.degree(x))))
'a+a^2*x+-a*x^2+x^2'

在一个简短的声明中执行此操作需要一些像这样的Python技巧,如果你要使用Sage(或Numpy,或pandas,或......),那么非常非常值得学习相当数量。

答案 1 :(得分:3)

作为字符串操作的替代方法,可以使用系列扩展。

F = a*s^3 - s^2 - a^2*s - a + 1
F.series(s, F.degree(s)+1)

返回

(-a + 1) + (-a^2)*s + (-1)*s^2 + (a)*s^3

这似乎是你想要的,除了一些冗余的括号。

这是因为(a)幂级数从最低系数到最高系数排序; (b)使余数的阶数大于多项式的次数,确保该系列只是多项式本身。