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

Подпрограмма:  ZP10R (модуль ZP10R_p)

Назначение

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

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

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

     A(1) + A(2)*X + A(3)*X2 + ... + A(NP + 1)*XNP , 

у которого коэффициенты  А ( I ),  I = 1, 2, 3, ..., NР + 1 являются вещественными.

ZP10R реализует метод Лагерра, имеющий кубическую сходимость для изолированных корней и линейную сходимость для кратных корней. Текущая итерация берется в качестве корня, когда значение полинома при этой итерации меньше, чем вычисленная граница ошибок округления при нахождении значения полинома для этой итерации. Степень исходного полинома уменьшается, когда найден вещественный корень или пара комплексных корней, после чего итерационный процесс применяется к полиному уменьшенной степени.

Дж.Х.Уилкинсон, Алгебраическая проблема собственных значений, "Наука", М., 1970.

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

procedure ZP10R(NP :Integer; var A :Array of Real;
                var ROOT :Array of Complex; var DA :Array of Real;
                var DZ :Array of Real; var IERR :Integer);

Параметры

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

Версии: нет

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

ZP14R - вычисление корней квадратного уравнения с вещественными коэффициентами;
ZP14C - вычисление корней квадратного уравнения с комплексными коэффициентами;
UTZP10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы ZР10R.

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

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

Unit TZP10R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ZP10R_p;

function TZP10R: String;

implementation

function TZP10R: String;
var
NP,_i,IERR :Integer;
RООТ :Array [0..2] of Complex;
DA :Array [0..3] of Real;
DZ :Array [0..3] of Real;
const
A :Array [0..3] of Real = ( -2.0,4.0,-3.0,1.0 );
begin
Result := '';  { результат функции }
NP := 3;
ZP10R(NP,A,ROOT,DA,DZ,IERR);
Result := Result + Format('%5d ',[IERR]) + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 2 do
 begin
  Result := Result + Format('%20.16f %20.16f ',
 [ROOT[_i].re,ROOT[_i].im]);
  if ( ((_i+1) mod 2)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TZP10R',Result);  { вывод результатов в файл TZP10R.res }
exit;
end;

end.

Результаты:

       RООТ(1) = (1.0, 0.0) ,   RООТ(2) = (1.0, 1.0) ,
       ROOT(3) = (1.0, - 1.0) , IERR = 0