前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >二分法求解

二分法求解

作者头像
裴来凡
发布2022-05-29 10:12:52
5040
发布2022-05-29 10:12:52
举报
文章被收录于专栏:图像处理与模式识别研究所
代码语言:javascript
复制
import numpy as np #导入NumPy工具包
#定义几个不同的函数用于后续的二分法求解验证
f0=lambda x:2**x-4
f1=lambda x:np.log10(x)
f2=lambda x:x**0.3-1
f3=lambda x:x**2-x*2-1
# Python代码中的log函数如果没有设置底数的话,默认为e,即自然对数。
#文中其他非代码部分的log如果没有特别说明,一般也是指自然对数
#定义二分算法函数,其中a,b用于定义函数区间[a,b],sec=(a+b)/2为区间中点
def bisection(a,b,fun):
    sec=(a+b)/2
    while True:
        if fun(sec)*fun(a)<0:
            b=sec
        elif fun(sec)*fun(a)>0:
            a=sec
        else:
            return sec
        least_sec=sec
        sec=(a+b)/2
        try:
            #给定一个精度ε,用于函数求解的近似计算
            if abs((sec-least_sec)/sec)<0.000005:
                return sec
        except ZeroDivisionError as e: #除数为0出错处理
            pass
    pass#输出上述几个函数基于给定精度的近似根
print(bisection(-5,5,f0))
print(bisection(0.5,5,f1))
print(bisection(0,15.0,f2))
print(bisection(-10.0,12.0,f3))

1.9999980926513672 1.000002384185791 1.0000026226043701 -0.41421449184417725

算法:二分法求解是对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 图像处理与模式识别研究所 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档