|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.su/lib_na/cat/zp_htm_p/zp12c_p.htm
Дата изменения: Wed May 18 15:51:14 2011 Дата индексирования: Mon Oct 1 22:58:05 2012 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий 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.)