栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

二分法的求解方程的根

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二分法的求解方程的根

二分法 二分法简要概述

在区间上 [ a , b ] [a, b] [a,b]使用二分法求近似根,n次操作后的区间长度为 b − a 2 n frac{b-a}{2^n} 2nb−a​,选择其中点作为近似根,则误差小于区间长度的一半。即: e r r < = b − a 2 n + 1 err<=frac{b-a}{2^{n+1}} err<=2n+1b−a​,且函数的计算次数为 n + 2 n+2 n+2。

tips:

要求根精确度为小数点后p位,即: e r r < = 0.5 × 1 0 − p err<=0.5times10^{-p} err<=0.5×10−p

例子:

x 3 = 9 x^3 = 9 x3=9,精确到小数点后6位。

python程序
"""程序还可以优化,执行过程重复步骤多导致程序冗余。
"""
class BT:
    def __init__(self, a, b, q):
        self.a = a
        self.b = b
        self.q = q
        self.p = None

    def func(self, x):
        """定义方程"""
        f = x**3 - 9
        return f

    def bisect_methed(self):
        """传入参数为[a, b]:区间,p:精确度。
        """
        if (self.b - self.a)/2 <= 0.5 * 10**(-self.q):
            self.p = (self.a+self.b)/2
        else:
            if self.func(self.a) * self.func(self.b) > 0:
                raise ValueError('区间错误')
            elif self.func(self.a) * self.func(self.b) == 0:
                if self.func(self.a) == 0:
                    return self.a
                else:
                    return self.b
            else:
                c = (self.a + self.b)/2
                if self.func(self.a) * self.func(c) < 0:
                    self.b = c
                    self.bisect_methed()
                else:
                    self.a = c
                    self.bisect_methed()
        return self.p


if __name__ == '__main__':
    demo = BT(2, 3, 6)
    print(demo.bisect_methed())
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/317684.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号