Алгоритмы и структуры данных · 13 из 17
Где кривая пересекает ноль
Кружку нужен корень уравнения, которое не решается формулой. Аркадий Семёнович показывает старый способ: известно, что на левом краю отрезка функция ниже нуля, а на правом выше, — значит, ноль где-то между. Делим отрезок пополам и оставляем ту половину, где знак по-прежнему меняется. Каждый шаг вдвое сужает поиск.
Что сделать
Найдите, где кривая пересекает ноль, — старым способом деления отрезка пополам.
Что приходит
f— функция одного числа; на концах отрезка — разного знакаaиb— концы отрезка,a < btochnost— до какой длины сузить отрезок
Что вернуть
Середину последнего отрезка, когда он стал не длиннее tochnost: каждый раз остаётся половина, где знак f меняется; f(m) == 0 — сразу m.
Допишите функцию koren в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
с графикой когда тесты пройдут, ответ вашей функции нарисуется · все задачи с графикой
f(x) = x · x − 2 на отрезке от 0 до 2. Середина 1: f(1) = −1, знак меняется справа — остаётся [1, 2]. Середина 1,5: f = 0,25 — остаётся [1, 1,5]. И так, пока отрезок не станет короче 0,001: ответ около 1.414.
Функция принимает функцию f, концы отрезка a < b и точность (число больше нуля). Гарантируется, что f(a) и f(b) разного знака. Пока длина отрезка больше точности: берётся середина m; если f(m) равно нулю — m и есть ответ; иначе остаётся та половина, на концах которой знаки f разные. Возвращает середину последнего отрезка. Перебирать отрезок мелким шагом нельзя: функция может быть дорогой, и число её вызовов проверяется.
Образцовый тест целиком
def f(x):
return x * x - 2
koren(f, 0, 2, 0.001)
1.41455078125
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.