所以我想用一个参数(s
)在一个变量(a
)中打印多项式,比如说
a·s^3 − s^2 - a^2·s − a + 1
。
Sage总是以降低的程度显示它,我想得到像
这样的东西 1 - a - a^2·s - s^2 + a·s^3
将其导出到LaTeX
。我无法弄清楚如何做到这一点......提前致谢。
答案 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)使余数的阶数大于多项式的次数,确保该系列只是多项式本身。