Текст подпрограммы и версий amz8r_p.zip , amz8e_p.zip |
Тексты тестовых примеров tamz8r_p.zip , tamz8e_p.zip |
Преобразование симметричной разреженной матрицы из формата RR (C) U в формат RR (U) U.
Описание форматов RR (С) U и RR (U) U приведены в описаниях подпрограмм AMTSR и AM21R .
Подпрограмма AMZ8R предназначена для формирования компактного представления симметричной матрицы А порядка N, заданной в формате RR (С) U, в виде верхнего треугольника и диагонали, т.е. в формате RR (U) U. Новое представление матрицы А формируется в тех же массивах, в которых задана исходная матрица.
С.Писсанецки. Технология разреженных матриц. - М.: Мир, 1988
procedure AMZ8R(var IA :Array of Integer; var JA :Array of Integer; var AN :Array of Real; var AD :Array of Real; N :Integer);
Параметры
IA,JA,AN - | на входе: заданные портрет и ненулевые элементы матрицы А в формате RR (С) U; на выходе: заданные портрет и ненулевые элементы верхнего треугольника матрицы А в формате RR (U) U; |
АD - | вещественный одномерный массив длины N, содержащий на выходе диагональные элементы матрицы А; |
N - | заданный порядок матрицы А (тип: целый). |
Версии
AMZ8E - | преобразование симметричной разреженной матрицы из формата RR (С) U в формат RR (U) U в режиме расширенной (Extended) точности; при этом параметры AN и AD должны иметь тип Extended. |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
Unit TAMZ8R_p; interface uses SysUtils, Math, { Delphi } LStruct, Lfunc, UtRes_p, AMZ8R_p; function TAMZ8R: String; implementation function TAMZ8R: String; var N,_i :Integer; AD :Array [0..3] of Real; const IA :Array [0..4] of Integer = ( 1,3,4,7,10 ); JA :Array [0..8] of Integer = ( 4,1,3,4,2,3,4,3,1 ); AN :Array [0..8] of Real = ( 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 ); begin Result := ''; { ТЕСТ ДЛЯ ПОДПРОГРАММЫ AMZ8R } N := 4; AMZ8R(IA,JA,AN,AD,N); Result := Result + Format('%s',[' IA=']); Result := Result + #$0D#$0A; for _i:=0 to 4 do begin Result := Result + Format('%5d ',[IA[_i]]); if ( ((_i+1) mod 5)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; Result := Result + Format('%s',[' JA=']); Result := Result + #$0D#$0A; for _i:=0 to 8 do begin Result := Result + Format('%5d ',[JA[_i]]); if ( ((_i+1) mod 9)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; Result := Result + Format('%s',[' AN=']); Result := Result + #$0D#$0A; for _i:=0 to 8 do begin Result := Result + Format('%20.16f ',[AN[_i]]); if ( ((_i+1) mod 5)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; Result := Result + Format('%s',[' AD=']); Result := Result + #$0D#$0A; for _i:=0 to 3 do begin Result := Result + Format('%20.16f ',[AD[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; UtRes('TAMZ8R',Result); { вывод результатов в файл TAMZ8R.res } exit; end; end. Результаты: IA = ( 1, 2, 3, 4, 4 ) JA = ( 4, 3, 4, 4, 2, 3, 4, 3, 1 ) AN = ( 1, 1, 1, 1, 1, 1, 1, 1, 1 ) AD = ( 1, 0, 1, 1 )