Показать сообщение отдельно
Старый 07.01.2015, 09:47   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Вилена, и Вам здравствовать, и Вас с Рождеством! Впрочем, судя по имени, Рождество для Вас не актуально.
Теперь по заданию.
Вообще-то подобные задачки у нас рассматривались неоднократно, ну да ладно, получите:
Код:
Var
 a,b,AV,T,S:Real;
 k:Byte;

Function F(x:Real):Real;
begin
 F:=0.5*(Exp(x)-Exp(-x));
end;

Function Antiderivative(x:Real):Real;
begin
 Antiderivative:=0.5*(Exp(x)+Exp(-x));
end;

Function Trapezium(N:Byte):Real;
var
 i:Byte;
 Sum,h:Real;
begin
 h:=(b-a)/N;
 Sum:=(F(a)+F(b))/2*h;
 for i:=1 to N-1 do
  Sum:=Sum+h*F(a+h*i);
 Trapezium:=Sum;
end;

Function Simpson(N:Byte):Real;
var
 i,N1:Byte;
 Sum,h:Real;
begin
 N1:=N div 2;
 h:=(b-a)/(2*N1);
 Sum:=(F(a)+F(b))/3*h;
 for i:=1 to N1 do
  Sum:=Sum+4.0*h/3.0*F(a+h*(2*i-1));
 for i:=2 to N1 do
  Sum:=Sum+2.0*h/3.0*F(a+h*(2*i-2));
 Simpson:=Sum;
end;

Begin
 Write('a = ');
 Readln(a);
 Write('b = ');
 Readln(b);
 AV:=Antiderivative(b)-Antiderivative(a);
 WriteLn('Accurate value: ', AV:0:8);
 Writeln;
 for k:=1 to 8 do
  begin
   T:=Trapezium(k*10);
   S:=Simpson(k*10);
   Writeln('k= ',k, '     Trapezium: ',T:0:8, '     Abs.Err: ',Abs(T-AV):0:8,'     Rel.Err: ',Abs(T-AV)/AV*100:0:8,'%');
   Writeln('k= ',k, '     Simpson:   ',S:0:8, '     Abs.Err: ',Abs(S-AV):0:8,'     Rel.Err: ',Abs(S-AV)/AV*100:0:8,'%');
  end;
 Readln;
End.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070