Текст подпрограммы и версий amz1r_p.zip , amz1e_p.zip , amz1c_p.zip |
Тексты тестовых примеров tamz1r_p.zip , tamz1e_p.zip , tamz1c_p.zip |
Преобразование симметричной матрицы, заданной в компактной форме, в полную форму представления.
Симметричная матрица А порядка 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.) )