![]() |
![]() |
||||
![]() | |||||
![]() |
![]() АЛГОРИТМЫ Новости Рассылка новостей Форум AlgoPascal Редактор блок-схем Статьи О сайте Контакты |
![]() |
![]() Решение уравнения F(x) = 0 методом секущих-хордЕсли на интервале [a, b] непрерывная функция F(x) удовлетворяет условию F(a)F(b) < 0, то корень уравнения F(x) = 0 может быть найден методом секущих: xn = xn-1 - F(xn-1 )(xn-1 -xn-2 )/(F(xn-1 )-F(xn-2 ))Погрешность значения корня оценивается по формуле |xn -xn-1 | < e, для этого в процедуру передается переменная е. Если на некотором этапе работы процедуры F(xn )F(xn-1 ) становится больше 0, то дальнейшие приближения ничего не дадут и процедура завершает поиск корня и выставляет переменную HasRoot в False. Если же HasRoot равно True, значит корень найден с заданным приблежением и находится в переменной x. Если нашли ошибку в алгоритме - сообщите! Реализации алгоритма на различных языках:![]() ![]() ![]() Блоксхемы:![]() ![]() Реализация алгоритма на AlgoPascal:unit SearchRootSecantUnit; declaration function F(X:Real):Real; interface SearchRootSecant; implementation const ItMax : Integer = 100; (* Решение уравнения методом секущих procedure SearchRootSecant(x1,x2,e:real;var x:real;HasRoot:Boolean); Если на интервале [x1,x2] непрерывная функция F(x) удовлетворяет условию F(a)F(b) меньше нуля, то корень уравнения F(x)=0 может быть найден методом секущих с точностью e. Если на некотором этапе работы процедуры F(xn)F(xn-1) становится больше 0, то дальнейшие приближения ничего не дадут и процедура завершает поиск корня и выставляет переменную HasRoot=False. *) procedure SearchRootSecant( x1 : Real; x2 : Real; e : Real; out HasRoot : Boolean; out x : Real); var x3 : Real; I : Integer; begin I:=1; while (AbsReal(x1-x2)>e) and (I<ItMax) do begin I:=I+1; x3:=x2-F(x2)*(x2-x1)/(F(x2)-F(x1)); x1:=x2; x2:=x3; end; HasRoot:=I<ItMax; x:=x2; end; end. |
![]() |
|
|
![]() |