Вычисление интеграла
Материал из DRKB
Вычисление интеграла с заданной точностью алгоритмом Симпсона.
// (c) Copydown 2002, all left reserved. http://world.fpm.kubsu.ru.
{$APPTYPE CONSOLE}
{$F+} // разрешение передачи функций, как параметров
type FunctionType = function(x: Real): Real;
{ интегрируемая функция }
function f(x: Real): Real;
begin
Result := x;
end;
{ интегрирование от a до b функции f с точностью e }
function IntegralSimpson(a, b: Real; f: FunctionType; e: Real): Real;
var
h, x, s, s1, s2, s3, sign: Real;
begin
if (a = b) then
begin
Result := 0;
exit
end;
if (a > b) then
begin
x := a;
a := b;
b := x;
sign := -1
end
else
sign := 1;
h := b - a;
s := f(a) + f(b);
s2 := s;
repeat
s3 := s2;
h := h/2;
s1 := 0;
x := a + h;
repeat
s1 := s1 + 2 * f(x);
x := x + 2 * h;
until (not (x < b));
s := s + s1;
s2 := (s + s1) * h / 3;
x := abs(s3 - s2) / 15
until (not (x > e));
Result := s2 * sign;
end;
begin
{ вывод результата интегрирования от 0 до 1 функции f с точностью 0.001 }
WriteLn(IntegralSimpson(0, 1, f, 0.001));
WriteLn;
WriteLn('Press Enter');
ReadLn;
end.
Source: Взято с http://delphiworld.narod.ru
ID: 04199