Текст подпрограммы и версий 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