Алгоритм метода хорд

Описание алгоритма метода хорд
Шаг 1. Ввод a,b,ε.
Шаг 2. X:=a-f(a)×(b-a)/(f(b)-f(a)).
Шаг 3. Если dF2(b)×F(b)<0, то a:=x;
Если dF2(a)×F(a)<0, то b:=x;
Шаг 4. Пересчитать X по формуле шага 2.
Шаг 5. Выполнять шаг 3, пока abs(b-a)<=eps.
Шаг 4.Вывод результата – x.
Опишем назначение переменных и функций, используемых в процедуре Hord
dF2 – значение второй производной в точке Х
F – значение функции в точке Х
Х0 – начальное значение Х
А – левая граница
В – правая граница
Е – точность вычислений
Fa – значение функции в точке А
Fb - значение функции в точке В
Представим в виде структурной схемы. Блок схема алгоритма метода хорд

Для начала нам необходимо проверить границы интервала. Для этого разбиваем интервал на 10 частей и в цикле проверяем условие наличия корня:
if F(A+i*(B-A)/10)*F(A+(i+1)*(B-A)/10)<0

Если условие выполняется, то корректируем границы
A:=A+i*(B-A)/10;
B:=A+(i+1)*(B-A)/10;

Однако, если корня нет – то выводим сообщение об ошибке.
Если кривая имеет на отрезке выпуклость (dF2(A)*F(A) > 0), то применяем следующий алгоритм. Пока разность значений корня будет больше заданной двигаемся влево применяя формулу X := X0 - Fx*(X0 - A)/(Fx - Fa).
Если кривая имеет на отрезке вогнутость, то применяем следующий алгоритм. Пока разность значений корня будет больше заданной двигаемся вправо применяя формулу X := X0 - Fx*(B - X0)/(Fb - Fx).

Реализация алгоритма метода хорд на Pascal

Procedure Hord(A,B:Real; E:Real; var X, Fx:Real;n:integer); 
var
X0,Fa,Fb:real;
Begin
if dF2(A,n)*F(A,n) > 0 then
    begin
    X:=B;X0:=A;
    Fa:=F(A,n);
    while (Abs(X0-X)>E) do
        begin
        X0:=X;
        Fx:=F(X0,n);
        X:=X0-Fx*(X0-A)/(Fx-Fa);
        end
    end
else begin
    X:=A;X0:=B;
    Fb:=F(B,n);
    while (Abs(X0-X)>E) do
        begin
        X0:=X;
        Fx:=F(X0,n);
        X:=X0-Fx*(B-X0)/(Fb-Fx);
        end
    end;
Fx:=F(X,n);
End;

Перейти к онлайн решению своей задачи

Пример решения

Найдем корни уравнения: ln(x)+(x+1)3 = 0

Уточним интервалы, в которых будут находиться корни уравнения. Для этого исходный интервал [0.1;1] разобьем на 10 подынтервалов.
h0 = 0.1 + 0*(1-0.1)/10 = 0.1
h1 = 0.1 + (0+1)*(1-0.1)/10 = 0.19
Поскольку F(0.1)*F(0.19)<0, то корень лежит в пределах [0.1;0.19].
Вычисляем значения функций в точке a = 0.1.
f(0.1) = -0.972
f ''(0.1) = -93.4
Поскольку f(a)•f ''(a) > 0, то x0 = a = 0.1
Остальные расчеты сведем в таблицу.
N x F(x) h = F(x)*(x-a)/(f(x)-f(a))
1 0.19 0.02443 0.1878
2 0.1878 0.00338 0.1875

Ответ: x = 0.188-(0.187) = 0.18748812; F(x) = 0.00047
загрузка...