|
Текст подпрограммы и версий afh3r_p.zip , afh3e_p.zip , afh3c_p.zip , afs3c_p.zip |
Тексты тестовых примеров tafh3r_p.zip , tafh3e_p.zip , tafh3c_p.zip , tafs3c_p.zip |
Треугольное разложение неособенной симметричной матрицы, заданной в компактной форме, с использованием метода квадратного корня.
Подпрограмма AFH3R реализует разложение неособенной симметричной матрицы А, записанной в компактной форме, в произведение А = L*D*LТ, где L - нижняя треугольная матрица с единичными диагональными элементами, LТ - транспортированная к ней, а D - блочно - диагональная матрица с блоками порядка 1 или 2.
Вunch J.R., Рarlett В.N., Direct methods for solving symmetric indefinite systems of linear equations, SIАМ J. Numer. Аnal., Vol.8, No.4, December 1971.
procedure AFH3R(var A :Array of Real; N :Integer;
var IR :Array of Integer; var R :Array of Real;
var IERR :Integer);
Параметры
| A - | вещественный вектор длины N * (N + 1) / 2, который содержит исходную матрицу, записанную в компактной форме; в процессе работы в массиве А накапливаются элементы матриц L и D (см. замечания по использованию); |
| N - | порядок заданной матрицы А (тип: целый); |
| IR - | целый вектор длины 2N, в первых N компонентах которого запоминаются перестановки диагональных элементов, в последних - порядки блоков матрицы D; |
| R - | вещественный вектор длины N, используемый как рабочий; |
| IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в процессе работы подпрограммы; при этом: |
| IЕRR=65 - | если матрица является сингулярной. |
Версии
| AFH3E - | разложение неособенной симметричной матрицы с компактной формой представления методом квадратного корня с расширенной (Extended) точностью. |
| AFH3C - | разложение неособенной эрмитовой матрицы с компактной формой представления методом квадратного корня; |
| AFS3C - | разложение неособенной симметричной комплексной матрицы с компактной формой представления методом квадратного корня. |
Вызываемые подпрограммы
| UTAF10 - | подпрограмма выдачи диагностических сообщений при работе подпрограмм АFН3R, AFH3C, AFS3C . |
| UTAF11 - | подпрограмма выдачи диагностических сообщений при работе подпрограмм АFН3E, AFH3Z. |
Замечания по использованию
| 1. |
Значения выходных матриц L и D помещаются в матрице А, причем ai i = di i ; ai+1 i = di+1 i , если di+1 i ≠ 0 (в этом случае li+1 i = 0) ai+1 i = li+1 i , если di+1 i = 0 | |
| 2. |
Для подпрограммы АFН3E параметры А, R должны иметь тип Extended. | |
| 3. | Для подпрограмм АFН3С, АFS3С параметр А имеет тип Complex. |
Unit TAFH3R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AFH3R_p;
function TAFH3R: String;
implementation
function TAFH3R: String;
var
N,_i,IERR :Integer;
IR :Array [0..5] of Integer;
R :Array [0..2] of Real;
const
A :Array [0..5] of Real = ( 1.0,0.5,-1.0,3.0,2.0,1.0 );
begin
ResuLT := ''; { РЕЗУЛЬТАТ ФУНКЦИИ }
N := 3;
AFH3R(A,N,IR,R,IERR);
Result := Result + #$0D#$0A;
for _i:=0 to 5 do
begin
Result := Result + Format('%20.16f ',[A[_i]]);
if ( ((_i+1) mod 4)=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('%5d ',[IR[_i]]);
if ( ((_i+1) mod 4)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
UtRes('TAFH3R',Result); { вывод результатов в файл TAFH3R.res }
exit;
end;
end.
Результаты:
A = (1., 3., 1., 0.69, -0.06, -1.22) ,
IR(4) = 2 , IR(5) = 0 , IR(6) = 1 ,
IERR = 0