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