Текст подпрограммы и версий am18r_p.zip , am18e_p.zip , am18c_p.zip |
Тексты тестовых примеров tam18r_p.zip , tam18e_p.zip , tam18c_p.zip |
Преобразование вектора последовательностью матриц отражения, упакованных над главной диагональю (включительно) прямоугольной матрицы размера N на M (N ≤ M).
Подпрограмма AM18R вычисляет произведение
Q1 Q2 ... QN В ,
где Q1, Q2,..., QN - матрицы отражения размера M * N, B - заданный вектоp длины M. Матpицы отpажения Qi имеют вид
Qi = Е - Wi WiН ,
где Е - единичная матрица размера M * M,
Wi - вектор
длины M, первые i - 1 компонент
которого равны нулю.
Ненулевые компоненты векторов Wi, порождающих
матрицы Qi, задаются
в строках над главной диагональю (включительно)
прямоугольной матрицы A размера N * М
(N ≤ М), т.е.
Wi = ( 0, 0, ... , 0, ai i, ai i+1, ... , ai M )H .
Данная упаковка последовательности матриц отражения получается, например, в результате работы подпрограмм, реализующих приведение прямоугольной матрицы А размера N * М (N ≤ М) к нижнему треугольному виду (AFP3R) или к нижнему двухдиагональному виду (AFP5R) методом отражений.
procedure AM18R(var A :Array of Real; N :Integer; M :Integer; var B :Array of Real);
Параметры
A - | вещественный двумерный массив размера N * М, в котором в упакованном виде хранится информация о матрицах отражения; |
N, M - | число строк и столбцов матрицы А соответственно, N ≤ М (тип: целый); |
B - | вещественный одномерный массив длины М, в котором задается исходный вектор B; в результате работы подпрограммы на месте B запоминается преобразованный вектор Q1 Q2 ... QN В. |
Версии
AM18E - | преобразование вектора последовательностью матриц отражения, упакованных над главной диагональю (включительно) прямоугольной матрицы размера N * М (N ≤ М), с расширенной (Extended) точностью. |
AM18C - | преобразование комплексного вектора последовательностью комплексных матриц отражения, упакованных над главной диагональю (включительно) прямоугольной матрицы размера N * М (N ≤ М). |
Вызываемые подпрограммы: нет.
Замечания по использованию
1. |
В подпрограмме АМ18E параметры А и B имеют тип Extended. | |
2. | В подпрограмме AM18C параметры А и B имеют тип Complex. |
Unit tam18r_p; interface uses SysUtils, Math, { Delphi } LStruct, Lfunc, UtRes_p, AFP3R_p, AM18R_p; function tam18r: String; implementation function tam18r: String; var _i :Integer; T :Array [0..5] of Real; IS_ :Array [0..4] of Integer; const A :Array [0..29] of Real = ( 1.0,3.0,0.0,1.0,3.0,3.0,-2.0,0.0,1.0,5.0,2.0, 0.0,1.0,1.0,1.0,1.0,1.0,2.0,0.0,1.0,-1.0,1.0,1.0, 2.0,0.0,0.0,1.0,1.0,3.0,2.0 ); X :Array [0..5] of Real = ( 1.0,0.0,2.0,-1.0,1.0,0.0 ); begin Result := ''; Result := Result + #$0D#$0A; for _i:=0 to 29 do begin Result := Result + Format('%20.16f ',[A[_i]]); if ( ((_i+1) mod 3)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; Result := Result + #$0D#$0A; for _i:=0 to 5 do begin Result := Result + Format('%20.16f ',[X[_i]]); if ( ((_i+1) mod 3)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; AFP3R(A,5,6,T,IS_); Result := Result + #$0D#$0A; for _i:=0 to 29 do begin Result := Result + Format('%20.16f ',[A[_i]]); if ( ((_i+1) mod 3)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; AM18R(A,5,6,X); Result := Result + #$0D#$0A; for _i:=0 to 5 do begin Result := Result + Format('%20.16f ',[X[_i]]); if ( ((_i+1) mod 3)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; UtRes('tam18r',Result); { вывод результатов в файл tam18r.res } exit; end; end. Результат: B = ( 0.04233, - 0.869395, 0.62655, 0.92835, - 1.28063, - 1.82974 )