使用python二分法求解函数的解

想到用二分法求解函数方程的解,初学者,求指正:有什么需要改进的地方

def f1(x):
    return pow(x,2) - 3*x + 2
# 函数的表达形式

def f(a,b,c):
    # a和b为区间长度,c为精确度
    while b - a != c:
        if f1(a) * f1((a + b)/2)> 0:
            a = (a + b)/2
        elif f1(a) * f1((a + b)/2) < 0:
            b = (a + b)/2
        else:
            print (a + b )/2
# 具体二分法求解过程

f(0,5,0)
求问:1)为什么一直输出是2,

  2)如何修改得到另一个解 1
  
阅读 10.8k
2 个回答

作为初学者,你至少先要把语言基础和基本运算符都了解一遍吧,这里的除/ 是整除,所以两个整数相除时,要把其中一个变成小数(/2.0)。

你确定 b - a != c 能作为循环条件,不会死循环?

def f(x):
    return pow(x,2) - 3*x + 2
def fichotomy(a,b,f,r):
    """a,b 为区间,r为误差"""
    num1 = f(a)
    num2 = f(b)
    if num1*num2 > 0:
        print('该区间不存在值')
        return None
    n_num ,p_num = (a, b) if num1 < num2 else (b, a)
    reslut = None

    def sub_fichotomy(n_num, p_num):
        if abs(n_num-p_num) < r:
            print('result:', (p_num+n_num)/2)
            global result
            result = (p_num+n_num)/2
            return result
        n_num, p_num = ((n_num+p_num)/2, p_num) if f((n_num+p_num)/2) < 0 else (n_num, (n_num+p_num)/2)
        sub_fichotomy(n_num, p_num)
    sub_fichotomy(n_num, p_num)
    return result
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题