Паскаль. Основы программирования


Решение уравнений с одной переменной методом половинного деления - часть 3


{----------------------------------------------------------------------------------------}

    begin

       write('Введите левую границу промежутка '); readln(a);

       write('Введите правую границу промежутка '); readln(b);

       write('Введите шаг '); readln(h);

       k := 0;

       x1 := a; x2 := x1 + h;

       y1 := fx(x1);

       while x2 <= b do

          begin

             y2 := fx(x2);

             if y1*y2 < 0

               then

                 begin

                    k := k+1;

                    writeln(k, '-й корень на [', x1:6:4, ';', x2:6:4, ']')

                 end;

             x1 := x2; x2 := x1 + h;

             y1 := y2

          end

    end.

Следующим, естественным этапом решения, является нахождение на промежутке корень с заданной степенью точности (если, конечно, уже известно, что он существует на нем).

Для этого нетрудно сочинить простую программу вычисления корня методом половинного деления, сущность которого заключается в следующем.

Известно, что на промежутке [a; b] есть корень. Зададим необходимую точность, с которой нам необходимо его вычислить. Обозначим ее - e.

Разделим промежуток [a; b] пополам. Точкой деления будет точка (см. рис. 25) 

 

Рис. 25

Установим, на котором из полученных двух промежутков находится корень. Для чего найдем знак разности fx(a)*fx(c). Если этот знак отрицательный, тогда корень находится на левом промежутке. Заменив c на b (b:=c), мы получим новый промежуток, обозначенный прежними буквами (см. рис. 26):

Рис. 26

А если разность fx(a)*fx(c) не будет отрицательной, тогда корень находится на правом промежутке. Заменив c на a (a := c), мы получим новый промежуток для поиска корня, обозначенный теми же буквами (см. рис. 27):

Рис. 27

И такой процесс деления надо выполнять, пока разность между правой и левой границами по абсолютной величине будет больше заданной точности e

(

Пользуясь этими соображениями, нетрудно составить программу, где сам процесс половинного деления будет выполняться с помощью процедуры.


Начало  Назад  Вперед