Текст подпрограммы и версий
zf19r_p.zip  zf19e_p.zip 
Тексты тестовых примеров
tzf19r_p.zip  tzf19e_p.zip 

Подпрограмма:  ZF19R (модуль ZF19R_p)

Назначение

Выделение заданного числа интервалов, на которых вещественная функция меняет знак.

Математическое описание

ZF19R внутри заданного интервала (A, B) выделяет NB интервалов, на которых вещественная функция  y = F (x) меняет знаки. Интервал (A, B) делится на  N частей, после чего на границах каждого из полученных интервалов проверяются знаки  F (x). Границы интервалов, на которых функция меняет знаки, запоминаются в одномерных массивах  A1 и  B1, а их число помещается в переменную NROOT.

Использование

procedure ZF19R(F :Func_F1; A :Real; B :Real; N :Integer;
                var A1 :Array of Real; var B1 :Array of Real;
                NB :Integer; var NROOT :Integer);

Параметры

F - имя вещественной подпрограммы - функции вычисления  F (x);
A, B - границы интервала, внутри которого выделяются искомые интервалы (тип: вещественный);
N - заданное количество разбиений исходного интервала (A, B) (тип: целый);
A1, B1 - вещественные вектора длины NB, в которых помещаются левые и правые границы выделенных интервалов, соответственно;
NB - заданное количество искомых интервалов (тип: целый);
NROOT - целая переменная, значение которой полагается равным количеству выделенных интервалов.

Версии

ZF19E - выделение заданного числа интервалов, на которых вещественная функция меняет знак, в режиме вычислений с расширенной (Extended) точностью. При этом параметры A, B, A1 и B1 должны иметь тип Extended, а подпрограмма - функция вычисления  F (x) тоже должна иметь тип Extended.

Вызываемые подпрограммы: нет

Замечания по использованию: нет

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

Unit TZF19R_p;
interface
uses
SysUtils, Math, LStruct, Lfunc, UtRes_p, FZF19R_p, ZF19R_p;

function TZF19R: String; 

implementation

function TZF19R: String;
var
N,NB,I,NRООТ :Integer;
A,B :Real;
A1 :Array [0..49] of Real;
B1 :Array [0..49] of Real;
begin
Result := '';
A := -2*3.15;
B := 2*3.15;
N := 100;
NB := 50;
ZF19R(FZF19R,A,B,N,A1,B1,NB,NROOT);
Result := Result + #$0D#$0A;
for I:=1 to NRООТ do
 begin
  Result := Result + Format('%20.16f ',[A1[I-1]]) + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + Format('%s',[' ВЕКТОР B1']) + #$0D#$0A; 
Result := Result + #$0D#$0A;
for I:=1 to NRООТ do
 begin
  Result := Result + Format('%20.16f ',[B1[I-1]]) + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + Format('%5d ',[NROOT]) + #$0D#$0A;
UtRes('TZF19R',Result);  //вывод результатов в файл TZF19R.res
exit;
end;

end.

Unit FZF19R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc;

function FZF19R(X :Real): Real;
implementation

function FZF19R(X :Real): Real;
begin
Result := Sin(X);
end;

end.

Результаты:

       A1  =  ( - 6.3, - 3.15, - 0.235*10 - 5, 3.02, 6.17 ) 
       B1  =  ( - 6.17, - 3.02, 0.126, 3.15, 6.3 ) 

       NROOT = 5