|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.ru/lib_na/cat/af_htm_p/afp2r_p.htm
Дата изменения: Fri Nov 6 15:18:09 2015 Дата индексирования: Sun Apr 10 03:54:05 2016 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий afp2r_p.zip , afp2e_p.zip , afp2c_p.zip |
Тексты тестовых примеров tafp2r_p.zip , tafp2e_p.zip , tafp2c_p.zip |
QR - разложение вещественной прямоугольной матрицы размера N*M (N ≥ M) нормализованным процессом метода отражений.
Выполняется факторизация матрицы А вида АР = QR, где Q - унитарная матрица, R - верхняя треугольная матрица, Р - матрица перестановок. матрица Р осуществляет перестановку столбцов А и обеспечивает выполнение нормализованного процесса. Матрица Q строится как произведение матриц Q1T, Q2T, ..., QMT, где Q1, Q2, ..., QM - преобразования отражения, приводящие матрицу АР к верхнему треугольному виду:
QMQM-1 ... Q1AP = R
В.В.Воеводин, Л.И.Карышева, Г.Д.Ким, Р.В.Петрина, комплекс алгоритмов, основанных на преобразованиях отражения, в пакете линейной алгебры, Сб. "Численный анализ на ФОРТРАНе", вып.3, Изд. МГУ, 1973.
procedure AFP2R(var A :Array of Real; N :Integer; M :Integer;
var W :Array of Real; var S :Array of Integer);
Параметры
| A - | двумерный N*М массив, в котором задается исходная матрица (тип: Real); в результате работы подпрограммы в массиве А на соответствующих местах запоминаются наддиагональные элементы матрицы R, в остальной части массива в последовательных столбцах запоминаются векторы, порождающие матрицы отражения Q1, Q2, ..., QM ; |
| N, M - | заданные размеры исходной матрицы, причем N ≥ М (тип: целый); |
| W - | одномерный массив длины N, используемый подпрограммой как рабочий (тип: Real); в результате работы подпрограммы в первых М компонентах W запоминаются диагональные элементы матрицы R; |
| S - | одномерный массив длины М, в котором запоминается вектор, порождающий матрицу перестановок (тип: целый); в S (К) запоминается номер столбца, переставленного с К - ым столбцом текущей матрицы на К - ом шаге преобразования. |
Версии
| AFP2C - | QR - разложение нормализованным процессом метода отражений для прямоугольной N*М (N ≥ М) комплексной матрицы; |
| AFP2E - | QR - разложение нормализованным процессом метода отражений для прямоугольной N*М (N ≥ М) вещественной матрицы, заданной с расширенной (Extended) точностью. |
Вызываемые подпрограммы: нет
Замечания по использованию
| 1. |
В подпрограмме АFР2С массивы А, W имеют тип Complex. | |
| 2. | В подпрограмме АFР2E массивы А, W имеют тип Extended. |
Unit TAFP2R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AFP2R_p;
function TAFP2R: String;
implementation
function TAFP2R: String;
var
J,I,_i :Integer;
L :Array [0..3] of Integer;
V :Array [0..6] of Real;
const
A :Array [0..27] of Real = ( 1.0,0.0,2.0,1.0,-1.0,-1.0,0.0,3.0,2.0,1.0,-3.0,
1.0,1.0,2.0,2.0,2.0,-1.0,-4.0,2.0,2.0,2.0,4.0,3.0,
-2.0,0.0,0.0,2.0,0.0 );
begin
Result := ''; { результат функции }
Result := Result + Format('%s',[' ИСХОДНАЯ MATPИЦA']) + #$0D#$0A;
Result := Result + #$0D#$0A;
for I:=1 to 7 do
begin
for J:=1 to 4 do
begin
Result := Result + Format('%20.16f ',[A[(I-1)+(J-1)*7]]) + #$0D#$0A;
end;
end;
Result := Result + #$0D#$0A;
AFP2R(A,7,4,V,L);
Result := Result + Format('%s',[' РЕЗУЛЬТАТ ФAKTOPИЗAЦИИ']) + #$0D#$0A;
Result := Result + #$0D#$0A;
for I:=1 to 7 do
begin
for J:=1 to 4 do
begin
Result := Result + Format(' A%20.16f ',
[A[(I-1)+(J-1)*7]]) + #$0D#$0A;
end;
end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for I:=1 to 4 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 3 do
begin
Result := Result + Format('%5d ',[L[_i]]);
if ( ((_i+1) mod 4)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
UtRes('TAFP2R',Result); { вывод результатов в файл TAFP2R.res }
exit;
end;
end.
Результат:
| 1.153 -3.288 1.315 -4.768 |
| 0.285 1.120 -0.493 -0.493 |
| -0.143 -0.208 1.357 -2.455 |
A = | -0.570 0.684 0.149 1.334 |
| 0.285 -0.342 -0.224 -1.350 |
| 0.285 0.037 -0.282 -0.425 |
| 0.285 -0.342 0.076 -1.423 |
(V(I), I = 1, 4) = -6.083, -4.711, -2.455, 7.797*10- 12 ,
L = (3, 4, 3, 4) .
Это означает, что
| -6.083 -3.288 1.315 -4.768 |
| 0. -4.711 -0.493 -0.493 |
| 0. 0. -2.455 -2.455 |
R = | 0. 0. 0. 7.797*10-12 | ,
| 0. 0. 0. 0. |
| 0. 0. 0. 0. |
| 0. 0. 0. 0. |
Qi = I - Wi * WiT , i = 1, 2, 3, 4 ,
где
W1T = (1.153, 0.285, -0.143, -0.570, 0.285, 0.285, 0.285) ,
W2T = (0., 1.120, -0.208, 0.684, -0.342, 0.037, -0.342) ,
W3T = (0., 0., 1.357, 0.149, -0.224, -0.282, 0.076) ,
W4T = (0., 0., 0., -1.084, 0.430, 0.538, 0.592) .