Алгоритми методів
Алгоритм методу Сімпсона
Алгоритм методу Чебишева
Блок-схема програми
Лістинг пргорами
{$N+,E+}
program integral;
uses CRT, graph;
const h1=0.1; h2=0.2; h5=0.5;
var
a, b, c, d, sharp: extended;
ch: char;
res: array [1..2,1..3] of extended;
delta: array [1..2,1..3] of extended;
i, j: integer;
label
lbl1;
{------------------------------------------------}
function f (x: extended): extended;
begin
f:=c*x/2-d/(exp(x)+exp(-x)); {sec(d*x)=d/(exp(x)+exp(-x))}
end;
{------------------------------------------------}
function Simpson (a, b, h: extended): extended;
var
I, x: extended;
j: integer;
begin
I:=0; x:=a+h; j:=0;
I:=f(a)+f(b);
while (x<b-0.000001) do
begin
j:=j+1;
if ((j mod 2) = 0) then
I:=I+2*f(x)
else
I:=I+4*f(x);
x:=x+h
end;
Simpson:=I*h/3;
end;
{------------------------------------------------}
function difChebushev (a, b: extended): extended;
const
t4:array [1..4] of extended = (-0.794654, -0.187592, 0.187592, 0.794654);
n=4;
var
x, I: extended;
j: integer;
begin
I:=0;
for j:=1 to 4 do
begin
x:=(a+b)/2+t4[j]*(b-a)/2;
I:=I+f(x);
end;
difChebushev:=I*(b-a)/n;
end;
{------------------------------------------------}
function Chebushev (a, b, h: extended): extended;
var
I, x: extended;
j: integer;
begin
j:=0; I:=0; x:=a;
while (x<b-0.000001) do
begin
I:=I+difChebushev(x,x+h);
x:=x+h;
j:=j+1;
end;
Chebushev:=I
end;
{------------------------------------------------}
BEGIN
lbl1:
clrscr;
c:=2.1; d:=6;
a:=0; b:=1;
textmode (3);
textcolor(15);
writeln ('Програма обчислюэ iнтеграл функцii cx/2-sec(dx) в межах вiд a до b двома');
writeln ('методами: Сiмпсона та Чебишева IV порядку');
writeln ('Поточнi значення параметрiв:');
writeln ('a=', a:2:6);
writeln ('b=', b:2:6);
writeln ('c=', c:2:6);
writeln ('d=', d:2:6);
writeln ('Ви хочете змiнити параметри a та b? (y - так, iнша клавiша - нi)');
ch:=readkey;
if ((ch='y') or (ch='Y')) then
begin
write ('a=');
readln (a);
write ('b=');
readln (b);
end;
writeln ('Ви хочете змiнити параметри c та d? (y - так, iнша клавiша - нi)');
ch:=readkey;
if ((ch='y') or (ch='Y')) then
begin
write ('c=');
readln (c);
write ('d=');
readln (d);
end;
clrscr;
writeln ('Пiдiнтегральна функцiя: ', c:2:6, 'x/2-sec(', d:2:6, 'x)');
writeln ('Межi iнтегрування - вiд ', a:2:6, ' do ', b:2:6);
writeln ('Iнтеграл обчислюэться методами Сiмпсона та Чебишева IV порядку з 3 кроками: ');
writeln (h1:2:6, ', ', h2:2:6, ' та ', h5:2:6);
writeln;
write ('Виконуються обчислення.');
res[2,1]:=Chebushev(a, b, h1);
write ('.........');
res[2,2]:=Chebushev(a, b, h2);
write ('.........');
res[2,3]:=Chebushev(a, b, h5);
write ('.........');
res[1,1]:=Simpson(a, b, h1);
write ('.........');
res[1,2]:=Simpson(a, b, h2);
write ('.........');
res[1,3]:=Simpson(a, b, h5);
writeln ('.........');
gotoxy (wherex, wherey-1);
writeln ('Нижче виведено результати обчислень двома методами з 3 кроками ');
writeln;
write ('Крок:');
gotoxy (13, wherey);
write ('h=', h5:2:6);
gotoxy (35, wherey);
write ('h=', h2:2:6);
gotoxy (57, wherey);
writeln ('h=', h1:2:6);
writeln ('Метод');
write ('Сiмпсона:');
gotoxy (13, wherey);
write ('I=', res[1][3]:5:14);
gotoxy (35, wherey);
write ('I=', res[1][2]:5:14);
gotoxy (57, wherey);
writeln ('I=', res[1][1]:5:14);
write ('Чебишева:');
gotoxy (13, wherey);
write ('I=', res[2][3]:5:14);
gotoxy (35, wherey);
write ('I=', res[2][2]:5:14);
gotoxy (57, wherey);
writeln ('I=', res[2][1]:5:14);
write ('Обчислення похибки.....');
if (a=0) and (b=1) and (c=2.1) and (d=6) then
sharp:=-2.07230756449615
else
sharp:=1.1*Chebushev(a, b, 0.0001);
for i:=1 to 2 do
for j:=1 to 3 do
begin
delta[i][j]:=abs(sharp-res[i][j]);
write('....');
end;
writeln;
gotoxy (wherex, wherey-1);
writeln(' ');
writeln ('Нижче виведено похибки обчислень');
writeln;
write ('Крок:');
gotoxy (13, wherey);
write ('h=', h5:2:6);
gotoxy (35, wherey);
write ('h=', h2:2:6);
gotoxy (57, wherey);
writeln ('h=', h1:2:6);
writeln ('Метод');
write ('Сiмпсона:');
gotoxy (13, wherey);
write ('I=', delta[1][3]:5:14);
gotoxy (35, wherey);
write ('I=', delta[1][2]:5:14);
gotoxy (57, wherey);
writeln ('I=', delta[1][1]:5:14);
write ('Чебишева:');
gotoxy (13, wherey);
write ('I=', delta[2][3]:5:14);
gotoxy (35, wherey);
write ('I=', delta[2][2]:5:14);
gotoxy (57, wherey);
writeln ('I=', delta[2][1]:5:14);
writeln;
writeln ('Для перезавантаження програми натиснiть клавiшу R');
writeln ('Для виходу натиснiть будь-яку клавiшу');
ch:=readkey;
if ch='r' then goto lbl1;
END.