Метод хорд — Pascal (Паскаль)

Найти корень уравнения методом хорд.

Будем искать корень функции f(x). Выберем две начальные точки C1(x1;y1) и C2(x2;y2) и проведем через них прямую. Она пересечет ось абсцисс в точке (x3;0). Теперь найдем значение функции с абсциссой x3. Временно будем считать x3 корнем на отрезке [x1;x2]. Пусть точка C3имеет абсцисcу x3 и лежит на графике. Теперь вместо точек C1 и C2 мы возьмём точку C3 и точку C2. Теперь с этими двумя точками проделаем ту же операцию и так далее, т.е. будем получать две точки Cn + 1 и Cn и повторять операцию с ними. Таким образом мы будем получать две точки, отрезок, соединяющий которые, пересекает ось абсцисс в точке, значение абсциссы которой можно приближенно считать корнем. Эти действия нужно повторять до тех пор, пока мы не получим значение корня с нужным нам приближением. (источник)

function f(x:real):real;
begin
f:=x*x*x+x-5; 
end;

var xn,xk,p,e:real;
begin
e:=0.001;
xn:=0.5;
xk:=2;
repeat
p:=(f(xk)*xn-f(xn)*xk)/(f(xk)-f(xn));
if abs(f(p))<=e then
 begin
  writeln('x=',p);
  readln;
  exit;
 end;
if f(xn)*f(xk)>0 then xn:=p else xk:=p;
until abs((f(xk)*xn-f(xn)*xk)/f(xk)-f(xn)-p)<=e;
writeln('x=',p);
readln
end.

Следующий вариант программы

Program MethodHorda;
    Uses Crt;
    Var
        a,b,t,x,eps: Real;
     
    Function func(x: Real): Real;
    Begin
        { Здесь прописываем функцию, корень которой ищем }
        func:=x*x*x - 2*x*x + 7*x + 3;
    End;
     
    Begin
        ClrScr;
        { Ввод исходных данных }
        Write('Введите левую границу отрезка: ');
        ReadLn(a);
        Write('Введите правую границу отрезка: ');
        ReadLn(b);
        Write('Введите необходимое приближение (точность): ');
        ReadLn(eps);
        { Вычисляем в цикле, пока не достигнуто заданное приближение }
        Repeat
            x:=a-func(a)*(b-a)/(func(b)-func(a));
            If func(a)*func(x)<=0 Then b:=x
                       Else a:=x;
        Until abs(func(x))<=eps;
        Writeln(' Корень уравнения x = ', x:10:8);
        Repeat Until KeyPressed
    End.

Leave a Comment

67 − 60 =