【算法 | Python】二分法求函数在区间[a,b]中的根


程序来源:Bisection


Arithmetic Analysis

原理说明

源代码

import math

'''
二分法求函数在区间[a,b]中的根
'''

def bisection(
    function, a, b
):  # finds where the function becomes 0 in [a,b] using bolzano

    start = a
    end = b
    if function(a) == 0:  # one of the a or b is a root for the function
        return a
    elif function(b) == 0:
        return b
    elif (
        function(a) * function(b) > 0
    ):  # if none of these are root and they are both positive or negative,
        # then his algorithm can't find the root
        print("couldn't find root in [a,b]")
        return
    else:
        mid = start + (end - start) / 2.0
        while abs(start - mid) > 10 ** -7:  # until we achieve precise equals to 10^-7
            if function(mid) == 0:
                return mid
            elif function(mid) * function(start) < 0:
                end = mid
            else:
                start = mid
            mid = start + (end - start) / 2.0
        return mid


def f(x):
    return math.pow(x, 3) - 2 * x - 5


if __name__ == "__main__":
    print(bisection(f, 1, 1000))

代码说明

  • 本程序较为简单,说明略,有问题请留言。
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
在数值分析二分法也称为二分查找法或者折半查找法,是一种方程在给定区间上的的方法。使用Python语言实现二分法方程的过程如下: 1. 首先,我们需要定义一个函数,表示给定方程。假设方程为f(x),则可以使用Python定义一个函数,例如:def f(x)。 2. 然后,我们需要确定待区间。假设区间为[a, b],其a和b为给定区间的左右边界。 3. 接下来,我们需要使用二分法的思想在区间[a, b]内逐渐缩小范围,寻找方程。具体的二分法解过程如下: a. 检查区间点c = (a + b) / 2,并计算此处的函数值f(c)。 b. 如果f(c)接近于0,即满足我们的需要的,那么c就是方程的一个。 c. 如果f(c)的正负号与f(a)的正负号相同,说明位于区间[a, c]内,此时更新区间的右边界为b = c,然后回到步骤a继续迭代。 d. 如果f(c)的正负号与f(b)的正负号相同,说明位于区间[c, b]内,此时更新区间的左边界为a = c,然后回到步骤a继续迭代。 e. 重复步骤a到d,直到找到方程的所有或者满足我们的精度要。 4. 最终,算法的迭代次数或者满足精度要的个数,可以判断二分法是否成功找到了方程在给定区间上的所有。 需要注意的是,在实际,还需要考虑到一些特殊情况,比如方程没有区间内存在多个等问题,并针对这些情况进行特殊处理。同时,在进行二分法迭代时,应该据问题的实际情况设置合适的精度要,防止出现无限循环的情况。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_43964993

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值