АЛГОРИТМЫ

Новости

Рассылка новостей

Форум

AlgoPascal

Редактор блок-схем

Статьи

О сайте

Контакты



Содержание - Уравнения общего вида и полиномиальные - Метод секущих-хорд

Решение уравнения F(x) = 0 методом секущих-хорд

Если на интервале [a, b] непрерывная функция F(x) удовлетворяет условию F(a)F(b) < 0, то корень уравнения F(x) = 0 может быть найден методом секущих:

x = xn-1  - F(xn-1 )(xn-1 -xn-2 )/(F(xn-1 )-F(xn-2 ))

Погрешность значения корня оценивается по формуле |x-xn-1 | < e, для этого в процедуру передается переменная е.

Если на некотором этапе работы процедуры F(x)F(xn-1 ) становится больше 0, то дальнейшие приближения ничего не дадут и процедура завершает поиск корня и выставляет переменную HasRoot в False. Если же HasRoot равно True, значит корень найден с заданным приблежением и находится в переменной x.

Если нашли ошибку в алгоритме - сообщите!



Реализации алгоритма на различных языках:

Реализация алгоритма на C++
Реализация алгоритма на Delphi
Реализация алгоритма на Visual Basic 6

Блоксхемы:

Посмотреть блок-схему алгоритма
Скачать блок-схему алгоритма


Реализация алгоритма на 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.

 


Бочканов Сергей, Быстрицкий Владимир
Copyright © 1999-2004
При поддержке проекта MANUAL.RU