Текст подпрограммы и версий
zp40r_p.zip  zp40e_p.zip 
Тексты тестовых примеров
tzp40r_p.zip  tzp40e_p.zip 

Подпрограмма:  ZP40R (модуль ZP40R_p)

Назначение

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

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

ZP40R вычисляет коэффициенты полинома

       B(X)  =  B(1) + B(2)*Y + B(3)*Y2 + ... + B(NP + 1)*YNP , 

получающегося из данного полинома с вещественными коэффициентами

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

линейным изменением аргумента Y = u * Х + v.

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

procedure ZP40R(NP :Integer; var A :Array of Real;
                var B :Array of Real; U :Real; V :Real;
                var RAB :Array of Real);

Параметры

NP - заданная степень полинома (тип: целый);
A - вещественный вектор длины NР + 1, содержащий коэффициенты заданного полинома  А (Х) в порядке возрастания степеней;
B - вещественный вектор длины NР + 1, содержащий вычисленные коэффициенты полинома  В (Х) в порядке возрастания степеней;
U, V - заданные значения  u  и  v (тип: вещественный);
RAB - вещественный вектор длины NР + 1, используемый в подпрограмме как рабочий.

Версии

ZP40E - вычисление коэффициентов полинома, получающегося из данного полинома с вещественными коэффициентами линейным изменением аргумента с расширенной (Extended) точностью. При этом векторы А, В, RАВ, а также U и V должны иметь тип Extended.

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

ZP30R - вычисление значения полинома с вещественными коэффициентами от заданного вещественного аргумента. Используется в подпрограмме ZР40R.
ZP30E - вычисление значения полинома с вещественными коэффициентами от заданного вещественного аргумента с расширенной (Extended) точностью. Используется в подпрограмме ZР40E.

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

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

Unit TZP40R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ZP40R_p;

function TZP40R: String;

implementation

function TZP40R: String;
var
NP,_i :Integer;
U,V :Real;
B :Array [0..2] of Real;
RАВ :Array [0..3] of Real;
const
A :Array [0..2] of Real = ( 1.0,2.0,3.0 );
begin
Result := '';  { результат функции }
NP := 2;
U := 2.0;
V := 3.0;
ZP40R(NP,A,B,U,V,RAB);
Result := Result + Format(' %3d %20.16f %20.16f ',[NP,U,V]) + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 2 do
 begin
  Result := Result + Format('%20.16f ',[A[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 2 do
 begin
  Result := Result + Format('%20.16f ',[B[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 3 do
 begin
  Result := Result + Format('%20.16f ',[RAB[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TZP40R',Result);  { вывод результатов в файл TZP40R.res }
exit;
end;

end.

Результаты:    В(1) = 4.75 ,   В(2) = - 3.5 ,   В(3) = 0.75