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