创建二次函数并在Python中查找特定的样式根

时间:2017-09-22 00:52:25

标签: python python-3.x

我在Python中创建了一个二次方程,目的是找到输入的根。我希望有非常具体的输出,但不知道如何使用我编写代码的方式转换/舍入浮点数,或者如何让代码返回1e-9。任何想法都非常感激。

     def find_roots(a,b,c):
        d=(b**2)-(4*a*c)
        if d <0:
            print ([])
        elif d==0:
            x=(np.float128(-b+math.sqrt(d))/(2*a))
            print(x)
        else:
            x1=(np.float128(-b-math.sqrt(d))/(2*a))
            x2=(np.float128(-b+math.sqrt(d))/(2*a))
            list=[x1,x2]
            print (sorted(list, reverse=False))

     find_roots(-3,5,2)
     find_roots(0,5,4)
     find_roots(1e-8,10,1e-8)

我目前正在:

    [-0.33333333333333334, 2.0]
    [-inf, nan]
    [-999999999.99999999791, 0.0]

作为输出并希望获得:

    [-1.0/3.0, 2.0]
    [-0.8]
    [1e-8, 10.0, 1e-8]

2 个答案:

答案 0 :(得分:0)

您想要的输出需要三种不同格式的结果数字:小数,小数和科学(或指数)。您可以将另一个参数传递给您的函数,该函数告诉您的函数如何格式化数字或执行格式化本身(在这种情况下参数将是一个函数)。

例如:

def decimal_to_scientific(x):
    return <the formatted x (you can find this online)>

def find_roots(a, b, c, format):
    ...
    elif d == 0:
        ...
        x = format(x)
        print x
    ...

find_roots(1e-8, 10, 1e-8, decimal_to_scientific)

答案 1 :(得分:0)

 find_roots(0, 5, 4)

这并没有完全描述二次方程。这是一个线性y = 5*x + 4等式。当你传入2*a时,将一个想要除以a == 0的例程称为不公平。提出异常是正确的。也许numpy的宽容行为在这里没有给你任何好处。

如果真的是你想要的话,请考虑将数字表示为rationals