Текст подпрограммы и версий ( Пакаль ) 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