Текст подпрограммы и версий
zp55r_p.zip  zp55e_p.zip 
Тексты тестовых примеров
tzp55r_p.zip  tzp55e_p.zip 

Подпрограмма:  ZP55R (модуль ZP55R_p)

Назначение

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

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

Пусть заданы два полинома с вещественными коэффициентами  A (X) и  B (X) степени NP и MP соответственно

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

              B(X)  =  B(1) + B(2)*X + B(3)*X2 + ... + B(MP + 1)*XMP 

Подпрограмма ZP55R вычисляет неполное частное  Q (X) и остаток  R (X) при делении полинома  A (X) на  B (X), т.е. такие полиномы  Q (X) и  R (X), что

               A(X)  =  Q(X) B(X) + R(X) 

Если MP > NP, то  Q (X) ≡ 0 и  R (X) ≡ A (X). Если MP ≤ NP, то полином  Q (X) имеет степень NP - MP, а  R (X) является полиномом степени не выше MP - 1. При этом элемент массива R (MP + 1) полагается равным нулю.

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

procedure ZP55R(NP :Integer; var A :Array of Real; MP :Integer;
                var B :Array of Real; var Q :Array of Real;
                var R :Array of Real);

Параметры

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

Версии

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

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

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

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

Unit TZP55R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ZP55R_p;

function TZP55R: String;

implementation

function TZP55R: String;
var
NP,MP,_i :Integer;
B :Array [0..6] of Real;
B2 :Array [0..2] of Real;
Q :Array [0..6] of Real;
R :Array [0..6] of Real;
const
A :Array [0..6] of Real = ( -10.0,30.0,-50.0,40.0,-20.0,8.0,8.0 );
B1 :Array [0..4] of Real = ( -8.0,6.0,-4.0,3.0,2.0 );
begin
Result := '';  { результат функции }
NP := 6;
МР := 4;
ZP55R(NP,A,MP,B1,Q,R);
Result := Result + #$0D#$0A;
for _i:=0 to 6 do
 begin
  Result := Result + Format('%20.16f ',[Q[_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 6 do
 begin
  Result := Result + Format('%20.16f ',[R[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TZP55R',Result);  { вывод результатов в файл TZP55R.res }
exit;
end;

end.

Результаты:

          Q = ( 1.,- 2.,4. ) 
          R = ( - 2., 8., - 2., 5. ) 
          R(5) = R(MP + 1) = 0.0