Решение уравнений методом половинного деления

Метод половинного деления (дихотомия)

{Автор: Ozzя}
 
var
  a,b,x,e:real;
 
{ Нелинейное уравнение (x-2)*lg(x+11)-1 }
function f(x:real):real;
begin
  f:=(x-2)*lg(x+11)-1;
end;
 
{ Функция, определяющая знак числа }
function sgn(x:real):integer;
begin
  sgn:=0;
  if x<0.0 then
    sgn:=-1;
  if x>0.0 then
    sgn:=1;
end;
 
{ Процедура, реализующая метод половинного деления }
procedure dich (var a,b,x,e:real);
var
  i:integer;
  r:real;
begin
  i:=sgn(f(a));
  { Повторяем до тех пор, пока интервал [a,b] не станет меньше   }
  { заданной погрешности е                                       }
  while b-a>e do
    begin
      { Определяем середину отрезка                              }
      x:=(a+b)/2;
      { Далее делаем выбор, какую из частей отрезка взять        }
      { для дальнейшего уточнения корня                          }
      { Если левая часть уравнения f(x) есть непрерывная функция }
      { аргумента х, то корень будет находиться в той половине   }
      { отрезка, на концах которой f(x) имеет разные знаки.      }
      r:=f(x);
      if sgn(r)=i then
        a:=x
      else
        b:=x
    end
end;
 
begin
  write('Введите значения интервала A,B? ');
  readln(a,b);
  write('Введите требуемое значение точности E? ');
  readln(e);
  dich(a,b,x,e);
  writeln('X= ',x);
end.
 
pascal/bisection_method.txt · Последние изменения: 2006/05/10 14:05 (внешнее изменение)
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki