Текст подпрограммы и версий zp12c_p.zip |
Тексты тестовых примеров tzp12c_p.zip |
Вычисление корней полинома с комплексными коэффициентами методом наискорейшего спуска.
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.)