Текст подпрограммы и версий
afp3r_p.zip , afp3c_p.zip , afp3e_p.zip
Тексты тестовых примеров
tafp3r_p.zip , tafp3c_p.zip , tafp3e_p.zip

Подпрограмма:  AFP3R (модуль AFP3R_p)

Назначение

LQ - разложение вещественной прямоугольной матрицы размера N*M (N ≤ M) нормализованным процессом метода отражений.

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

Выполняется факторизация матрицы А вида РА = LQ, где Q - унитарная матрица, L - нижняя треугольная матрица, Р - матрица перестановок. Матрица Р осуществляет перестановку строк матрицы А и обеспечивает выполнение нормализованного процесса. Матрица Q строится как произведение матриц QNT, ..., Q2T, Q1T, где Q1, Q2, ... QN - преобразования отражения, приводящие матрицу РА к нижнему треугольному виду:

     PAQ1Q2 ... QN = L . 

В.В.Воеводин, Л.И.Карышева, Г.Д.Ким, Р.В.Петрина, Комплекс алгоритмов, основанных на преобразованиях отражения, в пакете линейной алгебры, Сб. "Численный анализ на ФОРТРАНе", вып.3, Изд. МГУ, 1973.

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

procedure AFP3R(var A :Array of Real; N :Integer; M :Integer;
                var W :Array of Real; var S :Array of Integer);

Параметры

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

Версии

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

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

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

  1. 

В подпрограмме АFР3С массивы А, W имеют тип Complex.

  2.  В подпрограмме АFР3E массивы А, W имеют тип Extended.

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

Unit TAFP3R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AFP3R_p;

function TAFP3R: String;

implementation

function TAFP3R: String;
var
_i,I :Integer;
L :Array [0..2] of Integer;
V :Array [0..4] of Real;
const
A :Array [0..14] of Real = ( 1.0,0.0,1.0,2.0,1.0,3.0,0.0,1.0,1.0,1.0,2.0,0.0,
-1.0,1.0,0.0 );
begin
Result := '';  { результат функции }
Result := Result + Format('%s',[' ИСХОДНАЯ MATPИЦA']) + #$0D#$0A; 
Result := Result + #$0D#$0A;
for _i:=0 to 14 do
 begin
  Result := Result + Format('%20.16f ',[A[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
AFP3R(A,3,5,V,L);
Result := Result + Format('%s',[' РЕЗУЛЬТАТ ФAKTOPИЗAЦИИ']) + #$0D#$0A; 
Result := Result + Format('%s',[' A']);
Result := Result + #$0D#$0A;
for _i:=0 to 14 do
 begin
  Result := Result + Format('%20.16f ',[A[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for I:=1 to 3 do
 begin
  Result := Result + Format(' V%20.16f ',[V[I-1]]) + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + Format('%s',[' L']);
Result := Result + #$0D#$0A;
for _i:=0 to 2 do
 begin
  Result := Result + Format('%5d ',[L[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TAFP3R',Result);  { вывод результатов в файл TAFP3R.res }
exit;
end;

end.


Результат:

                 |  1.141    0.793   0.264  0.000    0.000 |
      A  =    | -1.206    1.034   0.296  0.822   0.411 |   , 
                 | -2.111  -0.193  -1.209  0.509  -0.529 |

       ( (V(I), I = 1, 3)  =  -3.317,  -2.355,  1.584) , 

      L  =   (3,  2,  3) .

Это означает, что

                 | -3.317   0.        0.        0.  0. |
      R  =    | -1.206  -2.355  0.        0.  0. |  , 
                 | -2.111  -0.193  1.584  0.  0. |

      Qi =  I - Wi * WiT ,    i = 1, 2, 3 ,
 где
      W1T  =   (1.141,  0.793,  0.264,  0.,  0.) ,

      W2T  =   (0.,  1.034,  0.296,  0.822,  0.411) ,

      W3T  =   (0.,  0.,  -1.209,  0.509,  -0.529) .