import math;
def f1(x):
return (x**3 - (8*x) + 1 - (5 * math.sin(x))); #уравнение 1
def sign(o): #функция проверки на смену знака
if o < 0:
return(-1);
elif o > 0:
return(1);
else:
return(0);
def find_the_root(l_b, r_b): #функция, которая ищет корень в промежутке, но не работает
x = l_b;
while x <= r_b:
if float('{:.3f}'.format(f1(x))) == float('{:.3f}'.format(0)): #привожу к одинаковому кол-ву знаков после .
print(x); #печатает корень типо
x += eps; #шагает дальше
f = []; #массив со значениями функции
z = []; #массив со значениями Х
eps = 0.001; #шаг при смене знака
l = float('{:.3f}'.format(-5)); #начало промежутка
r = float('{:.3f}'.format(5)); #конец промежутка
x = l;
step = float('{:.3f}'.format(0.5)); #шаг
while x <= r: #заполнение массивов
f.append(float('{:.3f}'.format(f1(x))));
z.append(float('{:.3f}'.format(x)));
x += step;
for i in range(1, len(z)):
if sign(f[i]) != sign(f[i-1]): #если происходит смена знака
#print(z[i-1], z[i]); - отладочный вывод, промежутки смены знака находит правильно, в формате "2.5"
find_the_root(z[i-1], z[i]); #вызываю функцию для промежутка со сменой знака, которая почему-то не работает