Текст подпрограммы и версий ait1r_p.zip ait1e_p.zip ait1c_p.zip |
Тексты тестовых примеров tait1r_p.zip tait1e_p.zip tait1c_p.zip |
Обращение вещественной треугольной матрицы.
Заданная вещественная верхняя (нижняя) треугольная матрица А порядка N обращается путем последовательного обращения треугольных подматриц Аi порядка i, i = 1,...,N, стоящих в левом верхнем (правом нижнем) углу матрицы.
Дж. Форсайт, М. Малькольм, К. Моулер. Машинные методы математических вычислений, М.: Мир, 1980.
procedure AIT1R(var A :Array of Real; M :Integer; N :Integer; LOW :Integer; var IERR :Integer);
Параметры
A - | вещественный двумерный массив размера М на N, в котором задается исходная треугольная матрица; на выходе содержит вычисленную матрицу А-1; |
M - | первая размерность массива А в вызывающей программе (тип: целый); |
N - | порядок матрицы А (тип: целый); |
LOW - | признак обращаемой матрицы (тип: целый), причем LОW = 0, если матрица А верхняя треугольная, LОW≠0, если матрица А нижняя треугольная; |
IERR - | целая переменная, содержащая на выходе информацию о прохождении счета; при этом: |
IЕRR=65 - | если М ≤ 0 или N ≤ 0, |
IЕRR=66 - | если в процессе работы произошло переполнение (это говорит о том, что некоторые элементы матрицы А- 1 превосходят по абсолютной величине максимальное представимое на данной машине число); |
IЕRR=-К - | если в К - й строке матрицы А диагональный элемент равен нулю (это свидетельствует о вырожденности матрицы А). Если таких строк несколько, то значение K полагается равным номеру первой из них. |
Версии
AIT1E - | обращение вещественной треугольной матрицы, заданной с расширенной (Extended) точностью. |
AIT1C - | обращение комплексной треугольной матрицы. |
Вызываемые подпрограммы
UTAFSI - | подпрограмма выдачи диагностических сообщений. |
Замечания по использованию
1. |
В подпрограмме АIТ1E массив А имеет тип External. | |
2. |
В подпрограмме АIТ1С массив А имеет тип Сomplex. | |
3. | Если вырабатывается значение переменной IЕRR, отличное от нуля, то выдается соответствующее диагностическое сообщение и происходит выход из подпрограммы. |
Unit TAIT1R_p; interface uses SysUtils, Math, { Delphi } LStruct, Lfunc, UtRes_p, AIT1R_p; function TAIT1R: String; implementation function TAIT1R: String; var M,N,LOW,J,I,K,IERR :Integer; A :Array [0..24] of Real; B :Array [0..24] of Real; C :Array [0..24] of Real; D :Array [0..24] of Real; label _3,_4,_5,_6,_7; begIN Result := ''; M := 5; N := 5; LOW := 0; { ** обнуление матриц ** } for J:=1 to N do begin for I:=1 to N do begin A[(I-1)+(J-1)*5] := 0.0; B[(I-1)+(J-1)*5] := 0.0; end; end; { *************** } for J:=1 to N do begin for I:=1 to J do begin A[(I-1)+(J-1)*5] := (I*10+J); B[(I-1)+(J-1)*5] := A[(I-1)+(J-1)*5]; _3: end; _4: end; Result := Result + Format('%s',[' A=']); Result := Result + #$0D#$0A; for J:=1 to N do begin for I:=1 to M do begin Result := Result + Format('%10.4f ',[A[(I-1)+(J-1)*5]]) + #$0D#$0A; end; end; Result := Result + #$0D#$0A; AIT1R(A,M,N,LOW,IERR); Result := Result + Format('%s',[' INVERSE(A)=']); Result := Result + #$0D#$0A; for J:=1 to N do begin for I:=1 to M do begin Result := Result + Format('%10.4f ',[A[(I-1)+(J-1)*5]]) + #$0D#$0A; end; end; Result := Result + #$0D#$0A; for I:=1 to M do begin for J:=1 to N do begin C[(I-1)+(J-1)*5] := 0.0; D[(I-1)+(J-1)*5] := 0.0; for K:=1 to N do begin C[(I-1)+(J-1)*5] := C[(I-1)+(J-1)*5]+B[(I-1)+(K-1)*5]*A[(K-1)+(J-1)*5]; D[(I-1)+(J-1)*5] := D[(I-1)+(J-1)*5]+A[(I-1)+(K-1)*5]*B[(K-1)+(J-1)*5]; _5: end; _6: end; _7: end; Result := Result + Format('%s',[' A*INVERSE(A)=']); Result := Result + #$0D#$0A; for J:=1 to N do begin for I:=1 to M do begin Result := Result + Format('%10.4f ',[C[(I-1)+(J-1)*5]]) + #$0D#$0A; end; end; Result := Result + #$0D#$0A; Result := Result + Format('%s',[' INVERSE(A)*A=']); Result := Result + #$0D#$0A; for J:=1 to N do begin for I:=1 to M do begin Result := Result + Format('%10.4f ',[D[(I-1)+(J-1)*5]]) + #$0D#$0A; end; end; Result := Result + #$0D#$0A; Result := Result + Format('%s',[' IERR=']); Result := Result + Format('%3d ',[IERR]) + #$0D#$0A; UtRes('TAIT1R',Result); { вывод результатов в файл TAIT1R.res } exit; end; end. Результаты: | 9.091E-2 -4.959E-2 -1.251E-3 -9.107E-4 -7.120E-4 | | 0 4.546E-2 -3.168E-2 -3.131E-4 -2.448E-4 | A = | 0 0 3.031E-2 -2.342E-2 -1.252E-4 | | 0 0 0 2.273E-2 -1.860E-2 | | 0 0 0 0 1.818E-2 |