Текст подпрограммы и версий
amz0r_p.zip , amz0e_p.zip , amz0c_p.zip
Тексты тестовых примеров
tamz0r_p.zip , tamz0e_p.zip , tamz0c_p.zip

Подпрограмма:  AMZ0R (модуль AMZ0R_p)

Назначение

Преобразование полной симметричной матрицы в компактную форму представления.

Математическое описание

AMZ0R преобразует полную симметричную матрицу  А порядка  N в компактную форму представления. Тем самым минимизируется расход памяти, требуемой на хранение симметричной матрицы.

Использование

procedure AMZ0R(var A :Array of Real; N :Integer;
                var B :Array of Real); 

Параметры

A - вещественный двумерный массив размера N на N, в котором задается симметричная матрица в полной форме;
N - порядок матрицы (тип: целый);
B - вещественный вектор длины N на (N + 1)/2, в котором запоминается исходная симметричная матрица в компактной форме представления.

Версии

AMZ0E - преобразование полной симметричной матрицы, заданной с расширенной (Extended) точностью, в компактную форму представления.
AMZ0C - преобразование полной эрмитовой матрицы в компактную форму представления.

Вызываемые подпрограммы: нет.

Замечания по использованию

 

Вектор  B может занимать то же место в памяти, что и массив  А (это означает, что первый элемент вектора  B может совпадать с первым элементом массива  А).

В подпрограмме АМZ0E параметры  А и  B должны иметь тип Extended.

В подпрограмме АМZ0С параметры  А и  B должны иметь тип Complex.

Пример использования

   1.
Unit tamz0r_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, AMZ0R_p;

function tamz0r: String; 

implementation

function tamz0r: String;
var
N,_i :Integer;
const
A :Array [0..8] of Real = ( 1.1,2.1,3.1,2.1,2.2,3.2,3.1,3.2,3.3 );
begin
Result := '';
N := 3;
AMZ0R(A,N,A);
Result := Result + #$0D#$0A;
for _i:=0 to 8 do
 begin
  Result := Result + Format('%20.16f ',[A[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('tamz0r',Result);  { вывод результатов в файл tamz0r.res }
exit;
end;

end.


Результаты:    B  =  ( 1.1, 2.1, 2.2, 3.1, 3.2, 3.3 )

   2. 
Unit tamz0c_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AMZ0C_p;

function tamz0c: String;

implementation

function tamz0c: String;
var
N,_i :Integer;
B :Array [0..5] of Complex;
const
A :Array [0..8] of Complex = ( ( re:1.1; im:0.0 ),( re:2.1; im:2.1 ),( re:3.1; 
im:3.1 ),( re:2.1; im:-2.1 ),( re:2.2; im:0.0 ),( 
re:3.2; im:3.2 ),( re:3.1; im:-3.1 ),( re:3.2; 
im:-3.2 ),( re:3.3; im: 0.0 ) );
begin
Result := '';  { результат функции }
N  := 3;
AMZ0C(A,N,B);
Result := Result + #$0D#$0A;
for _i:=0 to 5 do
 begin
  Result := Result + Format('%20.16f %20.16f ',[B[_i].re,B[_i].im]);
  if ( ((_i+1) mod 2)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('tamz0c',Result);  { вывод результатов в файл tamz0c.res }
exit;
end;

end.


Результаты:

       B = ( (1.1, 0.), (2.1, 2.1), (2.2, 0.), (3.1, 3.1), (3.2, 3.2), (3.3, 0.) )