所以我想用一个参数(a
)在一个变量(s
)中打印多项式,比如
a·s^3 − s^2 - a^2·s − a + 1
。
Sage总是以递减的程度显示它,我想得到类似的东西
1 - a - a^2·s - s^2 + a·s^3
以将其导出到CCD_ 5。我不知道该怎么做。。。提前谢谢。
作为字符串操作的替代方法,可以使用序列展开。
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) 使得余数的阶数大于多项式的阶数确保了级数就是多项式本身。
这并不容易,因为排序顺序是在Pynac中定义的,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、或panda,或…),这些技巧非常值得学习。