|
Текст подпрограммы и версий afh4r_p.zip , afh4e_p.zip |
Тексты тестовых примеров tafh4r_p.zip , tafh4e_p.zip |
Приведение вещественной симметрической матрицы к симметрической трехдиагональной матрице ортогональными преобразованиями подобия.
Подпрограмма AFH4R реализует алгоритм приведения симметрической матрицы А ортогональными подобными преобразованиями к симметрической трехдиагональной форме F = QTАQ, где Q - пpоизведение оpтогональных симметpических матpиц отpажения.
Уилкинсон, Райнш. Справочник алгоритмов на языке АЛГОЛ. Линейная алгебра, М., "Машиностроение", 1976.
procedure AFH4R(N :Integer; var A :Array of Real;
var D :Array of Real; var E :Array of Real);
Параметры
| N - | порядок исходной матрицы (тип: целый); |
| A - | вещественный двумерный массив размера N*N, содержащий симметрическую матрицу; в результате работы подпрограммы в поддиагональной части массива А в последовательных строках запоминаются векторы, порождающие матрицы отражения Q1, ..., QN - 2; |
| D - | вещественный вектор длины N, содержащий диагональные элементы трехдиагональной матрицы; |
| E - | вещественный вектор длины N, содержащий в последних N - 1 компонентах поддиагональные элементы симметрической трехдиагональной матрицы. Первый элемент Е произволен. |
Версии
| AFH4E - | приведение симметрической матрицы, заданной с расширенной (Extended) точностью, к симметрической трехдиагональной матрице ортогональными преобразованиями подобия. |
Вызываемые подпрограммы: нет
Замечания по использованию
|
Исходную матрицу А можно задавать лишь нижним треугольником. Подпрограмма АFН4R сохраняет только полный верхний треугольник массива А, в остальных компонентах этого массива размещается информация об ортогональных преобразованиях. |
Unit TAFH4R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AFH4R_p;
function TAFH4R: String;
implementation
function TAFH4R: String;
var
J,I,_i :Integer;
EV :Array [0..3] of Real;
RАВ :Array [0..3] of Real;
const
A :Array [0..15] of Real = ( 1.0,0.42,0.54,0.66,0.42,1.0,0.32,0.44,0.54,0.32,
1.0,0.22,0.66,0.44,0.22,1.0 );
begin
Result := ''; { результат функции }
Result := Result + #$0D#$0A;
for I:=1 to 4 do
begin
for J:=1 to 4 do
begin
Result := Result + Format('#$0D#$0A + ВСЕ СОБСТВЕННЫЕ ЗНАЧЕНИЯ ВЕЩЕСТВЕННОЙ СИММЕТРИЧЕСКОЙ МАТРИЦЫ + #$0D#$0A + A%20.16f ',
[A[(I-1)+(J-1)*4]]) + #$0D#$0A;
end;
end;
Result := Result + #$0D#$0A;
AFH4R(4,A,EV,RAB);
Result := Result + Format('%s',[#$0D#$0A + ' PEЗУЛЬTAT']) + #$0D#$0A;
Result := Result + #$0D#$0A;
for I:=1 to 4 do
begin
for J:=1 to 4 do
begin
Result := Result + Format('#$0D#$0A + A%20.16f ',
[A[(I-1)+(J-1)*4]]) + #$0D#$0A;
end;
end;
Result := Result + #$0D#$0A;
Result := Result + Format('%s',[#$0D#$0A + ' EV']);
Result := Result + #$0D#$0A;
for _i:=0 to 3 do
begin
Result := Result + Format('%20.16f ',[EV[_i]]);
if ( ((_i+1) mod 4)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
Result := Result + Format('%s',[#$0D#$0A + ' RAB']);
Result := Result + #$0D#$0A;
for _i:=0 to 3 do
begin
Result := Result + Format('%20.16f ',[RAB[_i]]);
if ( ((_i+1) mod 4)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
UtRes('TAFH4R',Result); { вывод результатов в файл TAFH4R.res }
exit;
end;
end.
Результаты:
| 1.00 0.42 0.54 0.66 |
A = | 0.18 1.00 0.32 0.44 |
| 0.42 0.58 1.00 0.22 |
| 0.66 0.44 1.04 1.00 |
| 0.6670 |
D = | 0.6501 |
| 1.6829 |
| 1.0000 |
| 0.0000 |
E = | -0.0879 |
| -0.4614 |
| -0.8232 |