Текст подпрограммы и версий
am15r_p.zip , am15e_p.zip , am15c_p.zip
Тексты тестовых примеров
tam15r_p.zip , tam15e_p.zip , tam15c_p.zip

Подпрограмма:  AM15R (модуль AM15R_p)

Назначение

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

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

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

           QN-1 QN-2 ... Q1В  , 

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

           Qi  =  Е - Wi WiН  , 

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

           Wi  =  ( 0, 0, ... , 0, ai+1 i, ai+2 i, ... , aN i )T  . 

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

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

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

Параметры

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

Версии

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

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

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

  1. 

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

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

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

Unit tam15r_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, AFP5R_p, AM15R_p;

function tam15r: String; 

implementation

function tam15r: String;
var
_i :Integer;
D1 :Array [0..4] of Real;
D2 :Array [0..3] of Real;
const
A :Array [0..19] of Real = ( 1.0,3.0,0.0,-1.0,3.0,3.0,-2.0,0.0,1.0,-5.0,1.0,
1.0,1.0,1.0,5.0,-3.0,-2.0,1.0,0.0,4.0 );
B :Array [0..3] of Real = ( 1.0,-2.0,0.0,3.0 );
begin
Result := '';
Result := Result + #$0D#$0A;
for _i:=0 to 19 do
 begin
  Result := Result + Format('%20.16f ',[A[_i]]);
  if ( ((_i+1) mod 2)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 3 do
 begin
  Result := Result + Format('%20.16f ',[B[_i]]);
  if ( ((_i+1) mod 2)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
AFP5R(A,4,5,D1,D2);
Result := Result + #$0D#$0A;
for _i:=0 to 19 do
 begin
  Result := Result + Format('%20.16f ',[A[_i]]);
  if ( ((_i+1) mod 2)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
AM15R(A,4,5,B);
Result := Result + #$0D#$0A;
for _i:=0 to 3 do
 begin
  Result := Result + Format('%20.16f ',[B[_i]]);
  if ( ((_i+1) mod 2)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('tam15r',Result);  { вывод результатов в файл tam15r.res }
exit;
end;

end.


Результат:    B  =  ( 1.00000, 3.59139, 0.24574, - 0.20377 )