【问题标题】:Python - bisection method crashes whole applicationPython - 二分法使整个应用程序崩溃
【发布时间】:2020-01-15 22:54:09
【问题描述】:

我的窗口应用程序有一个奇怪的问题。它的任务是用二分法或割线法计算n次多项式的根,这取决于用户的意愿。现在我的问题开始了,因为如果我将某个时间间隔放入该方法中,它有时会在第一次单击星形按钮后崩溃,但如果它第一次通过,第二次如果我调整时间间隔 [a,b] 并进入“a “第一次运行的结果,它崩溃而没有错误。我什至没有提到我的割线方法太疯狂了,因为某些区间的答案很好,有些则只是随机的。

    def secant(self,f, a, b, err):
        fb=f(b)
        while np.absolute(fb)>err:
            midPoint=b-(b-a)*fb/(fb-f(a))
            a=b
            b=midPoint
            fb=f(b)
        return b
#--------------------------------------------------------------
    def bisection(self,f,a,b,err):
        while np.absolute(b-a)>err:
            midPoint=(a+b)*0.5
            if f(midPoint)*f(a)<0:
                b=midPoint
            midPoint=(a+b)*0.5
            if f(midPoint)*f(b)<0:
                a=midPoint
            midPoint=(a+b)*0.5
        return midPoint

【问题讨论】:

  • 当 f(a) == 0 或 f(b) == 0 之后,您的程序将处于无限循环中。
  • 我怎样才能避免这种情况?我没有看到任何解决这个问题的方法
  • 您应该测试 f(a) 或 f(b) == 0,然后返回 a 或 b
  • 我不知道,如果 f(a)==0 返回 a 和 b 相同,但它仍然在某些时间间隔内崩溃
  • 在每一步打印出 a、b、f(a) 和 f(b) 的值,看看发生了什么。

标签: python crash bisection


【解决方案1】:
def bisect(f, a, b, e):
    """ Bisection Method

    inputs:
    f - a function.
    a - Starting interval
    b - Ending interval
    e - Acceptable value for 0; (e.g. consider 0.001 == 0)
    """

    iterations = 0
    while True:
        c = (a + b)/2
        if b - c <= e:
            print('Iterated:', iterations, 'times.')
            return c
        elif f(b)*f(c) <= 0:
            a = c
        else:
            b = c
        iterations += 1

查看更多here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    相关资源
    最近更新 更多