Текст подпрограммы и версий
zp18r_p.zip  zp18e_p.zip 
Тексты тестовых примеров
tzp18r_p.zip  tzp18e_p.zip 

Подпрограмма:  ZP18R (модуль ZP18R_p)

Назначение

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

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

Подпрограмма 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