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