![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Вычисление определенного интеграла методом левых и правых прямоугольников с заданной точностьюDelphi , Синтаксис , Математика
Автор: Алексей Глеб { **** UBPFD *********** by delphibase.endimus.com **** >> Вычисление определенного интеграла методом левых и правых прямоугольников с заданной точностью "Просто расчет площади под функцией, параметры: a,b - пределы интегрирования, a<=b eps - допустимая погрешность, практически гарантируется, что расхождение результата с истинным значением интеграла не превосходит по модулю указанную величину. Только не переборщите :-)) intF - подинтегральная функция. Естественно, желательно задавать функции, интегрируемые в смысле Римана. Объявление смотри в примере. Примечание: Несобственные интегралы не считаем :-) Проверок на переполнение нет, да и вообще нет проверок..." (Romkin (Москва)) Модуль сделан на основе функции вычисления опред. интеграла методом трапеций от Romkin'а (Москва). Зависимости: Нет Автор: Алексей Глеб, noodlesf@mail.ru, Чернигов Copyright: с подачи Romkin'а (Москва) Дата: 18 мая 2003 г. ***************************************************** } unit IntPram; interface type TIntFunc = function(X: Double): Double; function LeftPramInt(a, b: Double; eps: Double; IntF: TIntFunc): Double; function RightPramInt(a, b: Double; eps: Double; IntF: TIntFunc): Double; implementation function LeftPramInt(a, b: Double; eps: Double; IntF: TIntFunc): Double; var //S - площадь на предыдущей итерации, //step - "толщина" прямоугольника //gran - передвигаемая от a до b граница //n - число прямоугольников, удваивается на каждой итерации S, step, gran: Double; n: integer; begin //Сначала приближение одного прямоугольника step := b - a; Result := IntF(a) * step; n := 1; repeat S := Result; n := n * 2; step := (b - a) / n; Gran := a; Result := 0; //Ниже - просто вычисляем площади новых прямоугольников while gran < b do begin Result := Result + IntF(gran) * step; gran := gran + step; end; until abs(S - Result) <= eps; end; function RightPramInt(a, b: Double; eps: Double; IntF: TIntFunc): Double; var //S - площадь на предыдущей итерации, //step - "толщина" прямоугольника //gran - передвигаемая от a до b граница //n - число прямоугольников, удваивается на каждой итерации S, step, gran: Double; n: integer; begin //Сначала приближение одного прямоугольника step := b - a; Result := IntF(b) * step; n := 1; repeat S := Result; n := n * 2; step := (b - a) / n; Gran := b; Result := 0; //Ниже - просто вычисляем площади новых прямоугольников while a < gran do begin Result := Result + IntF(gran) * step; gran := gran - step; end; until abs(S - Result) <= eps; end; end. Пример использования: uses IntPram; function IntSqrt(x: Double): Double; begin Result := Sqrt(x); end; procedure TForm1.Button1Click(Sender: TObject); begin label1.Caption := FloatToStr(LeftPramInt(0, Pi, 0.00001, S)); label2.Caption := FloatToStr(RightPramInt(0, Pi, 0.00001, S)); end; Программный проект на Delphi, который рассчитывает определенный интеграл заданной функции с помощью методов левых и правых прямоугольников с указанной точностью. Программа определяет два функционала:
Программа использует цикл для разбиения интервала Программа также включает пример использования функций, который определяет функцию Некоторые наблюдения:
Вычисление определенного интеграла методом левых и правых прямоугольников с заданной точностью позволяет получать приблизительное значение интеграла с гарантированной погрешностью не более указанной. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Математика ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |