Текст подпрограммы и версий
am18r_p.zip , am18e_p.zip , am18c_p.zip
Тексты тестовых примеров
tam18r_p.zip , tam18e_p.zip , tam18c_p.zip

Подпрограмма:  AM18R (модуль AM18R_p)

Назначение

Преобразование вектора последовательностью матриц отражения, упакованных над главной диагональю (включительно) прямоугольной матрицы размера N на M (N ≤ M).

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

Подпрограмма AM18R вычисляет произведение

          Q1 Q2 ... QN В  , 

где Q1, Q2,..., QN - матрицы отражения размера M * N,  B - заданный вектоp длины  M. Матpицы отpажения   Qi  имеют вид

          Qi  =  Е - Wi WiН  , 

где  Е - единичная матрица размера M * M, Wi - вектор длины  M, первые  i - 1 компонент которого равны нулю.
Ненулевые компоненты векторов  Wi,  порождающих матрицы  Qi,  задаются в строках над главной диагональю (включительно) прямоугольной матрицы A размера N * М (N ≤ М), т.е.

          Wi  =  ( 0, 0, ... , 0, ai i, ai i+1, ... , ai M )H  . 

Данная упаковка последовательности матриц отражения получается, например, в результате работы подпрограмм, реализующих приведение прямоугольной матрицы  А размера N * М (N ≤ М) к нижнему треугольному виду (AFP3R) или к нижнему двухдиагональному виду (AFP5R) методом отражений.

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

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

Параметры

A - вещественный двумерный массив размера N * М, в котором в упакованном виде хранится информация о матрицах отражения;
N, M - число строк и столбцов матрицы  А соответственно, N ≤ М (тип: целый);
B - вещественный одномерный массив длины  М, в котором задается исходный вектор  B; в результате работы подпрограммы на месте  B запоминается преобразованный вектор Q1 Q2 ... QN В.

Версии

AM18E - преобразование вектора последовательностью матриц отражения, упакованных над главной диагональю (включительно) прямоугольной матрицы размера N * М (N ≤ М), с расширенной (Extended) точностью.
AM18C - преобразование комплексного вектора последовательностью комплексных матриц отражения, упакованных над главной диагональю (включительно) прямоугольной матрицы размера N * М (N ≤ М).

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

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

  1. 

В подпрограмме АМ18E параметры  А и  B имеют тип Extended.

  2.  В подпрограмме AM18C параметры  А и  B имеют тип Complex.

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

Unit tam18r_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, AFP3R_p, AM18R_p;

function tam18r: String; 

implementation

function tam18r: String;
var
_i :Integer;
T :Array [0..5] of Real;
IS_ :Array [0..4] of Integer;
const
A :Array [0..29] of Real = ( 1.0,3.0,0.0,1.0,3.0,3.0,-2.0,0.0,1.0,5.0,2.0,
0.0,1.0,1.0,1.0,1.0,1.0,2.0,0.0,1.0,-1.0,1.0,1.0,
2.0,0.0,0.0,1.0,1.0,3.0,2.0 );
X :Array [0..5] of Real = ( 1.0,0.0,2.0,-1.0,1.0,0.0 );
begin
Result := '';
Result := Result + #$0D#$0A;
for _i:=0 to 29 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;
Result := Result + #$0D#$0A;
for _i:=0 to 5 do
 begin
  Result := Result + Format('%20.16f ',[X[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
AFP3R(A,5,6,T,IS_);
Result := Result + #$0D#$0A;
for _i:=0 to 29 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;
AM18R(A,5,6,X);
Result := Result + #$0D#$0A;
for _i:=0 to 5 do
 begin
  Result := Result + Format('%20.16f ',[X[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('tam18r',Result);  { вывод результатов в файл tam18r.res }
exit;
end;

end.


Результат:
       B  =  ( 0.04233, - 0.869395, 0.62655, 0.92835, - 1.28063, - 1.82974 )