Цитата:
Сообщение от Fotohotnik
Нужно найти интеграл заданными способами, учитывая погрешность. вот собственно интеграл: 1/(x(sqrt(2*x*x-3*x-5)) пределы интегрирования от 3 до 6; погрешность 0,001 и желательно блок-схему и график в экселе, буду очень признателен! Абсолютно не понимаю паскаль, а училка сама не знает как делать!
|
Значит, так. Программу на Паскале я сделал, а уж всякие там блок-схемы да графики - пожалуйста, без меня. Помимо указанных численных способов, в программе рассчитывается (для сравнения) еще и точное значение интеграла, благо он берущийся:
Код:
Function ArcSin(X:Real):Real;
BEGIN
IF ROUND(X*10000000)=10000000 THEN ArcSin:=Pi/2 ELSE
IF ROUND(X*10000000)=-10000000 THEN ArcSin:=-Pi/2 ELSE
ArcSin:=ArcTan(X/SQRT(1-X*X));
END;
Function F(x:Real):Real;
begin
F:=1.0/(x*SQRT(SQR(x)*2-x*3-5.0));
end;
Function Antiderivative(x:Real):Real;
begin
Antiderivative:=1.0/SQRT(5.0)*arcsin((-x*3-10)/(x*7));
end;
Procedure Rectangle;
var
i,N:Integer;
Sum1,Sum2,h:Real;
begin
N:=5;
h:=3.0/N;
Sum1:=0;
for i:=0 to N-1 do
Sum1:=Sum1+h*F(3.0+h*i);
Sum2:=Sum1;
Repeat
Sum1:=Sum2;
N:=N*2;
h:=3.0/N;
Sum2:=0;
for i:=0 to N-1 do
Sum2:=Sum2+h*F(3.0+h*i);
Until ABS(Sum2-Sum1)<0.001;
WriteLn('Rectangle: ', Sum2:10:5);
end;
Procedure Trapezium;
var
i,N:Integer;
Sum1,Sum2,h:Real;
begin
N:=5;
h:=3.0/N;
Sum1:=(F(3.0)+F(6.0))/2*h;
for i:=1 to N-1 do
Sum1:=Sum1+h*F(3.0+h*i);
Sum2:=Sum1;
Repeat
Sum1:=Sum2;
N:=N*2;
h:=3.0/N;
Sum2:=(F(3.0)+F(6.0))/2*h;
for i:=1 to N-1 do
Sum2:=Sum2+h*F(3.0+h*i);
Until ABS(Sum2-Sum1)<0.001;
WriteLn('Trapezium: ', Sum2:10:5);
end;
Procedure Simpson;
var
i,N:Integer;
Sum1,Sum2,h:Real;
begin
N:=2;
h:=3.0/(2*N);
Sum1:=(F(3.0)+F(6.0))/3*h;
for i:=1 to N do
Sum1:=Sum1+4.0*h/3.0*F(3.0+h*(2*i-1));
for i:=2 to N do
Sum1:=Sum1+2.0*h/3.0*F(3.0+h*(2*i-2));
Sum2:=Sum1;
Repeat
Sum1:=Sum2;
N:=N*2;
h:=3.0/(2*N);
Sum2:=(F(3.0)+F(6.0))/3*h;
for i:=1 to N do
Sum2:=Sum2+4.0*h/3.0*F(3.0+h*(2*i-1));
for i:=2 to N do
Sum2:=Sum2+2.0*h/3.0*F(3.0+h*(2*i-2));
Until ABS(Sum2-Sum1)<0.001;
WriteLn('Simpson: ', Sum2:10:5);
end;
BEGIN
Rectangle;
Trapezium;
Simpson;
WriteLn('Accurate value:', (Antiderivative(6.0)-Antiderivative(3.0)):10:5);
ReadLn;
END.