Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Вычислить приближённый интеграл в Pascal ABC (http://www.tehnari.ru/f41/t61746/)

Poli-007 25.12.2011 13:42

Вычислить приближённый интеграл в Pascal ABC
 
Интеграл от (dx/(x+1)) по области от 0 до 1.
Вычисл. приближ. интеграл использ. след. квадратур. формулы:

а) прямоугольн.
б) трапец.
в) симпсона
с двумя квадратур. узлами. Для всех этих формул. оценить погреш.интегрир. Найти точное знач дан интеграла

Vladimir_S 25.12.2011 17:47

Цитата:

Сообщение от Poli-007 (Сообщение 641039)
с двумя квадратур. узлами

Про это объясните популярно. А то я как-то про квадратурные узлы не в курсе.

Poli-007 25.12.2011 19:04

кратными узлами

Vladimir_S 25.12.2011 19:12

Цитата:

Сообщение от Poli-007 (Сообщение 641254)
кратными узлами

Яснее не стало.

Vladimir_S 25.12.2011 21:50

Значит, так. Ничего про квадратурные (кратные) узлы и прочую заумь не знаю, но вот взял свою старую программу по численному интегрированию и переделал под Вашу функцию. Тут, правда, делается так: число разбиений промежутка удваивается, пока не будет достигнута нужная точность. Посмотрите, может быть пригодится:
Код:

Const
 a=0.0;
 b=1.0;

Function F(x:Real):Real;
begin
 F:=1.0/(x+1.0);
end;

Function Antiderivative(x:Real):Real;
begin
 Antiderivative:=Ln(1+x);
end;

Procedure Rectangle;
var
 i,N:Integer;
 Sum1,Sum2,h:Real;
begin
 N:=5;
 h:=(b-a)/N;
 Sum1:=0;
 for i:=0 to N-1 do
  Sum1:=Sum1+h*F(a+h*i);
 Sum2:=Sum1;
 Repeat
  Sum1:=Sum2;
  N:=N*2;
  h:=(b-a)/N;
  Sum2:=0;
  for i:=0 to N-1 do
  Sum2:=Sum2+h*F(a+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:=(b-a)/N;
 Sum1:=(F(a)+F(b))/2*h;
 for i:=1 to N-1 do
  Sum1:=Sum1+h*F(a+h*i);
 Sum2:=Sum1;
 Repeat
  Sum1:=Sum2;
  N:=N*2;
  h:=(b-a)/N;
  Sum2:=(F(a)+F(b))/2*h;
  for i:=1 to N-1 do
  Sum2:=Sum2+h*F(a+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:=(b-a)/(2*N);
 Sum1:=(F(a)+F(b))/3*h;
 for i:=1 to N do
  Sum1:=Sum1+4.0*h/3.0*F(a+h*(2*i-1));
 for i:=2 to N do
  Sum1:=Sum1+2.0*h/3.0*F(a+h*(2*i-2));
 Sum2:=Sum1;
 Repeat
  Sum1:=Sum2;
  N:=N*2;
  h:=(b-a)/(2*N);
  Sum2:=(F(a)+F(b))/3*h;
  for i:=1 to N do
  Sum2:=Sum2+4.0*h/3.0*F(a+h*(2*i-1));
  for i:=2 to N do
  Sum2:=Sum2+2.0*h/3.0*F(a+h*(2*i-2));
 Until ABS(Sum2-Sum1)<0.001;
 WriteLn('Simpson:      ', Sum2:10:5);
end;

BEGIN
 Rectangle;
 Trapezium;
 Simpson;
 WriteLn('Accurate value:', (Antiderivative(b)-Antiderivative(a)):10:5);
 ReadLn;
END.


Poli-007 26.12.2011 21:55

спасибо и на этом)))


Часовой пояс GMT +4, время: 10:21.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.