避免复数Sympy

时间:2014-02-14 22:01:50

标签: python sympy

我正在使用sympy解析来解析字符串:

f = parse_expr('(x-1)^(1/3)')

当我使用f.subs({x:0})时,它给出了复数而不是-1。 我怎样才能摆脱这种行为?

我需要一些通用的东西,因为函数可以是任意的,我不知道那里会有什么变量。

感谢。

2 个答案:

答案 0 :(得分:1)

查看代码并找到函数real_root,我设法使用转换来编写自己的转换器。

答案 1 :(得分:0)

您的解决方案似乎是最好的解决方案。您也可以象征性地进行替换,而不是尝试更改解析器。请查看atomsxreplace

我只想补充一点,SymPy使用的惯例是分数幂是具有最小复数参数的原始根。 Python本身遵循以下约定:

>>> (-1+0j)**(1/3)
(0.5000000000000001+0.8660254037844386j)

这样做有很多好理由。最明显的是,数字的第二和第三个权力将给你另外两个根源:

>>> (-1+0j)**(2/3)
(-0.4999999999999998+0.8660254037844388j)
>>> (-1+0j)**(3/3)
(-1+0j)