我正在尝试将 Python 用作简单的代数计算器,求解多项式等单个变量。当我将 **
运算符与小数指数一起使用时,我看到了意想不到的结果。具体来说,它为不应复杂的值生成复数:
>>> (-1)**(1/3)
(0.5000000000000001+0.8660254037844386j)
-1 的立方根当然在 -1 处有一个实数根,这是我希望得到的结果。
将值(value)提高到任意理性权力以避免这个问题的正确方法是什么? (如果内置运算符由于舍入或其他原因无法执行此操作,我愿意使用库。)
I'm trying to use Python as a simple algebraic calculator, solving polynomials and such of a single variable.
一种方法是使用 NumPy。具体来说,使用 np.roots()
并提取真实结果(如果有):
>>> np.roots([1, 0, 0, 1])
array([-1.0+0.j , 0.5+0.8660254j, 0.5-0.8660254j])
请注意,[1, 0, 0, 1]
对多项式 x3+1 进行编码,其根恰好是-1 的立方根。