Текст подпрограммы и версий ( Пакаль )
adt1r_p.zip   adt1e_p.zip   adt1c_p.zip
Тексты тестовых примеров
tadt1r_p.zip   tadt1e_p.zip   tadt1c_p.zip

Подпрограмма:  ADT1R (модуль ADT1R_p)

Назначение

Вычисление определителя вещественной треугольной матрицы, заданной в компактной форме.

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

Для заданной в компактной форме вещественной треугольной матрицы А порядка N вычисляется определитель как произведение ее диагональных элементов и записывается в виде

     det A = D1*10D2,  где  1.0 ≤ D1 < 10.0.

Дж. Форсайт, М. Малькольм, К. Моулер. Машинные методы математических вычислений. М.: Мир, 1980.

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

procedure ADT1R(var A :Array of Real; N :Integer; var DET1 :Real;
                var DET2 :Real; var IERR :Integer); 

Параметры

A - вектор длины N на (N+1)/2, в котором последовательно записаны столбцы (для верхней треугольной) или строки (для нижней треугольной) матрицы А (тип: вещественный);
N - порядок матрицы А (тип: целый);
DET1 - вещественная переменная, содержащая на выходе мантиссу определителя;
DET2 - вещественная переменная, содержащая на выходе десятичный порядок определителя;
IERR - целая переменная, содержащая на выходе информацию о прохождении счета, при этом:
IЕRR=65 - если N ≤ 0;
IЕRR=66 - если в процессе работы произошло переполнение (это говорит о том, что некоторые диагональные элементы матрицы А имеют порядок, равный  S - 1, где S - максимальный порядок для вещественных чисел на данной машине);
IЕRR=-К - где K - номер строки матрицы А с нулевым диагональным элементом (это свидетельствует о вырожденности матрицы А). Если таких строк несколько, то значение K равно номеру первой из них (см. замечания по использованию).

Версии

ADT1E - вычисление определителя вещественной треугольной матрицы, заданной в компактной форме с расширенной (Extended) точностью.
ADT1C - вычисление определителя комплексной треугольной матрицы, заданной в компактной форме.

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

UTAFSI - подпрограмма выдачи диагностических сообщений.

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

  1. 

В подпрограмме АDТ1E массив А и переменные DЕТ1 и DЕТ2 имеют тип Extended.

  2. 

В подпрограмме АDТ1С массив А и переменная DЕТ1 имеют тип Сomplex.

  3.  Если переменной IЕRR присваивается значение, отличное от нуля, то выдается соответствующее диагностическое сообщение, полагается DЕТ1 := 0.0,  DЕТ2 := 0.0 и происходит выход из подпрограммы.

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

Unit TADT1R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, ADT1R_p;

function TADT1R: String; 

implementation

function TADT1R: String;
var
NA,NAA,K,I,J,IERR :Integer;
DET1,DET2 :Real;
A :Array [0..14] of Real;
label
_3,_4;
begin
Result := '';
NA := 5;
NАА := 15;
K := 0;
for I:=1 to NA do
 begin
  for J:=1 to I do
   begin
    K := K+1;
    A[K-1] := (I*10+J);
_3:
   end;
_4:
 end;
ADT1R(A,NA,DET1,DET2,IERR);
Result := Result + Format('%s',['   A=']);
Result := Result + #$0D#$0A;
for I:=1 to NАА do
 begin
  Result := Result + Format('%20.16f',[A[I-1]]) + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + Format('%s',['   IERR=']);
Result := Result + Format('%3d',[IERR]) + #$0D#$0A;
Result := Result + Format('%s',['   DET1=']);
Result := Result + Format('%20.16f',[DET1]) + #$0D#$0A;
Result := Result + Format('%s',['   DET2=']);
Result := Result + Format('%20.16f',[DET2]) + #$0D#$0A;
UtRes('TADT1R',Result);  { вывод результатов в файл TADT1R.res }
exit;
end;

end.


Результаты:

        DET1  =  1.932612
        DET2  =  7.0