Текст подпрограммы и версий
am17r_p.zip , am17e_p.zip , am17c_p.zip
Тексты тестовых примеров
tam17r_p.zip , tam17e_p.zip , tam17c_p.zip

Подпрограмма:  AM17R (модуль AM17R_p)

Назначение

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

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

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

          QМ QМ-1 ... Q1В  , 

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

          Qi  =  Е - Wi WiН  , 

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

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

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

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

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

Параметры

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

Версии

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

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

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

  1. 

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

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

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

Unit tam17r_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, AFP2R_p, AM17R_p;

function tam17r: String; 

implementation

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

end.


Результат:    B  =  ( 1.80839, 2.35993, 0.20543, - 1.43105, 2.01751 )