КТЕ / Laby Maple / 3
.2.pdf
Метод бисекции
Материал из Википедии — свободной энциклопедии
Метод бисекции или метод деления отрезка пополам — простейший численный метод для решения нелинейных уравнений вида f(x)=0. Предполагается только непрерывность функции f(x). Поиск основывается на теореме о промежуточных значениях.
Содержание
1Обоснование
2Описание алгоритма
3Псевдокод
4Поиск значения корня монотонной дискретной функции
5См. также
6Примечания
7 Литература
8Ссылки
Обоснование
Алгоритм основан на следующем следствии из теоремы Больцано — Коши:
Пусть непрерывная функция |
, тогда, если |
, то |
. |
Таким образом, если мы ищем ноль, то на концах отрезка функция должна быть противоположных знаков. Разделим отрезок пополам и возьмём ту из половинок, на концах которой функция по-прежнему принимает значения противоположных знаков. Если значение функции в серединной точке оказалось искомым нулём, то процесс завершается.
Точность вычислений задаётся одним из двух способов:
1. |
по оси , что ближе к условию |
из описания алгоритма; или |
2. |
, по оси , что может оказаться удобным в некоторых случаях. |
|
Процедуру следует продолжать до достижения заданной точности.
Для поиска произвольного значения достаточно вычесть из значения функции искомое значение и искать ноль получившейся функции.
Стр. 1 из 5 |
01.11.2017 0:10 |
Описание алгоритма
Задача заключается в нахождении корней нелинейного уравнения
Для начала итераций необходимо знать отрезок |
значений , на концах которого функция |
принимает значения противоположных знаков. |
|
Противоположность знаков значений функции на концах отрезка можно определить множеством способов. Один из множества этих способов — умножение значений функции на концах отрезка и определение знака произведения путём сравнения результата умножения с нулём:
в действительных вычислениях такой способ проверки противоположности знаков при крутых функциях приводит к преждевременному переполнению.
Для устранения переполнения и уменьшения затрат времени, то есть для увеличения быстродействия, на некоторых программно-компьютерных комплексах противоположность знаков значений функции на концах отрезка нужно определять по формуле:
так как одна операция сравнения двух знаков двух чисел требует меньшего времени, чем две операции: умножение двух чисел (особенно с плавающей запятой и двойной длины) и сравнение результата с нулём. При данном сравнении, значения функции в точках и можно не вычислять, достаточно вычислить только знаки функции 
в этих точках, что требует меньшего машинного времени.
Из непрерывности функции |
и условия (2.2) следует, что на отрезке |
существует хотя бы один |
|
корень уравнения (в случае не монотонной функции |
функция имеет несколько корней и метод |
||
приводит к нахождению одного из них). |
|
|
|
Найдём значение
в середине отрезка:
в действительных вычислениях, для уменьшения числа операций, в начале, вне цикла, вычисляют длину отрезка по формуле:
а в цикле вычисляют длину очередных новых отрезков по формуле: |
|
и новую середину по |
|||
формуле: |
|
|
|
|
|
Вычислим значение функции |
в середине отрезка |
: |
|
|
|
Если |
или, в действительных вычислениях, |
, где |
— заданная точность |
||
по оси , то корень найден. |
|
|
, то разобьём отрезок |
||
Иначе |
или, в действительных вычислениях, |
||||
|
на два равных отрезка: |
и |
. |
|
|
Теперь найдём новый отрезок, на котором функция меняет знак: |
|
|
|||
Стр. 2 из 5 |
|
|
|
|
01.11.2017 0:10 |
Если значения функции на концах отрезка имеют противоположные знаки на левом отрезке, |
|
|||||||
левого отрезка |
или |
|
|
, то, соответственно, корень находится внутри |
||||
|
. Тогда возьмём левый отрезок присвоением |
, и повторим описанную |
||||||
процедуру до достижения требуемой точности |
по оси . |
|
|
|
||||
Иначе значения функции на концах отрезка имеют противоположные знаки на правом отрезке, |
|
|||||||
правого отрезка |
или |
|
|
, то, соответственно, корень находится внутри |
||||
|
. Тогда возьмём правый отрезок присвоением |
, и повторим |
|
|||||
описанную процедуру до достижения требуемой точности |
по оси . |
|
|
|||||
За количество итераций |
деление пополам осуществляется раз, поэтому длина конечного отрезка в |
|||||||
раз меньше длины исходного отрезка. |
|
|
|
|
||||
Существует похожий метод, но с критерием останова вычислений |
по оси |
[1], в этом методе вычисления |
||||||
продолжаются до тех пор, пока, после очередного деления пополам, новый отрезок больше заданной |
||||||||
точности по оси : |
|
|
. В этом методе отрезок на оси |
может достичь заданной величины , а |
||||
значения функций |
(особенно крутых) на оси |
могут очень далеко отстоять от нуля, при пологих же |
||||||
функциях |
этот метод приводит к большому числу лишних вычислений. |
|
|
|||||
В дискретных функциях |
|
и |
— это номера элементов массива, которые не могут быть дробными, |
|||||
и, в случае второго критерия останова вычислений, разность |
не может быть меньше |
. |
||||||
Псевдокод
Пусть
xn — начало отрезка по х; xk — конец отрезка по х; xi — середина отрезка по х;
epsy — требуемая точность вычислений по y (заданное приближение интервала [xn; xk] : xk — xn к нулю).
Тогда алгоритм метода бисекции можно записать в псевдокоде следующим образом:
1.Начало.
2.Ввод xn, xk, epsy.
3.Если F(xn) = 0, то Вывод (корень уравнения — xn).
4.Если F(xk) = 0, то Вывод (корень уравнения — xk).
5.Пока xk — xn > epsy повторять:
6.dx := (xk — xn)/2
7.xi := xn + dx;
8.если sign(F(xn)) ≠ sign(F(xi)), то xk := xi;
9.иначе xn := xi.
10.конец повторять
11.Вывод (Найден корень уравнения — xi с точностью по y — epsy).
12.Конец.
Поиск значения корня монотонной дискретной функции
Поиск наиболее приближённого к корню значения в монотонной дискретной функции, заданной таблично и записанной в массиве, заключается в разбиении массива пополам (на две части), выборе из двух новых
Стр. 3 из 5 |
01.11.2017 0:10 |
частей той части, в которой значения элементов массива меняют знак путём сравнения знаков срединного элемента массива со знаком граничного значения и повторении алгоритма для половины в которой значения элементов массива меняют знак.
Пусть переменные леваяГраница и праваяГраница содержат, соответственно, левую левГран и правую правГран границы массива, в которой находится приближение к корню. Исследование начинается с разбиения массива пополам (на две части) путём нахождения номера среднего элемента массива середина.
Если знаки значений массива массив[леваяГраница] и массив[середина] противоположны, то приближение к корню ищут в левой половине массива, то есть значением праваяГраница становится середина и на следующей итерации исследуется только левая половина массива. Если знаки значений массив[леваяГраница] и массив[середина] одинаковы, то осуществляется переход к поиску приближения к корню в правой половине массива, то есть значением переменной леваяГраница становится середина и на следующей итерации исследуется только правая половина массива. Т.о., в результате каждой проверки область поиска сужается вдвое.
Например, если длина массива равна 1023, то после первого сравнения область сужается до 511 элементов, а после второго — до 255. Т.о. для поиска приближения к корню в массиве из 1023 элементов достаточно 10 проходов (итераций).
Псевдокод:
леваяГраница = левГран праваяГраница = правГран
while (праваяГраница - леваяГраница > 1) { |
|
|
длинаОтрезка = правГран - левГран |
|
половинаОтрезка = int(длинаОтрезка / 2) |
|
середина = леваяГраница + половинаОтрезка |
|
if (sign(массив[леваяГраница]) ≠ sign(массив[середина])) |
|
праваяГраница = середина |
|
else |
} |
леваяГраница = середина |
printf середина |
|
См. также
Линейный поиск Двоичный поиск Метод дихотомии Метод золотого сечения Троичный поиск
Метод Ньютона
Примечания
1.↑ Ю. Губарь, Курс "Введение в математическое моделирование" Лекция 4: Численные методы решения нелинейных уравнений (http://www.intuit.ru/studies/courses/2260/156/lecture/2284?page=2#sect2): Метод половинного деления // Интуит.ру, 15.03.2007
Волков Е. А. Глава 4. Методы решения нелинейных уравнений и систем. § 26. Метод деления отрезка пополам // Численные методы. — Учеб. пособие для вузов. — 2-е изд., испр.. — М.: Наука, 1987. —
Стр. 4 из 5 |
01.11.2017 0:10 |
С. 190. — 248 с.
Ссылки
Решение уравнений методом бисекции онлайн (http://millerbird.site11.com/Math/bisection.php)
Метод бисекции (http://twt.mpei.ac.ru/mas/worksheets/Bisection.mcd) на сервере применения Mathcad. Метод бисекции (http://numericalmethods.eng.usf.edu/topics/bisection_method.html) Mathcad, Maple, Matlab, Mathematica
Использование метода бисекции в программировании (http://isoelectric.ovh.org/) свободно распространяемая программа для вычисления изоэлектрической точки.
Источник — «https://ru.wikipedia.org/w/index.php?title=Метод_бисекции&oldid=84395445»
Эта страница последний раз была отредактирована 21 марта 2017 в 08:05.
Текст доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.
Wikipedia® — зарегистрированный товарный знак некоммерческой организации Wikimedia Foundation, Inc. Свяжитесь с нами
Стр. 5 из 5 |
01.11.2017 0:10 |
