End.
Begin
Begin
Var
Begin
f:=1/x
end;
a,b,e: real;
i: integer;
x,s,dx: real;
n: integer;
writeln('[a,b],n');
readln(a,b,n);
{вычисление длины отрезка – основания прямоугольника (дельта)}
dx:=(b-a)/n;
for i:=0 to n-1 do
{вычисление абсцыссы середины очередного отрезка разбиения}
x:=a+dx*i+dx/2;
s:=s+dx*f(x);
end;
writeln('int=',s);
В данной программе используется подпрограмма функция f, которая вычисляет подынтегральную функцию.
Принцип метода Симпсона состоит в замене подынтегральной функции f(х) интерполяционным многочленом Ньютона второй степени. Тогда для каждого элементарного отрезка [хi,хi+1] имеем следующее значение площади подынтегральной кривой:
.
Для всего отрезка интегрирования [a,b] формулой Симпсона:
Данное выражение называется формулой Симсона. Оно относится к формулам повышенной точности и является точной для многочленов второй и третьей степени.
Рисунок 31 – Геометрическая интерпретация численного интегрирования методом Симпсона
Приведём программу, реализующую вычисление определённого интеграла методом Симпсона с заданнойточностью. В качестве подынтегральной будем использовать функцию:
|
|
.
Рассмотренные формулы численного интегрирования требуют чёткого указания количества разбиений отрезка интегрирования. Однако классическое использование численного метода предполагает вычисление значения (корня, интеграла и т.д.) с заданной точностью.
Точность любой формулы численного интегрирования зависит от величины отрезка разбиения D.
Будем вычислять значение интеграла при разных значениях D (D1, D2, D3,…), где Di+1 = 2Di. Как только разница между значением интеграла, вычисленного при Di и интеграла, вычисленного при Di+1, станет меньше, чем значение e, будем считать, что интеграл вычислен с заданной точностью e.
Данный метод интегрирования с заданной точностью прост в реализации, однако он требует значительных избыточных вычислений, что приводит к повышению затрат времени на вычисление.
program simp;
function f(x: real): real;