Текст подпрограммы и версий afp7r_p.zip , afp7e_p.zip , afp7c_p.zip |
Тексты тестовых примеров tafp7r_p.zip , tafp7e_p.zip , tafp7c_p.zip |
Приведение прямоугольной матрицы размера N*M (N ≤ M) к нижнему двухдиагональному виду преобразованиями вращения.
Для прямоугольной матрицы А размера N*М (N ≤ М) строятся две последовательности матриц вращения R3 2,R4 2, ..., RN N - 1 размера N*N и Т1 2,Т1 3, ..., ТN M размера М*М, такие, что
RN N-1 ... R3 2 A T1 2 ... TN M = D ,
где D - нижняя двухдиагональная матрица размера N*М. В pезультате двухдиагональная матрица D запоминается на месте соответствующих диагоналей матрицы А, а матрицы вращения Ti j, i = 1, 2, ..., N, j = 2, 3, ..., М, i < j и Ri j, i = 3, 4, ..., N, j = 2, ..., N-1, i > j, строятся следующим образом.
Матрицы Ti j и Ri j являются матрицами плоского вращения в плоскости ( i, j ), у которых элементы Ri i = Rj j = C, Ri j = - S, Rj i = S, а остальные элементы главной диагонали равны 1, свертываются в число t = S / (1 + С), по которому они восстанавливаются с помощью формул
C = (1 - | t |2) / (1 + | t |2) , S = 2t / (1 + | t |2) ,
и упаковываются соответственно над и под нижней двухдиагональной частью матрицы А: информация о матрице Ti j запоминается на месте элемента с индексами ( i, j ), а информация о матрице Ri j - на месте элемента с индексами ( i, j - 1).
В.В.Воеводин, Вычислительные основы линейной алгебры, М., Наука, 1977.
procedure AFP7R(var A :Array of Real; N :Integer; M :Integer);
Параметры
A - | двумерный массив размера N*М (N ≤ М), в котором задается исходная матрица А; в результате работы подпрограммы нижняя двухдиагональная матрица D запоминается на месте соответствующих диагоналей матрицы А, а матрицы вращения Тi j и Ri j упаковываются соответственно над и под нижней двухдиагональной частью матрицы А (тип: вещественный); |
N, M - | число строк и столбцов матрицы А, причем N ≤ М (тип: целый). |
Версии
AFP7E - | приведение прямоугольной матрицы размера N*М (N ≤ М) заданной с расширенной (Extended) точностью, к нижнему двухдиагональному виду преобразованиями вращения. |
AFP7C - | приведение комплексной прямоугольной матрицы размера N*М (N ≤ М) к нижнему двухдиагональному виду преобразованиями вращения. |
Вызываемые подпрограммы: нет
Замечания по использованию
1. |
В случае необходимости преобразования вектора матрицами вращения ТN M,ТN M - 1,...,Т1 2 или R3 2,R4 2,...,RN N - 1, упакованными в матрице А описанным выше способом, можно воспользоваться соответственно подпрограммами АМ10R или АМ09R. | |
2. |
В подпрограмме АFР7E параметр А имеет тип Extended. | |
3. |
В подпрограмме АFР7С параметр А имеет тип Complex. |
Unit TAFP7R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, AFP7R_p; function TAFP7R: String; implementation function TAFP7R: String; var J,I :Integer; const A :Array [0..14] of Real = ( 1.0,1.2,-1.6,0.0,2.2,0.4,0.0,0.48,0.36,0.0,0.0, 0.0,0.0,0.64,0.48 ); begin Result := ''; { результат функции } AFP7R(A,3,5); Result := Result + #$0D#$0A; for I:=1 to 3 do begiN for J:=1 to 5 do begin Result := Result + Format('%20.16f ',[A[(I-1)+(J-1)*3]]) + #$0D#$0A; end; end; Result := Result + #$0D#$0A; UtRes('TAFP7R',Result); { вывод результатов в файл TAFP7R.res } exit; end; end. Результат: | 1 0 0 0 0 | A = | 2 1 0 0 0 | | 0.5 2 1 0 0.5 | Это означает, что | 1 0 0 0 0 | D = | 2 1 0 0 0 | | 0 2 1 0 0 |