Текст подпрограммы и версий zp36r_p.zip zp36e_p.zip |
Тексты тестовых примеров tzp36r_p.zip tzp36e_p.zip |
Вычисление синуса и косинуса от полинома с вещественными коэффициентами.
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