Текст подпрограммы и версий
zp12c_p.zip 
Тексты тестовых примеров
tzp12c_p.zip 

Подпрограмма:  ZP12C (модуль ZP12C_p)

Назначение

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

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

ZP12C вычисляет NР комплексных корней полинома

       A(1) + A(2)*X + ... + A(NP)*X(NP - 1) + A(NP + 1)*X(NP) , 

с комплексными коэффициентами  А ( I ),  I = 1, 2, ..., NР + 1.

Реализуется модифицированный метод наискорейшего спуска.

Воеводин В.В., Павленко О.А. Модифицированный метод наискорейшего спуска для определения всех корней полинома, в Сб. "Численный анализ на Фортране", вып.27, изд - во МГУ, 1980.

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

procedure ZP12C(var NP :Integer; var A :Array of Real;
                var D :Array of Real; var B :Array of Real;
                var IERR :Integer);

Параметры

NP - заданная степень полинома (тип: целый);
A - комплексный вектор длины NР + 1, содержащий коэффициенты исходного полинома в порядке возрастания степеней;
D - комплексный вектор длины NР + 1, используемый в подпрограмме как рабочий;
ROOT - комплексный вектор длины NР + 1, на выходе содержащий в первых NР компонентах вычисленные корни;
IERR - целая переменная, служащая для сообщений об ошибках, обнаруженных в ходе работы подпрограммы; при этом:
IЕRR= 1 - когда один или несколько коэффициентов при старших степенях равны (0., 0.). Соответствующее число корней в конце вектора RООТ полагаются равными (3.4E38, 0.);
IЕRR=68 - когда заданная степень полинома меньше 1.

Версии: нет

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

GSU2R - счетчик псевдослучайных чисел.
UTZP12 - подпрограмма выдачи диагностических сообщений при работе подпрограммы ZР12С.

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

  Используются служебные подпрограммы: ZР12С1, ZР12С2, ZР12С3, ZР12С4, ZР12С5.

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

Unit TZP12C_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ZP12C_p;

function TZP12C: String;

implementation

function TZP12C: String;
var
NP,I,IERR :Integer;
A :Array [0..7] of Real;
D :Array [0..7] of Real;
RООТ :Array [0..7] of Real;
begin
Result := '';  { результат функции }
A[0] := 10.0;
A[1] := 0.0;
A[2] := -8.0;
A[3] := 12.0;
A[4] := -3.0;
A[5] := -6.0;
A[6] := 1.0;
A[7] := 0.0;
NP := 3;
ZP12C(NP,A,D,ROOT,IERR);
Result := Result + Format('%s',['  IERR=']);
Result := Result + Format('%2d ',[IERR]);
Result := Result + Format('%s',['  KOPHИ=' + #$0D#$0A]);
Result := Result + #$0D#$0A;
for I:=1 to NP*2 do
 begin
  Result := Result + Format('%20.16f ',[ROOT[I-1]]) + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TZP12C',Result);  { вывод результатов в файл TZP12C.res }
exit;
end;

end.

Результаты:

       IERR  =  0

       ROOT(1)  =  (1., 2.)
       ROOT(2)  =  (1., 1.)
       ROOT(3)  =  (1., 3.)