|
Текст подпрограммы и версий afp8r_p.zip , afp8e_p.zip , afp8c_p.zip |
Тексты тестовых примеров tafp8r_p.zip , tafp8e_p.zip , tafp8c_p.zip |
Приведение прямоугольной матрицы A размера N*M (N ≥ M) к верхнему треугольному виду преобразованиями вращения.
Для прямоугольной матрицы А размера N*М (N ≥ М) строится последовательность матриц вращения R2 1,R3 1, ..., RN M размера N*N такая, что
RN M ... R2 1A = L ,
где L - верхняя треугольная матрица размера N*М. В результате верхняя треугольная матрица L запоминается на месте соответствующих элементов матрицы А.
Матрицы Ri j, i = 2, ..., N, j = 1, ..., М, i > 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) ,
и упаковываются под верхней треугольной частью матрицы А : информация о матрице Ri j запоминается на месте элемента с индексами ( i, j ).
В.В.Воеводин, Вычислительные основы линейной алгебры, М., Наука, 1977.
procedure AFP8R(var A :Array of Real; N :Integer; M :Integer);
Параметры
| A - | двумерный массив размера N*М (N ≥ М), в котором задается исходная матрица А; в результате работы подпрограммы верхняя треугольная матрица L запоминается на месте соответствующих элементов матрицы А, а матрицы вращения Ri j упаковываются под верхней треугольной частью матрицы А (тип: целый); |
| N, M - | число строк и столбцов матрицы А, причем N ≥ М (тип: целый). |
Версии
| AFP8E - | приведение прямоугольной матрицы размера N*М (N ≥ М) заданной с расширенной (Extended) точностью, к верхнему треугольному виду преобразованиями вращения. |
| AFP8C - | приведение прямоугольной комплексной матрицы размера N*М (N ≥ М) к верхнему треугольному виду преобразованиями вращения. |
Вызываемые подпрограммы: нет
Замечания по использованию
| 1. |
В случае надобности преобразования вектора матрицами вращения R2 1,R3 1,...,RN M, упакованными в матрице А описанным выше способом, можно воспользоваться подпрограммой АМ07R. | |
| 2. |
В подпрограмме АFР8E параметр А имеет тип Extended. | |
| 3. | В подпрограмме АFР8С параметр А имеет тип Complex. |
Unit TAFP8R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AFP8R_p;
function TAFP8R: String;
implementation
function TAFP8R: String;
var
J,I :Integer;
const
A :Array [0..14] of Real = ( 0.6,0.8,0.0,0.0,0.0,0.4,2.2,0.0,0.0,0.0,2.6,6.8,
0.6,0.8,0.0 );
begin
Result := ''; { результат функции }
AFP8R(A,5,3);
Result := Result + #$0D#$0A;
for I:=1 to 5 dО
begin
for J:=1 to 3 do
begin
Result := Result + Format('%20.16f ',[A[(I-1)+(J-1)*5]]) + #$0D#$0A;
end;
end;
Result := Result + #$0D#$0A;
UtRes('TAFP8R',Result); { вывод результатов в файл TAFP8R.res }
exit;
end;
end.
Результат:
| 1 2 7 |
| -0.5 1 2 |
A = | 0 0 1 |
| 0 0 -0.5 |
| 0 0 0 |
Это означает, что
| 1 2 7 |
| 0 1 2 |
L = | 0 0 1 |
| 0 0 0 |
| 0 0 0 |