Python - метод деления пополам сбивает все приложение - PullRequest
0 голосов
/ 16 января 2020

У меня странная проблема с моим оконным приложением. Его задача - вычислить корни полинома n-степени с помощью метода деления пополам или секущего метода, это зависит от желания пользователя. И теперь моя проблема начинается, потому что, если я добавлю определенный интервал в метод, он падает иногда после первого нажатия кнопки «звезда», но если это происходит через первый раз, во второй раз, если я настраиваю интервал [a, b] и вставляю в «a msgstr "результат первого go, он вылетает без ошибок. Я даже не упоминаю, что мой секущий метод сходит с ума, для некоторых интервалов ответы хороши, для некоторых они просто случайны.

    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

1 Ответ

0 голосов
/ 16 января 2020
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

Проверьте больше здесь .

...