Текст подпрограммы и версий afh6r_p.zip |
Тексты тестовых примеров tafh6r_p.zip |
Символическое треугольное разложение симметричной положительно определенной разреженной матрицы, заданной в формате RR (U) U.
Описание формата RR (U) U приведено в описании подпрограммы AM21R .
Пусть симметричная положительно определенная разреженная матрица А порядка N задана в формате RR (U) U. Подпрограмма AFH6R выполняет символическое треугольное разложение матрицы А, т.е. формирует портрет матрицы U в разложении матрицы А в произведение трех матриц: A = UTDU, где U - верхняя треугольная матрица с единичной диагональю, а D - диагональная матрица. Портрет результирующей матрицы U формируется также в формате RR (U) U.
С.Писсанецки. Технология разреженных матриц. - М.: Мир, 1988.
procedure AFH6R(var IA :Array of Integer; var JA :Array of Integer; N :Integer; var IU :Array of Integer; var JU :Array of Integer; var IP :Array of Integer);
Параметры
IA, JA - | заданный портрет матрицы А; |
N - | заданный порядок матрицы А (тип: целый); |
IU, JU - | вычисленный портрет матрицы U; |
IP - | целый одномерный массив длины N, используемый в подпрограмме в качестве рабочего. |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию: нет
Unit TAFH6R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, AFH6R_p; function TAFH6R: String; implementation function TAFH6R: String; var N,_i :Integer; IU :Array [0..5] of Integer; JU :Array [0..3] of Integer; IP :Array [0..4] of Integer; const IA :Array [0..5] of Integer = ( 1,2,3,4,5,5 ); JA :Array [0..3] of Integer = ( 5,5,5,5 ); begin Result := ''; { результат функции } { ТЕСТ ДЛЯ ПОДПРОГРАММЫ AFH6R } N := 5; AFH6R(IA,JA,N,IU,JU,IP); Result := Result + Format('%s',[' IU=']); Result := Result + #$0D#$0A; for _i:=0 to 5 do begin Result := Result + Format('%5d ',[IU[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; Result := Result + Format('%s',[' JU=']); Result := Result + #$0D#$0A; for _i:=0 to 3 do begin Result := Result + Format('%5d ',[JU[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; UtRes('TAFH6R',Result); { вывод результатов в файл TAFH6R.res } exit; end; end. Результаты: IU = ( 1, 2, 3, 4, 5, 5 ) JU = ( 5, 5, 5, 5 )