Текст подпрограммы и версий
zp36r_p.zip  zp36e_p.zip 
Тексты тестовых примеров
tzp36r_p.zip  tzp36e_p.zip 

Подпрограмма:  ZP36R (модуль ZP36R_p)

Назначение

Вычисление синуса и косинуса от полинома с вещественными коэффициентами.

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

ZP36R вычисляет М первых коэффициентов полиномов

       B(X)  =  B(1) + B(2)*X + B(3)*X2 + ... + B(M)*X(M - 1) + ... 
  и
       C(X)  =  C(1) + C(2)*X + C(3)*X2 + ... + C(M)*X(M - 1) + ...  , 

таких, что  В (Х) = sin А (Х) и  С (Х) = cos А (Х), где  А (Х) - заданный полином степени NР

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

у которого коэффициенты  А ( I ),  I = 1, 2, 3, ..., NР являются вещественными.

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

procedure ZP36R(NP :Integer; var A :Array of Real; M :Integer;
                var B :Array of Real; var C :Array of Real);

Параметры

NP - заданная степень полинома  А (Х) (тип: целый);
A - вещественный вектор длины NР + 1, содержащий коэффициенты заданного полинома  А (Х) в порядке возрастания степеней;
M - заданное число искомых коэффициентов полиномов  В (Х) и  С (Х) (тип: целый);
B, C - вещественные векторы длины М, содержащие вычисленные коэффициенты полиномов  В (Х) и  С (Х) в порядке возрастания степеней.

Версии

ZP36E - вычисление синуса и косинуса от полинома с вещественными коэффициентами с расширенной (Extended) точностью. При этом векторы А, В и С должны иметь тип Extended.

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

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

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

Unit tzp36r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ZP36R_p;

function tzp36r: String;

implementation

function tzp36r: String;
var
NP,M,_i :Integer;
B :Array [0..3] of Real;
C :Array [0..3] of Real;
const
A :Array [0..4] of Real = ( 24.0,-50.0,35.0,-10.0,1.0 );
begin
Result := '';  { результат функции }
NP := 4;
M := 4;
ZP36R(NP,A,M,B,C);
Result := Result + Format('%10d ',[NP]) + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 4 do
 begin
  Result := Result + Format('%20.16f ',[A[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + Format('%10d ',[M]) + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 3 do
 begin
  Result := Result + Format('%20.16f ',[B[_i]]);
  if ( ((_i+1) mod 4)=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 ',[C[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('tzp36r',Result);  { вывод результатов в файл tzp36r.res }
exit;
end;

end.


Результаты:
 
       В(1) = - 0.905578 ,      В(2) = - 21.208950 ,
       B(3) = 1146.819218 ,   B(4) = 7248.058730

       C(1) = 0.424179 ,         C(2) = - 45.278918 , 
       C(3) = - 498.528516 ,   C(4) = 19599.473354