我正在使用SymPy order库尝试某些操作并发现以下等式:

O(2**n, (n, oo))


输出将是O(exp(n*log(2)))

有什么方法可以使SymPy输出O(2**n)而不是O(exp(n*log(2)))

最佳答案

你可以用

>>> o = O(2**n, (n, oo))
>>> Function("O")(*map(simplify,o.args))
O(2**n, (n, oo))


但是,如果您希望能够以这种方式进行打印,则看起来必须创建自定义打印机才能以这种方式进行打印。如果执行o.func(*map(...))-即使使用evaluate=False-它也会恢复为exp形式,因此这似乎已硬编码为O想要显示的方式。可能值得提出一个问题,即是否应在O中添加/遵守evaluate关键字。

10-04 22:23
查看更多