|
Текст подпрограммы и версий adh0r_p.zip adh0e_p.zip adh0c_p.zip |
Тексты тестовых примеров tadh0r_p.zip tadh0e_p.zip tadh0c_p.zip |
Вычисление определителя симметричной матрицы модифицированным методом квадратного корня (модифицированным методом Холецкого).
Симметричная матрица А раскладывается в произведение А = UTDU, где U - верхняя треугольная матрица, на главной диагонали которой стоят единицы, D - диагональная матрица, с помощью модифицированного метода квадратного корня. Предпологается, что главные миноры матрицы А отличны от нуля. Определитель матрицы А вычисляется как определитель матрицы D и записывается в виде:
det A = D1*2D2, где 0.0625 ≤ D1 < 1
R.S.Мartin, G.Рeters, J.Н.Wilkinson, Symmetric Decomposition of a Рositive Definite Мatrix, Numer. Матн, 7, 1965.
procedure ADH0R(var A :Array of Real; var D1 :Real; var D2 :Integer;
var S :Array of Real; var N :Integer);
Параметры
| A - | вещественный двумерный массив размера N на N, содержащий исходную симметричную матрицу; |
| D1 - | вещественная переменная, в которой запоминается мантисса определителя; |
| D2 - | целая переменная, в которой запоминается двоичный порядок определителя; |
| S - | вещественный вектор длины N, используемый как рабочий; |
| N - | заданный порядок исходной матрицы (тип: целый). |
Версии
| ADH0E - | вычисление определителя симметричной матрицы, заданной с расширенной (Extended) точностью, модифицированным методом квадратного корня. |
| ADH0C - | вычисление определителя эрмитовой матрицы модифицированным методом квадратного корня. |
Вызываемые подпрограммы
| AFH0R - | треугольное разложение неособенной симметричной матрицы модифицированным методом квадратного корня. |
| AFH0E - | треугольное разложение неособенной симметричной матрицы, заданной с расширенной (Extended) точностью, модифицированным методом квадратного корня. |
| AFH0C - | треугольное разложение эрмитовой матрицы модифицированным методом квадратного корня. |
Замечания по использованию
| 1. |
В подпрограмме АDН0E параметры А, D1, S имеют тип Extended. | |
| 2. | В подпрограмме АDН0С параметр А имеет тип Сomplex. |
Unit TADH0R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, ADH0R_p;
function TADH0R: String;
implementation
function TADH0R: String;
var
D2,I,J,N :Integer;
D1 :Real;
A :Array [0..24] of Real;
S :Array [0..4] of Real;
labЕL
_3;
begin
Result := '';
for I:=1 to 5 do
begin
for J:=I to 5 do
begin
A[(I-1)+(J-1)*5] := I;
_3:
A[(J-1)+(I-1)*5] := I;
end;
end;
N := 5;
ADH0R(A,D1,D2,S,N);
Result := Result + Format('%s',[' D1=']);
Result := Result + Format('%20.16f',[D1]) + #$0D#$0A;
Result := Result + Format('%s',[' D2=']);
Result := Result + Format('%3d',[D2]) + #$0D#$0A;
UtRes('TADH0R',Result); { вывод результатов в файл TADH0R.res }
exit;
end;
end.
Результат:
D1 = 0.0625, D2 = 4,
т.е. det A = 0.0625*24 = 1.