Python

Подскажите что не так с кодом? Метод хорд на Python.

eps = 0.0001


def f(x):
return (x ** 3) - 2.5 * (x ** 2) + 9.3 * x - 4.3


def f1(x):
return 3 * (x ** 2) - 5 * x + 9.3


def f2(x):
return (6 * x) - 5


a = 0
b = 1
x0 = a
x1 = b
if f2(0) * f(0) > 0:
x0 = 0
while abs(x0 - x1) > eps:
x1 = x0 - (f(x0) / (f(x0) - f(a))) * (x0 - a)
x0 = x1
if f2(1) * f(1) > 0:
x0 = 1
while abs(x0 - x1) > eps:
x1 = x0 - (f(x0) / (f(b) - f(x0))) * (b - x0)
x0 = x1
print('Корень уравнения:', round(x1, 4))
Vtalii Zabolotnii
Vtalii Zabolotnii
645
А так не проще?
 f, ε = lambda x: x * (9.3 - x * (2.5 - x)) - 4.3, 1e-4 
while True:
a, b = map(float, input('a b: ').split())
for i in range(1, 100):
c = a - f(a) * (b - a) / (f(b) - f(a))
print('%2d)%23.17f' % (i, c)); a, b = b, c
if abs(a - b) < ε: break
Обычно бывают проблемы с выбором начальных данных и разделением корней, но в данном случае вещественный корень у уравнения единственный, так что интервал, содержащий искомый нуль функции можно брать в широких пределах:
Игорь Саевич
Игорь Саевич
66 572
Лучший ответ
 eps = 0.0001 

# функция, заданная уравнением
def f(x):
return (x ** 3) - 2.5 * (x ** 2) + 9.3 * x - 4.3

# первая производная функции
def f1(x):
return 3 * (x ** 2) - 5 * x + 9.3

# вторая производная функции
def f2(x):
return 6 * x - 5

a = 0
b = 1
x0 = a
x1 = b

# проверяем, что знак второй производной на концах отрезка одинаковый
if f2(0) * f2(1) > 0:
print("Ошибка: знак второй производной на концах отрезка одинаковый!")
else:
# сначала ищем корень на левой границе отрезка
if f2(0) > 0:
x0 = 0
while abs(x0 - x1) > eps:
x1 = x0 - (f(x0) / f1(x0))
x0 = x1
# затем ищем корень на правой границе отрезка
if f2(1) > 0:
x0 = 1
while abs(x0 - x1) > eps:
x1 = x0 - (f(x0) / f1(x0))
x0 = x1
print('Корень уравнения:', round(x1, 4))
Vtalii Zabolotnii Не работает код. т.к на ноль делить нельзя