Текст подпрограммы и версий am17r_p.zip , am17e_p.zip , am17c_p.zip |
Тексты тестовых примеров tam17r_p.zip , tam17e_p.zip , tam17c_p.zip |
Преобразование вектора последовательностью матриц отражения, упакованных под главной диагональю (включительно) прямоугольной матрицы размера 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 )