Метод половинного деления
Не всякое уравнение можно решить точными методами. Чаще применяют численные методы. Один из этих методов - метод половинного деления. Здесь приведен пример программы, решающей уравнение методом половинного деления.
program reurpol; uses crt; var a,b,n,x,d,c,eps,f:real; function y(x:real):real; begin y:=sin(ln(abs(x*x+2))) end; Begin clrscr; writeln('Таблица значений функции'); writeln('Введите начальный и конечный концы интервала'); write('a='); readln (a); write('b='); readln(b); writeln('Число точек на интервале:'); write('n='); readln(n); d:=(b-a)/n; x:=a; while x<=b do begin f:=y(x); writeln('x=',x:5:3,' f=',f:5:3); x:=x+d end; readln; writeln('Нахождение корня: концы интервала, точность вычисления'); writeln('(a, b и eps)'); write('a ='); readln (a); write('b ='); readln(b); write('eps =');readln(eps); {Концы отрезка имеют разные знаки} if y(a)*y(b) < 0 then begin {До тех пор, пока не достигнута заданная точность} repeat c:=(a+b)/2; {Если найден точный корень, то его вывод и выход} if y(c)=0 then begin writeln('Найден точный корень ', c:6:3); readln; exit end else {Определение нового промежутка для следующей итерации} if y(a)*y(c)<0 then b:=c else a:=c; until (b-a) < eps; writeln('Kорень с точностью ',eps:8:6); writeln('равен ', c:8:6); end else {Если на концах отрезка были одинаковые знаки} writeln('Корня нет или он не единственен'); readln end.