Метод бисекции — Bisection method
В математика, то метод деления пополам это метод поиска корней это относится к любому непрерывные функции для которого известны два значения с противоположными знаками. Метод состоит из многократных деление пополам то интервал определяется этими значениями, а затем выбирает подинтервал, в котором функция меняет знак и, следовательно, должна содержать корень. Это очень простой и надежный метод, но он также относительно медленный. Из-за этого его часто используют для получения грубого приближения к решению, которое затем используется в качестве отправной точки для более быстро сходящихся методов. [1] Метод также называют уменьшение интервала вдвое метод [2] то метод двоичного поиска, [3] или метод дихотомии. [4]
Для многочлены существуют более сложные методы проверки существования корня в интервале (Правило знаков Декарта, Теорема Штурма, Теорема Будана ). Они позволяют распространить метод деления пополам на эффективные алгоритмы нахождения всех действительных корней многочлена; увидеть Изоляция реального корня.
Содержание
Метод
Метод применим для численного решения уравнения ж(Икс) = 0 для настоящий переменная Икс, где ж это непрерывная функция определенный на интервале [а, б] и где ж(а) и ж(б) имеют противоположные знаки. В таком случае а и б называются скобками для корня, поскольку теорема о промежуточном значении, непрерывная функция ж должен иметь хотя бы один корень в интервале (а, б).
На каждом этапе метод делит интервал пополам, вычисляя среднюю точку c = (а+б) / 2 интервала и значение функции ж(c) в таком случае. Если только c сам по себе является корнем (что очень маловероятно, но возможно), теперь есть только две возможности: либо ж(а) и ж(c) имеют противоположные знаки и заключают в скобки корень, или ж(c) и ж(б) имеют противоположные знаки и заключают в скобки корень. [5] Метод выбирает подинтервал, который гарантированно будет скобкой, в качестве нового интервала, который будет использоваться на следующем шаге. Таким образом, интервал, содержащий ноль ж уменьшается по ширине на 50% на каждом шаге. Процесс продолжается до тех пор, пока интервал не станет достаточно малым.
Явно, если ж(а) и ж(c) имеют противоположные знаки, то метод устанавливает c как новое значение для б, и если ж(б) и ж(c) имеют противоположные знаки, то наборы методов c как новый а. (Если ж(c) = 0, тогда c можно принять за решение, и процесс останавливается.) В обоих случаях новый ж(а) и ж(б) имеют противоположные знаки, поэтому метод применим к этому меньшему интервалу. [6]
Итерационные задачи
Входными данными для метода является непрерывная функция ж, интервал [а, б], а значения функции ж(а) и ж(б). Значения функции имеют противоположный знак (в пределах интервала есть хотя бы одно пересечение нуля). Каждая итерация выполняет следующие шаги:
- Рассчитать c, середина интервала, c = а + б / 2 .
- Вычислить значение функции в средней точке, ж(c).
- Если сходимость удовлетворительная (т. Е. c — а достаточно мало, либо |ж(c) | достаточно мало), возврат c и прекратите повторение.
- Изучите знак ж(c) и замените либо (а, ж(а)) или (б, ж(б)) с участием (c, ж(c)) так, чтобы в новом интервале был переход через нуль.
При реализации метода на компьютере могут возникнуть проблемы с конечной точностью, поэтому часто требуются дополнительные тесты сходимости или ограничения на количество итераций. Несмотря на то что ж является непрерывным, конечная точность может помешать нулевому значению функции. Например, рассмотрим ж(Икс) = Икс — π ; никогда не будет конечного представления Икс что дает ноль. Кроме того, разница между а и б ограничено точностью с плавающей запятой; т.е. как разница между а и б уменьшается, в какой-то момент середина [а, б] будет численно идентичен (в пределах точности с плавающей запятой) либо а или б..
Метод бисекции
Метод бисекции или метод деления отрезка пополам — простейший численный метод приближённого нахождения корня уравнения.
Калькулятор, который находит приближенное решение уравнения методом бисекции или методом деления отрезка пополам. Небольшая теория под калькулятором.
Метод бисекции
Метод бисекции
Существует довольно очевидная теорема: «Если непрерывная функция на концах некоторого интервала имеет значения разных знаков, то внутри этого интервала у нее есть корень (как минимум, один, но может быть и несколько)». На базе этой теоремы построено несколько методов численного нахождения приближенного значения корня функции. Обобщенно все эти методы называются методами дихотомии, т. е. методами деления отрезка на две части (необязательно равные).
Здесь уже были рассмотрены Метод хорд и Метод секущих, теперь дошла очередь и до самого простого метода дихотомии, называемого методом бисекции, или методом деления отрезка пополам. Как следует из названия, именно в этом методе отрезок делится каждый раз на две равные части. Середина отрезка считается следующим приближением значения корня. Вычисляется значение функции в этой точке, и, если критерий останова не достигнут, выбирается новый интервал. Интервал выбирается таким образом, чтобы на его концах значения функции по прежнему имели разный знак, то есть чтобы он по прежнему содержал корень. Такой подход обеспечивает гарантированную сходимость метода независимо от сложности функции — и это весьма важное свойство. Недостатком метода является то же самое — метод никогда не сойдется быстрее, т. е. сходимость метода всегда равна сходимости в наихудшем случае.
Итерационная формула проста:
Метод бисекции является двухшаговым, то есть новое приближение определяется двумя предыдущими итерациями. Поэтому необходимо задавать два начальных приближения корня.
Метод требует, чтобы начальные точки были выбраны по разные стороны от корня (то есть корень содержался в выбранном интервале).
В качестве критерия останова берут один из следующих:
— значение функции на данной итерации стало меньше заданого ε.
— изменение хk в результате итерации стало меньше заданого ε. Поскольку интервал на каждом шаге уменьшается в два раза, вместо проверки x можно рассчитать количество требуемых итераций.
Метод бисекции
Метод бисекции или метод деления отрезка пополам — простейший численный метод для решения нелинейных уравнений вида f(x)=0. Предполагается только непрерывность функции f(x). Поиск основывается на теореме о промежуточных значениях.
Содержание
Обоснование
Алгоритм основан на следующем следствии из теоремы Больцано — Коши:
| Пусть непрерывная функция <math>f(x)\in\mathrm |
Таким образом, если мы ищем ноль, то на концах отрезка функция должна быть противоположных знаков. Разделим отрезок пополам и возьмём ту из половинок, на концах которой функция по-прежнему принимает значения противоположных знаков. Если значение функции в серединной точке оказалось искомым нулём, то процесс завершается.
Точность вычислений задаётся одним из двух способов:
- <math>\varepsilon_
</math> по оси <math>y</math>, что ближе к условию <math>f(x)=0</math> из описания алгоритма; или - <math>\varepsilon_x</math>, по оси <math>x</math>, что может оказаться удобным в некоторых случаях.
Процедуру следует продолжать до достижения заданной точности.
Для поиска произвольного значения достаточно вычесть из значения функции искомое значение и искать ноль получившейся функции.
Описание алгоритма
Задача заключается в нахождении корней нелинейного уравнения
Для начала итераций необходимо знать отрезок <math>[x_L,x_R]</math> значений <math>x</math>, на концах которого функция принимает значения противоположных знаков.
Противоположность знаков значений функции на концах отрезка можно определить множеством способов. Один из множества этих способов — умножение значений функции на концах отрезка и определение знака произведения путём сравнения результата умножения с нулём:
<math>f(x_L)\cdot f(x_R)<0, \qquad ( 2.1 )</math>
в действительных вычислениях такой способ проверки противоположности знаков при крутых функциях приводит к преждевременному переполнению.
Для устранения переполнения и уменьшения затрат времени, то есть для увеличения быстродействия, на некоторых программно-компьютерных комплексах противоположность знаков значений функции на концах отрезка нужно определять по формуле:
<math>sign(f(x_L)) \ne sign(f(x_R)), \qquad ( 2.2 )</math>
так как одна операция сравнения двух знаков двух чисел требует меньшего времени, чем две операции: умножение двух чисел (особенно с плавающей запятой и двойной длины) и сравнение результата с нулём. При данном сравнении, значения функции <math>f(x)</math> в точках <math>x_L</math> и <math>x_R</math> можно не вычислять, достаточно вычислить только знаки функции <math>f(x)</math> в этих точках, что требует меньшего машинного времени.
Из непрерывности функции <math>f(x)</math> и условия (2.2) следует, что на отрезке <math>[x_L,x_R]</math> существует хотя бы один корень уравнения (в случае не монотонной функции <math>f(x)</math> функция имеет несколько корней и метод приводит к нахождению одного из них).
Найдём значение <math>x</math> в середине отрезка:
в действительных вычислениях, для уменьшения числа операций, в начале, вне цикла, вычисляют длину отрезка по формуле:
а в цикле вычисляют длину очередных новых отрезков по формуле: <math>x_D=x_D/2</math> и новую середину по формуле:
Вычислим значение функции <math>f(x_M)</math> в середине отрезка <math>x_M</math>:
- Если <math>f(x_M)=0</math> или, в действительных вычислениях, <math>|f(x_M)|\leq\varepsilon_
</math>, где <math>\varepsilon_ </math> — заданная точность по оси <math>y</math>, то корень найден. - Иначе <math>f(x_M)\ne 0</math> или, в действительных вычислениях, <math>|f(x_M)|>\varepsilon_
</math>, то разобьём отрезок <math>[x_L,x_R]</math> на два равных отрезка: <math>[x_L,x_M]</math> и <math>[x_M,x_R]</math>.
Теперь найдём новый отрезок, на котором функция меняет знак:
- Если значения функции на концах отрезка имеют противоположные знаки на левом отрезке, <math>f(x_L)\cdot f(x_M)<0</math> или <math>sign(f(x_L)) \ne sign(f(x_M))</math>, то, соответственно, корень находится внутри левого отрезка <math>[x_L,x_M]</math>. Тогда возьмём левый отрезок присвоением <math>x_R=x_M</math>, и повторим описанную процедуру до достижения требуемой точности <math>\varepsilon_
</math> по оси <math>y</math>. - Иначе значения функции на концах отрезка имеют противоположные знаки на правом отрезке, <math>f(x_M)\cdot f(x_R)<0</math> или <math>sign(f(x_M)) \ne sign(f(x_R))</math>, то, соответственно, корень находится внутри правого отрезка <math>[x_M,x_R]</math>. Тогда возьмём правый отрезок присвоением <math>x_L=x_M</math>, и повторим описанную процедуру до достижения требуемой точности <math>\varepsilon_
</math> по оси <math>y</math>.
За количество итераций <math>N</math> деление пополам осуществляется <math>N</math> раз, поэтому длина конечного отрезка в <math>2^N</math> раз меньше длины исходного отрезка.
Существует похожий метод, но с критерием останова вычислений <math>\varepsilon_x</math> по оси <math>x</math> [1] , в этом методе вычисления продолжаются до тех пор, пока, после очередного деления пополам, новый отрезок больше заданной точности по оси <math>x</math>: <math>(x_R-x_L)>\varepsilon_x</math>. В этом методе отрезок на оси <math>x</math> может достичь заданной величины <math>\varepsilon_x</math>, а значения функций <math>f(x)</math> (особенно крутых) на оси <math>y</math> могут очень далеко отстоять от нуля, при пологих же функциях <math>f(x)</math> этот метод приводит к большому числу лишних вычислений.
В дискретных функциях <math>x_L, x_M</math> и <math>x_R</math> — это номера элементов массива, которые не могут быть дробными, и, в случае второго критерия останова вычислений, разность <math>(x_R-x_L)</math> не может быть меньше <math>\varepsilon_x=1</math>.
Псевдокод
- xn — начало отрезка по х;
- xk — конец отрезка по х;
- xi — середина отрезка по х;
- epsy — требуемая точность вычислений по y (заданное приближение интервала [a; b] : b — a к нулю).
Тогда алгоритм метода бисекции можно записать в псевдокоде следующим образом:
- Начало.
- Ввод xn, xk, epsy.
- Если F(xn) = 0, то Вывод (корень уравнения — xn).
- Если F(xk) = 0, то Вывод (корень уравнения — xk).
- dx := xk — xn.
- Пока b — a > epsy повторять:
- dx := dx / 2;
- xi := xn + dx;
- если sign(F(xn)) ≠ sign(F(xi)), то xk := xi;
- иначе xn := xi.
- конец повторять
- Вывод (Найден корень уравнения — xi с точностью по y — epsy).
- Конец.
Поиск значения корня монотонной дискретной функции
Поиск наиболее приближённого к корню значения в монотонной дискретной функции, заданной таблично и записанной в массиве, заключается в разбиении массива пополам (на две части), выборе из двух новых частей той части, в которой значения элементов массива меняют знак путём сравнения знаков срединного элемента массива со знаком граничного значения и повторении алгоритма для половины в которой значения элементов массива меняют знак.
Пусть переменные леваяГраница и праваяГраница содержат, соответственно, левую левГран и правую правГран границы массива, в которой находится приближение к корню. Исследование начинается с разбиения массива пополам (на две части) путём нахождения номера среднего элемента массива середина.
Если знаки значений массива массив[леваяГраница] и массив[середина] противоположны, то приближение к корню ищут в левой половине массива, то есть значением праваяГраница становится середина и на следующей итерации исследуется только левая половина массива. Если знаки значений массив[леваяГраница] и массив[середина] одинаковы, то осуществляется переход к поиску приближения к корню в правой половине массива, то есть значением переменной леваяГраница становится середина и на следующей итерации исследуется только правая половина массива. Т.о., в результате каждой проверки область поиска сужается вдвое.
Например, если длина массива равна 1023, то после первого сравнения область сужается до 511 элементов, а после второго — до 255. Т.о. для поиска приближения к корню в массиве из 1023 элементов достаточно 10 проходов (итераций).
См. также
- Линейный поиск
- Двоичный поиск
- Метод дихотомии
- Метод золотого сечения
- Троичный поиск
- Метод Ньютона
Напишите отзыв о статье «Метод бисекции»
Примечания
- ↑ Ю. Губарь, [www.intuit.ru/studies/courses/2260/156/lecture/2284?page=2#sect2 Курс «Введение в математическое моделирование» Лекция 4: Численные методы решения нелинейных уравнений]: Метод половинного деления // Интуит.ру, 15.03.2007
Литература
- Волков Е. А. Глава 4. Методы решения нелинейных уравнений и систем. § 26. Метод деления отрезка пополам // Численные методы. — Учеб. пособие для вузов. — 2-е изд., испр.. — М .: Наука, 1987. — С. 190. — 248 с.
Ссылки
- [millerbird.site11.com/Math/bisection.php Решение уравнений методом бисекции онлайн]
- [twt.mpei.ac.ru/mas/worksheets/Bisection.mcd Метод бисекции] на сервере применения Mathcad.
- [numericalmethods.eng.usf.edu/topics/bisection_method.html Метод бисекции] Mathcad, Maple, Matlab, Mathematica
- [isoelectric.ovh.org/ Использование метода бисекции в программировании] свободно распространяемая программа для вычисления изоэлектрической точки.
Отрывок, характеризующий Метод бисекции
Видно, Пфуль, уже всегда готовый на ироническое раздражение, нынче был особенно возбужден тем, что осмелились без него осматривать его лагерь и судить о нем. Князь Андрей по одному короткому этому свиданию с Пфулем благодаря своим аустерлицким воспоминаниям составил себе ясную характеристику этого человека. Пфуль был один из тех безнадежно, неизменно, до мученичества самоуверенных людей, которыми только бывают немцы, и именно потому, что только немцы бывают самоуверенными на основании отвлеченной идеи – науки, то есть мнимого знания совершенной истины. Француз бывает самоуверен потому, что он почитает себя лично, как умом, так и телом, непреодолимо обворожительным как для мужчин, так и для женщин. Англичанин самоуверен на том основании, что он есть гражданин благоустроеннейшего в мире государства, и потому, как англичанин, знает всегда, что ему делать нужно, и знает, что все, что он делает как англичанин, несомненно хорошо. Итальянец самоуверен потому, что он взволнован и забывает легко и себя и других. Русский самоуверен именно потому, что он ничего не знает и знать не хочет, потому что не верит, чтобы можно было вполне знать что нибудь. Немец самоуверен хуже всех, и тверже всех, и противнее всех, потому что он воображает, что знает истину, науку, которую он сам выдумал, но которая для него есть абсолютная истина. Таков, очевидно, был Пфуль. У него была наука – теория облического движения, выведенная им из истории войн Фридриха Великого, и все, что встречалось ему в новейшей истории войн Фридриха Великого, и все, что встречалось ему в новейшей военной истории, казалось ему бессмыслицей, варварством, безобразным столкновением, в котором с обеих сторон было сделано столько ошибок, что войны эти не могли быть названы войнами: они не подходили под теорию и не могли служить предметом науки.
В 1806 м году Пфуль был одним из составителей плана войны, кончившейся Иеной и Ауерштетом; но в исходе этой войны он не видел ни малейшего доказательства неправильности своей теории. Напротив, сделанные отступления от его теории, по его понятиям, были единственной причиной всей неудачи, и он с свойственной ему радостной иронией говорил: «Ich sagte ja, daji die ganze Geschichte zum Teufel gehen wird». [Ведь я же говорил, что все дело пойдет к черту (нем.) ] Пфуль был один из тех теоретиков, которые так любят свою теорию, что забывают цель теории – приложение ее к практике; он в любви к теории ненавидел всякую практику и знать ее не хотел. Он даже радовался неуспеху, потому что неуспех, происходивший от отступления в практике от теории, доказывал ему только справедливость его теории.
Он сказал несколько слов с князем Андреем и Чернышевым о настоящей войне с выражением человека, который знает вперед, что все будет скверно и что даже не недоволен этим. Торчавшие на затылке непричесанные кисточки волос и торопливо прилизанные височки особенно красноречиво подтверждали это.
Он прошел в другую комнату, и оттуда тотчас же послышались басистые и ворчливые звуки его голоса.
Не успел князь Андрей проводить глазами Пфуля, как в комнату поспешно вошел граф Бенигсен и, кивнув головой Болконскому, не останавливаясь, прошел в кабинет, отдавая какие то приказания своему адъютанту. Государь ехал за ним, и Бенигсен поспешил вперед, чтобы приготовить кое что и успеть встретить государя. Чернышев и князь Андрей вышли на крыльцо. Государь с усталым видом слезал с лошади. Маркиз Паулучи что то говорил государю. Государь, склонив голову налево, с недовольным видом слушал Паулучи, говорившего с особенным жаром. Государь тронулся вперед, видимо, желая окончить разговор, но раскрасневшийся, взволнованный итальянец, забывая приличия, шел за ним, продолжая говорить:
– Quant a celui qui a conseille ce camp, le camp de Drissa, [Что же касается того, кто присоветовал Дрисский лагерь,] – говорил Паулучи, в то время как государь, входя на ступеньки и заметив князя Андрея, вглядывался в незнакомое ему лицо.
– Quant a celui. Sire, – продолжал Паулучи с отчаянностью, как будто не в силах удержаться, – qui a conseille le camp de Drissa, je ne vois pas d’autre alternative que la maison jaune ou le gibet. [Что же касается, государь, до того человека, который присоветовал лагерь при Дрисее, то для него, по моему мнению, есть только два места: желтый дом или виселица.] – Не дослушав и как будто не слыхав слов итальянца, государь, узнав Болконского, милостиво обратился к нему:
– Очень рад тебя видеть, пройди туда, где они собрались, и подожди меня. – Государь прошел в кабинет. За ним прошел князь Петр Михайлович Волконский, барон Штейн, и за ними затворились двери. Князь Андрей, пользуясь разрешением государя, прошел с Паулучи, которого он знал еще в Турции, в гостиную, где собрался совет.
Князь Петр Михайлович Волконский занимал должность как бы начальника штаба государя. Волконский вышел из кабинета и, принеся в гостиную карты и разложив их на столе, передал вопросы, на которые он желал слышать мнение собранных господ. Дело было в том, что в ночь было получено известие (впоследствии оказавшееся ложным) о движении французов в обход Дрисского лагеря.
Первый начал говорить генерал Армфельд, неожиданно, во избежание представившегося затруднения, предложив совершенно новую, ничем (кроме как желанием показать, что он тоже может иметь мнение) не объяснимую позицию в стороне от Петербургской и Московской дорог, на которой, по его мнению, армия должна была, соединившись, ожидать неприятеля. Видно было, что этот план давно был составлен Армфельдом и что он теперь изложил его не столько с целью отвечать на предлагаемые вопросы, на которые план этот не отвечал, сколько с целью воспользоваться случаем высказать его. Это было одно из миллионов предположений, которые так же основательно, как и другие, можно было делать, не имея понятия о том, какой характер примет война. Некоторые оспаривали его мнение, некоторые защищали его. Молодой полковник Толь горячее других оспаривал мнение шведского генерала и во время спора достал из бокового кармана исписанную тетрадь, которую он попросил позволения прочесть. В пространно составленной записке Толь предлагал другой – совершенно противный и плану Армфельда и плану Пфуля – план кампании. Паулучи, возражая Толю, предложил план движения вперед и атаки, которая одна, по его словам, могла вывести нас из неизвестности и западни, как он называл Дрисский лагерь, в которой мы находились. Пфуль во время этих споров и его переводчик Вольцоген (его мост в придворном отношении) молчали. Пфуль только презрительно фыркал и отворачивался, показывая, что он никогда не унизится до возражения против того вздора, который он теперь слышит. Но когда князь Волконский, руководивший прениями, вызвал его на изложение своего мнения, он только сказал:
– Что же меня спрашивать? Генерал Армфельд предложил прекрасную позицию с открытым тылом. Или атаку von diesem italienischen Herrn, sehr schon! [этого итальянского господина, очень хорошо! (нем.) ] Или отступление. Auch gut. [Тоже хорошо (нем.) ] Что ж меня спрашивать? – сказал он. – Ведь вы сами знаете все лучше меня. – Но когда Волконский, нахмурившись, сказал, что он спрашивает его мнение от имени государя, то Пфуль встал и, вдруг одушевившись, начал говорить:
– Все испортили, все спутали, все хотели знать лучше меня, а теперь пришли ко мне: как поправить? Нечего поправлять. Надо исполнять все в точности по основаниям, изложенным мною, – говорил он, стуча костлявыми пальцами по столу. – В чем затруднение? Вздор, Kinder spiel. [детские игрушки (нем.) ] – Он подошел к карте и стал быстро говорить, тыкая сухим пальцем по карте и доказывая, что никакая случайность не может изменить целесообразности Дрисского лагеря, что все предвидено и что ежели неприятель действительно пойдет в обход, то неприятель должен быть неминуемо уничтожен.
Паулучи, не знавший по немецки, стал спрашивать его по французски. Вольцоген подошел на помощь своему принципалу, плохо говорившему по французски, и стал переводить его слова, едва поспевая за Пфулем, который быстро доказывал, что все, все, не только то, что случилось, но все, что только могло случиться, все было предвидено в его плане, и что ежели теперь были затруднения, то вся вина была только в том, что не в точности все исполнено. Он беспрестанно иронически смеялся, доказывал и, наконец, презрительно бросил доказывать, как бросает математик поверять различными способами раз доказанную верность задачи. Вольцоген заменил его, продолжая излагать по французски его мысли и изредка говоря Пфулю: «Nicht wahr, Exellenz?» [Не правда ли, ваше превосходительство? (нем.) ] Пфуль, как в бою разгоряченный человек бьет по своим, сердито кричал на Вольцогена:
– Nun ja, was soll denn da noch expliziert werden? [Ну да, что еще тут толковать? (нем.) ] – Паулучи и Мишо в два голоса нападали на Вольцогена по французски. Армфельд по немецки обращался к Пфулю. Толь по русски объяснял князю Волконскому. Князь Андрей молча слушал и наблюдал.
6.3. Методы бисекции и regula falsi#
Для непрерывной функции известно, что, имея разные знаки \(f(a)f(b)<0\) на концах отрезка \([a, b]\) , функция \(f\) имеет также корень \(f(x^*)=0\) на этом отрезке \(x^* \in [a, b]\) .
Метод бисекции пользуется этим утверждением. Разобъём исходный отрезок \([x_1, x_2]\) пополам точкой \(x_3 = (x_1 + x_2) / 2\) . Тогда, если \(x_3\) не является корнем уравнения, то \(f\) имеет разные знаки либо на концах отрезка \([x_1, x_3]\) , либо на концах отрезка \([x_3, x_2]\) . Выберем в качестве нового отрезка тот, на котором функция имеет разные знаки и продолжим процедуру.
Метод бисекции гарантирует локализацию корня. Поскольку за итерацию длина отрезка уменьшается вдвое \(\Delta_
Общая формула длины отрезка имеет вид
Тогда, если потребовать точность найденного корня в виде
то получим необходимое число итераций
Метод бисекции один из немногих, в которых известно наперёд число итераций, необходимое для достижения заданной точности.