Все бесплатно
    Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.



Вопросы
  Быстрое копирование файлов
   Категория: Файловая система
  Как соединить несколько файлов в один
   Категория: Текст и строки
  Создание цветных строк в ListBox
   Категория: Компоненты
  Добавить данные в EXE файл и получить их
   Категория: Файловая система
  Упаковать *.mdb-файл
   Категория: Базы данных
  Упаковать TinyDB
   Категория: Базы данных
  BDE. Создание алиасов
   Категория: Базы данных
  Подсветить часть текста в DBGrid
   Категория: Компоненты

Delphi - База Знаний: Вычисление интеграла с заданной точностью алгоритмом Симпсона.

  << Вернуться к Содержанию  

// (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 f := 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
      IntegralSimpson := 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));

  IntegralSimpson := s2*sign;
end;

begin
  {вывод результата интегрирования от 0 до 1 функции f с точностью 0.001}
  writeln(IntegralSimpson(0, 1, f, 0.001));
  writeln; writeln('Press Enter'); readln;
end.
  << Вернуться к Содержанию