|
Лабораторная работа №2
«Вычисление определенного интеграла методом срединных прямоугольников и методом Симпсона. Правило Рунге, уточнение по Ричардсону».
Выполнена студенткой МГТУ им. Баумана Группы МТ13-31 Лариной Анастасией
|
|
Теоретическая часть
Текст программы
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
a=0;
b=pi/2;
epsilon=0.0001;
function f(x:real):real; //Определение функции, зависящей от x
begin
f:=2*x-exp(-x);
end;
procedure Priamoug_runge (epsilon,a,b:real;var i2,yt1:real);
var i1,d,s,ApEr:real; //ApEr - Апостериорная ошибка по правилу Рунге
i,n:integer;
begin
{d=b-a делится на n отрезков;n на каждом шаге удваивается
i1 - сумма площадей n прямоугольников с основанием d/n
i2 - сумма площадей 2n прямоугольников с основанием d/(2n)}
d:=b-a;
i1:=(f(a+d/4)+f(b-d/4))*d/2; //для n=2
i2:=f(a+d/8)+f(a+3*d/8)+f(a+5*d/8)+f(a+7*d/8)*d/4; //для n=4
n:=8;
repeat
begin
s:=0;
for i:=1 to n do s:=s+f(a+(2*i-1)*d/(2*n));
i1:=i2;
i2:=s*d/n;
ApEr:=abs(i2-i1)/3;
writeln('Pri n=',n:5,', oshibka= ',ApEr:10:8,', I=',i2:10:8);
n:=2*n;
end;
yt1:=i2+(i2-i1)/3;
until ApEr<epsilon
end;
procedure simpson_runge(a,b,epsilon:real;var s2,yt2:real);
var
s1,s,h,ApEr:real; //ApEr - апостериорная оценка погрешности
i,n,k:integer;
begin
k:=1;
n:=2*k;
h:=(b-a)/n;
s2:=(f(a)+f(b))*(h/3);
repeat
s1:=s2;
k:=2*k;
h:=(b-a)/(2*k);
s2:=f(a)+f(b);
s:=0;
for i:=1 to k do s:=s+f(a+(2*i-1)*h);
s2:=s2+4*s;
s:=0;
for i:=1 to k-1 do s:=s+f(a+2*i*h);
s2:=s2+2*s;
s2:=s2*h/3;
ApEr:=abs(s2-s1)/15;
writeln('Pri n=',2*k:3,', oshibka= ',ApEr:10:8,', I=',s2:10:8);
until ApEr<epsilon;
yt2:=s2+(s2-s1)/15;
end;
var sim,sim_ru,ist,PriamI,PriamI_ru,y1,y2:real;
Begin
writeln('Istinnoe znachenie funkzii'); //Посчитано вручную
ist:=exp(-1);
writeln(ist:10:9);
writeln('------------------------------------------------');
writeln('Metod sredinnix priamougolnikov');
writeln('');
writeln('Aposteriornaya oshibka po pravilu Runge');
Priamoug_runge(epsilon,a,b,PriamI_ru,y1);
writeln('');
writeln('Konechnii rezultat');
writeln(PriamI_ru:8:8);
writeln('Ytochnenie po Richardsonu');
writeln(y1:8:8);
writeln('------------------------------------------------');
writeln('Metod simpsona');
writeln('');
writeln('Aposteriornaya oshibka po pravilu Runge');
simpson_runge(a,b,epsilon,sim_ru,y2);
writeln('');
writeln('Konechnii rezultat');
writeln(sim_ru:10:8);
writeln('Ytochnenie po Richardsonu');
writeln(y2:8:8);
writeln('------------------------------------------------');
readln;
end.
Результаты
Аналитическое решение
Дата добавления: 2015-09-29; просмотров: 26 | Нарушение авторских прав
<== предыдущая лекция | | | следующая лекция ==> |
Творец миров, чье имя Безначальный, Чью мощь бессилен выразить язык, Кто беспредельно Всемогущ, Велик, Чьим Словом небеса небес соткались! | | |