ВНИМАНИЕ! Конкурс по программированию!

Проект Programmers.kz и школа hotPen3D2D предлагает Вам курсы по веб-дизайну, веб-программированию и компьютерной графике. Подробности здесь.

 
Информация к новости
 (голосов: 3)

Вычисление определённого интеграла методом Симпсона

Категория: Программирование » Delphi » Статьи и исходники » Синтаксис » Математика



Автор: Dimka Maslov
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Вычисление определённого интеграла методом Симпсона
A, B - границы интегрирования
Eps - заданная относительная точность вычисления
F - подинтегральная функция
Зависимости: нет
Автор:       Dimka Maslov, mainbox@endimus.ru
Copyright:   Dimka Maslov
Дата:        26 ноября 2003 г.
***************************************************** }
type
  TDoubleFunc = function(X: Double): Double;
function Integral(A, B, Eps: Double; F: TDoubleFunc): Double;
  function InternalCalc(A, B: Double; F: TDoubleFunc; N: Integer): Double;
  var
    x, dx: Double;
    i: Integer;
  begin
    dx := (B - A) / N;
    Result := 0;
    x := A;
    for i := 1 to N do
    begin
      Result := Result + dx * (F(x) + 4 * F(x + dx / 2) + F(x + dx)) / 6;
      x := x + dx;
    end;
  end;
var
  N: Integer;
  Prev: Double;
begin
  Result := InternalCalc(A, B, F, 4);
  N := 4;
  repeat
    Prev := Result;
    N := N shl 1;
    Result := InternalCalc(A, B, F, N);
  until (Result = 0) or (Abs((Result - Prev) / Result) < Eps);
end;

Пример использования:

function F(X: Double): Double;
begin
  Result := X * X * X;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := FloatToStr(Integral(-10, 10, 0.00001, F));
end;

Источник: delphiworld.narod.ru

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Добавление комментария

Имя:*
E-Mail:
Комментарий:
Введите два слова, показанных на изображении: *