Метод не находит второй корень уравнения

Рейтинг: 1Ответов: 0Опубликовано: 13.05.2023

Написал программу, которая находит корни уравнения с помощью метода касательных, не могу понять, в чем ошибка, почему код не видит второй корень, хотя условия я задал, подскажите, пожалуйста, в чем может быть проблема

import random

def tangent_method(f, a, b, eps):
    roots = []
    delta = 0.1 * (b - a)
    timeout = 1000
    iter = 0
    
    df = lambda x: (f(x + eps) - f(x)) / eps
    
    while len(roots) < 2:
        x0 = a + (b - a) * random.random()
        f0 = f(x0)
        prev_sign = f0 / abs(f0)
        
        while iter < timeout:
            x0 -= f0 / df(x0)
            f0 = f(x0)
            sign = f0 / abs(f0)
            iter += 1
            
            if abs(f0) < eps:
                if len(roots) == 0 or abs(x0 - roots[-1]) > delta:
                    roots.append(x0)
                    break
                
            if sign != prev_sign:
                prev_sign = sign
                a, b = b, x0 + delta
                break
        else:
            break
        
    return tuple(roots)

f = lambda x: x**2  - 5
a, b = -5, 5
eps = 0.0001
roots = tangent_method(f, a, b, eps)
print(roots) 

Ответы

Ответов пока нет.