Python数学表达式中对“复杂”类型的意外提升

时间:2013-10-24 16:38:00

标签: python python-3.x

在实现数值优化算法时,我在Python中遇到了一些相当奇怪的行为:在函数域的某些值上应用Six-hump cambel back function之后,一些结果会评估为“复杂”数字。

评估数字的代码非常简单:

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

以上函数返回正常float的一些数字:

x1   x2  Result
1    2   52.9
1.4 -2   48.04232245707135

为什么会发生这种情况,我该怎么做才能解决它?

代码在Python 3.3.2下运行。

1 个答案:

答案 0 :(得分:4)

表达式x1 ** (4 / 3)将变量x1赋予4/3的幂。当x1为否定时,result of the expression has 3 roots; 2 of them are complex。 Python正在为您选择“主要根”,在这种情况下这很复杂。

请参阅this question了解相关信息。