|
Текст подпрограммы и версий ( Пакаль ) adt1r_p.zip adt1e_p.zip adt1c_p.zip |
Тексты тестовых примеров tadt1r_p.zip tadt1e_p.zip tadt1c_p.zip |
Вычисление определителя вещественной треугольной матрицы, заданной в компактной форме.
Для заданной в компактной форме вещественной треугольной матрицы А порядка 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