Смекни!
smekni.com

Дослідження чисельних методів інтегрування (стр. 2 из 2)

Додатки

Додаток А

Алгоритми методів

Алгоритм методу Сімпсона


Алгоритм методу Чебишева


Додаток Б

Блок-схема програми

Додаток В

Лістинг пргорами

{$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.