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


           

что точность вычисления интеграла по


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

  где


значит оценивать точность вычисления можно по модулю этого остаточного или дополнительного члена, |Rn|.

Вторую производную вычислить мы сможем с достаточно высокой степенью точности, применив следующую функцию:

{ Функция вычисления второй производной }

   Function

derivat2(x0, eps : real) : real;

         var

            dx, dy, dy3 : real;

         begin

            dx := 1;

            repeat

              dx := dx/2;

               dy := fx(x0 + dx) - 2*fx(x0) + fx(x0 - dx);

               dy3 := fx(5*x0/4 + 2*dx) - 2*fx(5*x0/4 + dx);

               dy3 := dy3 - fx(5*x0/4 - 2*dx) + 2*fx(5*x0/4 - dx)

            until abs(dy3/(6*dx)) < eps;

            derivat2 := dy/(dx*dx)

         end;

Осталось выяснить, в какой точке промежутка интегрирования [a, b] находить значение этой производной. Остаточный член не требует строго определенного значения аргумента из этого промежутка, поэтому можно выбрать любое значение, не выходящее за пределы интервала [a, b]. Сразу возникает мысль вычислить вторую производную в середине промежутка, т.е. в точке (a + b)/2. Но представьте себе ситуацию, когда промежуток [-1, 1] или [-6.28; 6.28], тогда середина этого отрезка - точка 0 и значение производной будет равно нулю, а значит для числа точек деления n может быть установлено значение любое, даже 1, что, конечно, не даст требуемой точности вычисления интеграла.

Итак, следующая проблема, в какой точке промежутка находить значение производной?

Можно найти наибольшее значение производной на промежутке интегрирования [a, b]. Это можно сделать с помощью процедуры:

{ Определение наибольшего значения второй производной }

   Procedure Maximum(a, b, eps : real; var

max : real);

         var

            dx, x : real;

         begin

            dx := 0.1; x := a;

            max := abs(derivat2(x, eps));

            while x<= b do


Содержание  Назад  Вперед