我正在尝试将Python用作简单的代数计算器,求解多项式等单个变量。当我使用带有小数指数的**
运算符时,我看到了意想不到的结果。具体来说,它为不应该很复杂的值生成复数:
>>> (-1)**(1/3)
(0.5000000000000001+0.8660254037844386j)
-1的立方根当然有-1的实数根,这是我期望回来的。
为了避免这个问题,将价值提升到任意理性权力的正确方法是什么? (如果内置运算符由于舍入或其他原因而无法执行此操作,我可以使用库。)
答案 0 :(得分:1)
我试图将Python用作简单的代数计算器,求解多项式等单个变量。
一种方法是使用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]
对多项式 x 3 +1 进行编码,其根目录正是-1的立方根。