![]() |
![]() ![]() ![]() ![]() |
|
Вычисление определенного интеграла методом левых и правых прямоугольников с заданной точностью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 | ||||