- •Введение.
- •В данном расчетно-графическом задании требуется применить изученные средства языка программирования Паскаль для решения задач путем использования численных методов интегрирования на компьютере.
- •Теоретические сведения.
- •Метод Симпсона
- •Текст программы и блок-схема.
- •Сравнение между собой результатов и оценка погрешностей вычисления.
- •Вычисление приведенных интегралов аналитически и нахождение абсолютной погрешности вычисления.
- •Заключение.
- •Список используемой литературы.
Метод Симпсона
Правило Симпсона (n=2). Заменяем график функции F(x) квадратичной параболой, проходящей через три точки с координатами (х0,у0), (х0+h,у1), (х0+2h,у2). Расчетную формулу для вычисления элемента интегральной суммы получим, используя интерполяционный многочлен Лагранжа, в виде
y(x)=y0A0(x)+y1A1(x)+y2A2(x), где
При x0=0; x1=h; x2=2h, получим
При интегрировании на отрезке [a,b] расчетные формулы для методов прямоугольника, трапеций и Симпсона имеют вид
где h - шаг по x, fa, fi, fb - значения функции при x равном a, xi, b соответственно. Для метода прямоугольников приведены две расчетные формулы, так как площадь прямоугольника на каждом шаге интегрирования может определяться по левой или правой стороне. Суть метода прямоугольников для отрезка [a,b] проиллюстрирована на рисунке, при этом площадь под кривой f(x) (вспомните геометрический смысл определенного интеграла) заменена суммой площадей заштрихованных прямоугольников.
Задание к выполнению расчетно-графического задания.
Каждый из интегралов, приведенных ниже, вычислить:
а) по формуле прямоугольников;
б) по формуле трапеций;
в) по формуле Симпсона;
а); б).
Текст программы и блок-схема.
Интеграл а) метод трапеций:
program integral;
var
a,b,h,x :real
n,i :integer;
integ: real;
function F(x: Real): Real;
begin
F:=(3*sqr(x)+(exp(x)))/(sqr(x)*x+(exp(x)));
End;
Begin;
a:=0;
b:=2;
s:=0;
n:=3;
h:=(b-a)/n;
for i:=1 to n-1 do
begin
s:=s+f(a+h*i);
end;
integ:=h*((f(a)+f(b))/2+s);
writeln (‘integral=’, integ:2:2);
readln;
end.
Интеграл а) метод трапеций:
program integral;
var
a,b,h,x :real
n,i :integer;
integ: real;
function F(x: Real): Real;
begin
F:= (arctan(2*x))/(1+4*sqr(x));
End;
Begin;
a:=0;
b:=45;
s:=0;
n:=3;
h:=(b-a)/n;
for i:=1 to n-1 do
begin
s:=s+f(a+h*i);
end;
integ:=h*((f(a)+f(b))/2+s);
writeln (‘integral=’, integ:2:5);
readln;
end.
Интеграл а) метод Сипсона:
program integral; function F(x:Real):Real; begin F:=(3*sqr(x)+(exp(x)))/(sqr(x)*x+(exp(x))); end; var
a,b,h,x :real; n,i :integer; integ :real; begin write('vvedite niznii predel a='); readln(a); write('vvedite verchnii predel b='); readln(b); write('vvedite kolitschestvo razbienii integrala n='); readln(n); h:=(b-a)/n; integ:=((b-a)/6)*(F(a)+F(b)+4*F((a+b)/2)); writeln('integral = ',integ:3:5); end.
Интеграл б) метод Сипсона:
program integral; function F(x: Real): Real; begin F:=(arctan(2*x))/(1+4*sqr(x)); end; var
a,b,h,x :real; n,i :integer; integ :real; begin write('vvedite niznii predel a='); readln(a); write('vvedite verchnii predel b='); readln(b); write('vvedite kolitschestvo razbienii integrala n='); readln(n); h:=(b-a)/n; integ:=((b-a)/6)*(F(a)+F(b)+4*F((a+b)/2)); writeln('integral = ',integ:3:5); end.
Интеграл а) метод прямоугольников:
program integral;
var
a,b,h,sum,itog :real; n,i :integer; function F(x:Real):Real; begin F:=(3*sqr(x)+(exp(x)))/(sqr(x)*x+(exp(x))); end; begin write('vvedite niznii predel a='); readln(a); write('vvedite verchnii predel b='); readln(b); write('vvedite kolitschestvo razbienii integrala n='); readln(n); h:=(b-a)/n;
sum:=0;
for i:=1 to n-1 do
sum:=sum+f(h*i+a);
sym:=sum+(f(a)+f(b))/2;
itog:=(b-a)/n*sum;
writeln('integral = ',itog:3:5); end.
Интеграл б) метод прямоугольников:
program integral;
var
a,b,h,sum,itog :real; n,i :integer; function F(x:Real):Real; begin F:= (arctan(2*x))/(1+4*sqr(x)); end; begin write('vvedite niznii predel a='); readln(a); write('vvedite verchnii predel b='); readln(b); write('vvedite kolitschestvo razbienii integrala n='); readln(n); h:=(b-a)/n;
sum:=0;
for i:=1 to n-1 do
sum:=sum+f(h*i+a);
sum:=sum+(f(a)+f(b))/2;
itog:=(b-a)/n*sum;
writeln('integral = ',itog:3:5); end.