Текст подпрограммы и версий
zp17r_p.zip  zp17e_p.zip 
Тексты тестовых примеров
tzp17r_p.zip  tzp17e_p.zip 

Подпрограмма:  ZP17R (модуль ZP17R_p)

Назначение

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

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

Подпрограмма ZP17R вычисляет корни уравнения четвертой степени

       A(1)*X4 + A(2)*X3 + A(3)*X2 + A(4)*X + A(5)  =  0.0  , 

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

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

procedure ZP17R(var A :Array of Real; var NREAL :Integer;
                var ROOT :Array of Real; var IERR :Integer);

Параметры

A - вещественный вектор длины 5, содержащий коэффициенты исходного уравнения;
NREAL - целая переменная, значение которой в результате работы подпрограммы полагается равным числу вещественных корней уравнения;
ROOT - вещественный вектор длины 4, содержащий вычисленные корни;
IERR - целая переменная, значение которой в результате работы подпрограммы полагается равным 65, если коэффициент  А (1) при старшей степени равен 0.

Версии

ZP17E - вычисление корней уравнения четвертой степени с вещественными коэффициентами с расширенной (Extended) точностью. При этом векторы А и RООТ должны иметь тип Extended.

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

ZP16R - вычисление корней уравнения третьей степени с вещественными коэффициентами. Используется в подпрограмме ZР17R.
UTZP10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы ZР17R.
ZP16E - вычисление корней уравнения третьей степени с вещественными коэффициентами с расширенной (Extended) точностью. Используется в подпрограмме ZР17E.
UTZP11 - подпрограмма выдачи диагностических сообщений при работе подпрограммы ZР17E.

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

 

Если NReal = 0, то вычисленные корни имеют вид RООТ (1) ± RООТ (2) i и RООТ (3) ± RООТ (4) i, при этом RООТ (2) > 0. и RООТ (4) > 0.

Если NReal = 2, то RООТ (1) ≤ RООТ (2), а вторая пара корней имеет вид RООТ (3) ± RООТ (4) i, при этом RООТ (4) > 0.

Если NReal = 4, то RООТ (1) ≤ RООТ (2) ≤ RООТ (3) ≤ RООТ (4).

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

Unit TZP17R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ZP17R_p;

function TZP17R: String;

implementation

function TZP17R: String;
var
_i,NREAL,IERR :Integer;
RООТ :Array [0..3] of Real;
const
A :Array [0..4] of Real = ( 1.0,-10.0,35.0,-50.0,24.0 );
begin
Result := '';  { результат функции }
Result := Result + Format('%s',[' TEST FOR SUBROUTINE ZP17R ']);
ZP17R(A,NREAL,ROOT,IERR);
Result := Result + Format('%s',[#$0D#$0A + ' COEFF: ']);
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('%s',[#$0D#$0A + ' REALS: ']);
Result := Result + Format('%5d ',[NREAL]);
Result := Result + Format('%s',[#$0D#$0A + ' ROOTS: ']);
Result := Result + #$0D#$0A;
for _i:=0 to 3 do
 begin
  Result := Result + Format('%20.16f ',[ROOT[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + Format('%s',[#$0D#$0A + '  IERR: ']);
Result := Result + Format('%5d ',[IERR]);
UtRes('TZP17R',Result);  { вывод результатов в файл TZP17R.res }
exit;
end;

end.

Результаты: 

       RООТ(1) = 1. ,  RООТ(2) = 2. ,  RООТ(3) = 3. ,  ROOT(4) = 4. ,
       NREAL   = 4 ,    IERR = 0