Текст подпрограммы и версий zp18r_p.zip zp18e_p.zip |
Тексты тестовых примеров tzp18r_p.zip tzp18e_p.zip |
Вычисление числа вещественных корней полинома с вещественными коэффициентами вне и внутри заданного отрезка.
Подпрограмма ZP18R вычисляет число вещественных корней полинома
A(1) + A(2)*X + A(3)*X2 + ... + A(NP + 1)*XNP
с вещественными коэффициентами вне и внутри заданного отрезка [ХN, ХК] методом Штурма.
Дж.Х.Уилкинсон, Алгебраическая проблема собственных значений, "Наука", М., 1970.
procedure ZP18R(NP :Integer; var A :Array of Real; XN :Real; XK :Real; var NB :Integer; var NR :Integer; var NA :Integer; var RAB :Array of Real; NP1 :Integer; IERR :Integer);
Параметры
NP - | заданная степень полинома (тип: целый); |
A - | вещественный вектор длины NР + 1, содержащий коэффициенты исходного полинома в порядке возрастания степеней; |
XN - | заданная нижняя граница отрезка (тип: вещественный); |
XK - | заданная верхняя граница отрезка (тип: вещественный); |
NB - NR NA | целые перемеменные, значения которых в результате работы подпрограммы полагаются равными числу вещественных корней исходного полинома, меньших ХN, лежащих внутри [ХN, ХК] и больших ХК соответственно; |
RAB - | вещественный двумерный массив размера NР1 на NP1, используемый в подпрограмме как рабочий; |
NP1 - | задается равным NР + 1 (тип: целый); |
IERR - | целая переменная, значение которой полагается равным 65, если в пределах ошибок округления заданный полином имеет кратные корни. |
Версии
ZP18E - | вычисление числа вещественных корней полинома с вещественными коэффициентами вне и внутри заданного отрезка с расширенной (Extended) точностью. При этом вектор А, двумерный массив RАВ, а также ХN и ХК должны иметь тип Extended. |
Вызываемые подпрограммы
UTZP10 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы ZР18R. |
UTZP11 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы ZР18E. |
Замечания по использованию: нет
Unit TZP18R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, ZP18R_p; function TZP18R: String; implementation function TZP18R: String; var NP,NP1,_i,NB,NR,NA,IERR :Integer; XN,ХК :Real; RАВ :Array [0..35] of Real; const A :Array [0..4] of Real = ( 24.0,-50.0,35.0,-10.0,1.0 ); begin for _i:=0 to 35 do RAB[_i] := 0.0; //начальное обнуление массива Result := ''; { результат функции } NP := 4; NP1 := 5; XN := 1.5; ХК := 3.5; ZP18R(NP,A,XN,XK,NB,NR,NA,RAB,NP1,IERR); 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('%20.16f %20.16f %10d %10d %10d ', [XN,XK,NB,NR,NA]) + #$0D#$0A; Result := Result + #$0D#$0A; for _i:=0 to 35 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; Result := Result + Format('%10d ',[NP1]) + #$0D#$0A; UtRes('TZP18R',Result); { вывод результатов в файл TZP18R.res } exit; end; end. Результаты: NВ = 1 , NR = 2 , NА = 1 , IЕRR = 0