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



所以我想用一个参数(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,或…),这些技巧非常值得学习。

相关内容

  • 没有找到相关文章

最新更新