|
Текст подпрограммы и версий amz0r_p.zip , amz0e_p.zip , amz0c_p.zip |
Тексты тестовых примеров tamz0r_p.zip , tamz0e_p.zip , tamz0c_p.zip |
Преобразование полной симметричной матрицы в компактную форму представления.
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.) )