|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.ru/lib_na/cat/af_htm_p/afp3r_p.htm
Дата изменения: Fri Oct 30 10:28:53 2015 Дата индексирования: Sun Apr 10 03:54:10 2016 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий afp3r_p.zip , afp3c_p.zip , afp3e_p.zip |
Тексты тестовых примеров tafp3r_p.zip , tafp3c_p.zip , tafp3e_p.zip |
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) .