Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

КТЕ / Laby Maple / 3

.2.pdf
Скачиваний:
10
Добавлен:
14.06.2020
Размер:
782.71 Кб
Скачать

Метод бисекции

Материал из Википедии — свободной энциклопедии

Метод бисекции или метод деления отрезка пополам — простейший численный метод для решения нелинейных уравнений вида 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

Соседние файлы в папке Laby Maple