Текст подпрограммы и версий
zp53r_p.zip  zp53e_p.zip 
Тексты тестовых примеров
tzp53r_p.zip  tzp53e_p.zip 

Подпрограмма:  ZP53R (модуль ZP53R_p)

Назначение

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

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

Пусть задан полином степени NP с вещественными коэффициентами

                 A(1) + A(2)*X + A(3)*X2 + ... + A(NP + 1)*XNP 

Подпрограмма ZP53R вычисляет значения полинома и его ND - 1 производных от заданного вещественного переменного и помещает эти значения в элементах массива  PD (1), PD (2), ..., PD (ND) соответственно.

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

procedure ZP53R(NP :Integer; var A :Array of Real; X :Real;
                ND :Integer; var PD :Array of Real);

Параметры

NP - заданная степень полинома (тип: целый);
A - вещественный вектор длины NP + 1, содержащий коэффициенты исходного полинома в порядке возрастания степеней;
X - заданное значение аргумента (тип: вещественный);
ND - длина вектора PD,  ND > 1 (тип: целый);
PD - вещественный вектор длины ND, содержащий в  PD (1) вычисленное значение полинома в точке  X, а в  PD (2), ..., PD (ND) - вычисленные значения его производных порядков от 1 до ND - 1 в точке  X.

Версии

ZP53E - вычисление значений полинома с вещественными коэффициентами и его производных от заданного вещественного аргумента в режиме расширенной (Extended) точности; при этом параметры A, X и PD должны иметь тип Extended.

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

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

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

Unit TZP53R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ZP53R_p;

function TZP53R: String;

implementation

function TZP53R: String;
var
NP,ND,_i :Integer;
X :Real;
A :Array [0..4] of Real;
PD :Array [0..5] of Real;
begin
Result := '';  { результат функции }
{ прототип оператора DАТА на FORTRANе  }
A[0] := 1.0;
A[1] := 2.0;
A[2] := 3.0;
A[3] := 4.0;
A[4] := 5.0;
NP := 4;
ND := 6;
X := 1.0;
ZP53R(NP,A,X,ND,PD);
Result := Result + #$0D#$0A;
for _i:=0 to 5 do
 begin
  Result := Result + Format('%20.16f ',[PD[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TZP53R',Result);  { вывод результатов в файл TZP53R.res }
exit;
end;

end.

Результаты:    PD  =  ( 15, 40, 90, 144, 120, 0 )