Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 避免复数同态_Python_Sympy - Fatal编程技术网

Python 避免复数同态

Python 避免复数同态,python,sympy,Python,Sympy,我正在使用sympy解析来解析字符串: f = parse_expr('(x-1)^(1/3)') 当我使用f.subs({x:0})时,它给出的是复数而不是-1。 我怎样才能摆脱这种行为 我需要一些一般性的东西,因为函数可以是任意的,我不知道会有什么变量 谢谢。查看代码并找到函数real\u root,我设法使用转换来编写自己的转换器。您的解决方案似乎是最好的。您还可以象征性地进行替换,而不是试图更改解析器。查看原子和xreplace 我只想补充一点,SymPy使用了这样一个约定,分数次幂是

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

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

我需要一些一般性的东西,因为函数可以是任意的,我不知道会有什么变量


谢谢。

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

您的解决方案似乎是最好的。您还可以象征性地进行替换,而不是试图更改解析器。查看原子
xreplace

我只想补充一点,SymPy使用了这样一个约定,分数次幂是具有最小复变元的本原根。Python本身遵循以下约定:

>>> (-1+0j)**(1/3)
(0.5000000000000001+0.8660254037844386j)
这样做有很多很好的理由。最明显的是,数字的二次幂和三次幂将给出另外两个根:

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

而不是-1?为什么它会给出-1?一个复数应该是正确的结果。因为有3个数字,所以提升到第三次方会得到-1。它们是-1和2复合体。我想要-1而不是复杂的。我花了几天时间考虑如何修复它,但我没有意识到有
real\u root
。SymPy开始进入一种“你遇到的任何问题都是别人已经遇到并解决的问题”的状态。