Size: a a a

Хирьянов Т.Ф., Практика программирования на Python 3 (2019)

2020 May 17

fl

first last in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
first last
Товарищи, кто может объяснить задачу?
Я просто не пойму что за смена знака и как это организовать
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
ну вот идёт у тебя даже допустим перебор. до какого-то определённого значения у тебя корни все положительные, и на каком-то корне вдруг встречает отрицательный корень. это и есть смена знака. в случае нечётной функции
источник

fl

first last in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Вроде разобрался
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
вроде есть способ найти момент смены знака и без перебора, это гуглить надо
источник

fl

first last in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
В вроде бы понял, а что за метод деления отрезка пополам?
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
источник

fl

first last in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
То есть, я делю отрезок пополам и ищу там смену знака?
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
бинарный поиск
источник

fl

first last in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
И что им искать?
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
ну вот у тебя есть range(start, stop, eps).
с самим алгоритмом бинарного поиска знаком?
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
ну кстати нам никто не гарантирует, что корни этого уравнения будут упорядочены
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
проверь циклом. заведи переменную prev, пробегись по диапозону, сравнивая предыдущий результат с текущим. если будет хоть одна итерация, когда prev > current, значит не упорядочено
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
но ещё стоит проверить и в другую сторону, может там будет наоборот от большего к меньшему
источник

fl

first last in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
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]);    #вызываю функцию для промежутка со сменой знака, которая почему-то не работает
источник

fl

first last in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Это для задачи В, буду рад помощи.
источник

fl

first last in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Вот что выводит: 0.07700000000000005 - один из трёх корней, по идее вообще должен выводить 0.077
источник

AA

AА AА in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Ну так это точность вроде как раз
источник

fl

first last in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Но границы смены знака определяет правильно, в ответах посмотрел
источник

fl

first last in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Так он 1 корень находит всего
источник

fl

first last in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Вот массив:
источник