Текст подпрограммы и версий zp55r_p.zip zp55e_p.zip |
Тексты тестовых примеров tzp55r_p.zip tzp55e_p.zip |
Вычисление неполного частного и остатка при делении двух полиномов с вещественными коэффициентами.
Пусть заданы два полинома с вещественными коэффициентами 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