Цитата
Программа находит корень уравнения F(x) = 0, где F(x) - непрерывная на отрезке [a,b] функция, удовлетворяющая условию F(a)*F(B)<0. Для нахождения корня отрезок [a,b] делится пополам и выбирается тот полуинтервал, на концах которого знаки F(x) разные. Затем процесс деления повторяется до тех пор, пока длина интервала не станет меньше Eps.
{$n+}
Uses Crt;
Function f(x: Double): Double;
  Begin
    f := 1 / (Exp(x * Ln(2))) - 10 + 0.5*Sqr(x)
  End;
Var
  x, Eps, a, b, c: Double;
  n: Integer;
begin
  ClrScr;
  Writeln('Введите значения a и b'); Read(a, b);
  WriteLn('Введите точность Eps'); Read(Eps);
  n := 0;
  Repeat
    c := (a + b) / 2;
    If (f(a) * f©) < 0 Then b := c
    Else a := c;
    Inc(n)
  Until (b - a) <= Eps;
  x := (a + b) / 2;
  WriteLn('Корень равен  x=', x:10:7);
  WriteLn('Количество делений = ',n);
  ReadKey
end.
 Метод хорд
{$n+}
Uses Crt;
Var
  x, Eps, a, b, c: Double;
  n: Integer;
Function f(x: Double): Double;
  Begin
    f := 1 / (Exp(x * Ln(2))) - 10 + 0.5*Sqr(x)
  End;
Function Chord(a, b: Double): Double;
  Begin
    Chord := (f(b)*a - f(a)*b) / (f(b) - f(a))
  End;
begin
  ClrScr;
  Writeln('Введите значения a и b');
  Read(a, b);
  WriteLn('Введите точность Eps');
  Read(Eps);
  ClrScr;
  n := 0;
  Repeat
    C := Chord(a, b);
    If f(a)*f© > 0 Then a := c
    Else b := c;
    Inc(n)
  Until Abs(Chord(a, b) - C) < Eps;
  x := c;
  WriteLn('Корень равен x=', x:10:7);
  WriteLn('Количество итераций =  ',n);
  ReadKey
end.
 Метод Ньютона (касательных)
Цитата
Действительный корень x уравнения F(x) = 0 вычисляется методом Ньютона по итерационному уравнению:
Xk+1 = Xk - F(Xk)/F'(Xk)
Xk+1 = Xk - F(Xk)/F'(Xk)
{$n+}
Function newton(start, Eps: Extended): Extended;
  Var
    X, prev: Extended;
  { Заданная функция }
  Function F(Arg: Extended): Extended;
    Begin
      F := Sqr(Arg) - 2
    End;
  { Производная заданной функции }
  Function Deriv(Arg: Extended): Extended;
    Begin
      Deriv := 2 * Arg
    End;
  Begin
    X := start;
    Repeat
      prev := X;
      X := prev - F(prev) / Deriv(prev);
    Until Abs(X - prev) <= Eps;
    newton := X
  End;
Var a, Eps: Extended;
begin
  WriteLn('Введите начальное приближение a');
  Read(a);
  WriteLn('Введите точность Eps');
  Read(Eps);
  WriteLn('Корень равен x= ', newton(a, Eps):10:7);
end.
 Метод Ньютона с аппроксимацией производной
Цитата
Если вычисление производной в методе Ньютона затруднено, можно заменить ее вычисление оценкой:
F'(X)= (F(X+h)-F(X))/h
F'(X)= (F(X+h)-F(X))/h
{$n+}
Function newton(start, Eps: Extended): Extended;
  Var
    X, prev: Extended;
  Function noDeriv(Arg: Extended): Extended;
    Function F(Arg: Extended): Extended;
      Begin
        F := 1 / (Exp(arg * Ln(2))) - 10 + 0.5*Sqr(arg)
      End;
    Begin
      noDeriv := -2 * Eps * F(Arg) / (F(Arg + eps) - F(Arg - eps))
    End;
  Begin
    X := start;
    Repeat
      prev := X;
      X := prev + noDeriv(prev)
    Until Abs(X - prev) <= Eps;
    newton := X
  End;
Var a, Eps: Extended;
begin
  WriteLn('Введите начальное приближение a');
  Read(a);
  WriteLn('Введите точность Eps');
  Read(Eps);
  WriteLn('Корень равен x= ', newton(a, Eps):10:7);
end.
 
 


 
  
        	







