![]() |
![]() |
||||
![]() | |||||
![]() |
![]() АЛГОРИТМЫ Новости Рассылка новостей Форум AlgoPascal Редактор блок-схем Статьи О сайте Контакты |
![]() |
![]() Корень уравнения F(x) = 0 методом дихотомииПроцедура находит корень уравнения F(x) = 0, где F(x) - непрерывная на отрезке [a,b] функция, удовлетворяющая условию F(a)F(b) < 0. Для нахождения корня отрезок [a,b] делится пополам и выбирается тот полуинтервал, на концах которого знаки F(x) разные. Затем процесс деления повторяется до тех пор, пока длина интервала не станет меньше e. Если начальное условие F(a)F(b) < 0 не выполнено, то процедура прекращает работу и переменной HasRoot присваивается значение False. Если корень найден, то HasRoot становится равным True, и корень находится в переменной x. Если нашли ошибку в алгоритме - сообщите! Реализации алгоритма на различных языках:![]() ![]() ![]() Блоксхемы:![]() ![]() Реализация алгоритма на AlgoPascal:unit SearchRootDichotomyUnit; declaration function F(X:Real):Real; interface SearchRootDichotomy; implementation (* Корень уравнения метод половинного деления. procedure SearchRootDichotomy(e:real,a,b:real; var HasRoot:boolean, x:real) Процедура находит корень уравнения F(x)=0, где F(x) - непрерывная на отрезке [a,b] функция, удовлетворяющая условию F(a)F(b)<0. Для нахождения корня отрезок [a,b] делится пополам и выбирается тот полуинтервал на концах которого знаки F(x) разные. Затем процесс деления повторяется до тех пор, пока длина интервала не станет меньше e. Если начальное условие F(a)F(b) < 0 не выполнено, то процедура прекращает работу и переменной HasRoot присваивается значение False. Если корень найден, то HasRoot=True, и корень находится в переменной x. *) procedure SearchRootDichotomy( a : Real; b : Real; const e : Real; out HasRoot:Boolean; out x : Real); var f1 : Real; f2 : Real; fx : Real; begin f1:=F(a); f2:=F(b); if f1*f2>0 then begin HasRoot:=False; end else begin HasRoot:=True; repeat x:=(a+b)/2; fx:=F(x); if f1*fx>0 then begin a:=x; f1:=fx; end else begin b:=x; f2:=fx; end; until not(AbsReal(a-b)>e); x:=(a+b)/2; end; end; end. |
![]() |
|
|
![]() |