意外升级到';复杂';键入Python数学表达式

意外升级到';复杂';键入Python数学表达式,python,python-3.x,Python,Python 3.x,在实现一个数值优化算法时,我在Python中遇到了一些相当奇怪的行为:在对函数域中的某些值应用函数后,某些结果的计算结果为“复数” 计算数字的代码非常简单: def f(x1, x2): return ((4 - 2.1 * x1 ** 2 + x1 ** (4 / 3)) * x1 ** 2 + x1 * x2 + (-4 + 4 * x2 ** 2) * x2 ** 2) 以下是上述函数返回复数的一些数字: x1

在实现一个数值优化算法时,我在Python中遇到了一些相当奇怪的行为:在对函数域中的某些值应用函数后,某些结果的计算结果为“复数”

计算数字的代码非常简单:

def f(x1, x2):   
    return ((4 - 2.1 * x1 ** 2 + x1 ** (4 / 3)) * x1 ** 2 + x1 * x2 +
            (-4 + 4 * x2 ** 2) * x2 ** 2)
以下是上述函数返回复数的一些数字:

x1                    x2                   Result
-1.30423635697717    -1.750915750915751    27.13078459548355-2.099189473463638j
-0.28677817116347226  0.3413919413919415  -0.20277691810793963-0.013469483248785653j
-1.105725796606031   -0.5816849816849816   0.8001125335594826-1.2106597512385535j
以及上述函数返回正常浮点值的一些数字:

x1   x2  Result
1    2   52.9
1.4 -2   48.04232245707135
为什么会发生这种情况?我能做些什么来修复它


代码在Python 3.3.2下运行。

表达式
x1**(4/3)
将变量
x1
取为
4/3
的幂。当
x1
为负值时。Python正在为您选择“主要根”,这在本例中很复杂


有关想法,请参阅。

“使用math.pow(x1,4/3)获取变量的实根”-这不起作用,也不是链接中给出的解决方案。@Random832是的,这里有一种不同的方法。啊..我错过了。几年前发布的链接中被接受的答案很有魅力。我会把它放回去的。