Python,十进制数字,复数

时间:2016-12-01 21:04:04

标签: python cubic

我目前正在编写一个程序来确定三次方程的根。这是我到目前为止所写的:

import math
def sols(a, b, c, d ):
    disc = 18*a*b*c*d - 4*(b**3)*d + (b**2)*(c**2) - 4*a*(c**3) - 27*(a**2)*(d**2)
    x = b**2.0 - 3.0*a*c
    y = 2.0*(b**3.0) - 9.0*a*b*c + 27.0*(a**2.0)*d
    alpha = complex(-0.5, 0.5*math.sqrt(3))
    if disc >= 0:
        C = ((y + complex (0, math.sqrt (27.*(a**2)*disc)))/2)**(1.0/3)
        sol1 = -(1/3*a)*(b + C + x/C)
        sol2 = -(1/3*a)*(b + C*alpha + x/(C*alpha))
        sol3 = -(1/3*a)*(b + C*(alpha**2)) + x/(C*(alpha**2))

a,b,c,d是真实的。如果判别式大于零,我应该留下三个真正的根。 C计算一个复杂的数字,但是当sol1中使用C时,复杂的部分应该相互抵消,我应该留下一个真正的解决方案。

给定值a = 2,b = 3,c = -11 d = -6我获得C和x / C:

In[11]: C
Out[12]: (7.5+4.330127018922192j)
In[13]: x/C
Out[14]: (7.500000000000002-4.330127018922193j)

正如我之前所说的那样,两个复杂的部分应该取消,并且直到最后一个十进制数字为止。因此,而不是C - x / C = 15,我得到:

In[26]: C + x/C
Out[27]: (15.000000000000002-8.881784197001252e-16j)

我不明白如何解决这个问题。我不知道我的程序有什么问题,使我的C和x / C值相差一个小数。请有人可以提供任何形式的帮助!!!

0 个答案:

没有答案