Текст подпрограммы и версий
amz1r_p.zip , amz1e_p.zip , amz1c_p.zip
Тексты тестовых примеров
tamz1r_p.zip , tamz1e_p.zip , tamz1c_p.zip

Подпрограмма:  AMZ1R (модуль AMZ1R_p)

Назначение

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

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

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

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

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

Параметры

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

Версии

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

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

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

 

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

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

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

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

   1.
Unit tamz1r_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, AMZ1R_p;

function tamz1r: String; 

implementation

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

end.


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

   2.
Unit tamz1c_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AMZ1C_p;

function tamz1c: String;

implementation

function tamz1c: String;
var
N,_i :Integer;
B :Array [0..8] of Complex;
const
A :Array [0..5] of Complex = ( ( re:1.1; im:0.0 ),( re:2.1; im:2.1 ),( re:2.2; 
im:0.0 ),( re:3.1; im:3.1 ),( re:3.2; im:3.2 ),( 
re:3.3; im: 0.0 ) );
begin
Result := '';  { результат функции }
N  := 3;
AMZ1C(A,N,B);
Result := Result + #$0D#$0A;
for _i:=0 to 8 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('tamz1c',Result);  { вывод результатов в файл tamz1c.res }
exit;
end;

end.


Результаты:

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