How to do the Bisection method in Python

前端 未结 7 2432
小蘑菇
小蘑菇 2021-02-15 15:05

I want to make a Python program that will run a bisection method to determine the root of:

f(x) = -26 + 85x - 91x2 +44x3 -8x4 + x5

The Bisecti

7条回答
  •  星月不相逢
    2021-02-15 15:34

    My implementation is more generic and yet simpler than the other solutions: (and public domain)

    def solve(func, x = 0.0, step = 1e3, prec = 1e-10):
        """Find a root of func(x) using the bisection method.
    
        The function may be rising or falling, or a boolean expression, as long as
        the end points have differing signs or boolean values.
    
        Examples:
            solve(lambda x: x**3 > 1000) to calculate the cubic root of 1000.
            solve(math.sin, x=6, step=1) to solve sin(x)=0 with x=[6,7).
        """
        test = lambda x: func(x) > 0  # Convert into bool function
        begin, end = test(x), test(x + step)
        assert begin is not end  # func(x) and func(x+step) must be on opposite sides
        while abs(step) > prec:
            step *= 0.5
            if test(x + step) is not end: x += step
        return x
    

提交回复
热议问题