Подпрограмма: AFH1R (модуль AFH1R_p)
Назначение
Треугольное разложение положительно определенной
симметричной матрицы методом квадратного корня (методом Холецкого) с
компактной формой представления симметричной и треугольной
матриц.
Математическое описание
Заданная положительно определенная симметричная матрица А
приводится к действительной невырожденной нижней треугольной
матрице L, такой, что LLT = А,
методом квадратного корня (методом Холецкого).
В.В.Воеводин, Численные методы алгебры (теория и алгорифмы),
"Наука", М., 1966 г.
Использование
procedure AFH1R(var A :Array of Real; N :Integer; var IERR :Integer);
Параметры
A -
|
вектор длины N * (N + 1) / 2,
в котором содержится заданная матрица, записанная в компактной форме;
по окончании работы подпрограммы в массиве А
запоминается также в компактной форме нижняя
треугольная матрица L (тип: вещественный);
|
N -
|
порядок матрицы (тип: целый);
|
IERR -
|
целая переменная, служащая для сообщения об
ошибках, обнаруженных в ходе работы подпрограммы; при этом:
|
IЕRR=65 -
|
если исходная матрица не является
положительно определенной.
|
Версии
AFH1E -
|
треугольное разложение положительно
определенной симметричной матрицы методом квадратного
корня с компактной формой представления
симметричной и треугольной матриц с расширенной (Extended) точностью.
|
AFH1C -
|
треугольное разложение положительно
определенной эрмитовой матрицы методом квадратного корня
с компактной формой представления матриц.
|
Вызываемые подпрограммы
UTAF10 -
|
подпрограмма выдачи диагностических сообщений
при работе подпрограмм АFН1R, AFH1C .
|
UTAF11 -
|
подпрограмма выдачи диагностических сообщений
при работе подпрограмм АFН1E, AFH1Z .
|
Замечания по использованию
|
Для подпрограммы АFН1E параметр А должен тиметь тип
Extended, а для АFН1С - тип Complex.
|
Пример использования
Unit TAFH1R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AFH1R_p;
function TAFH1R: String;
implementation
function TAFH1R: String;
var
_i,IERR :Integer;
const
A :Array [0..5] of Real = ( 1.0,2.0,20.0,3.0,26.0,70.0 );
begin
Result := ''; { результат функции }
Result := Result + Format('%s',
[' ТРЕУГОЛЬНОЕ РАЗЛОЖЕНИЕ СИММЕТРИЧНОЙ ПОЛОЖИТЕЛЬНО ' + #$0D#$0A +
' ОПРЕДЕЛЕННОЙ МАТРИЦЫ :A=D*DT' + #$0D#$0A]) + #$0D#$0A;
Result := Result + Format('%s',[' ЗАДАННАЯ МАТРИЦА А:' + #$0D#$0A]);
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;
AFH1R(A,3,IERR);
Result := Result + Format('%s',
[' НИЖНЯЯ ТРЕУГОЛЬНАЯ МАТРИЦА В РАЗЛОЖЕНИИ ХОЛЕЦКОГО МАТРИЦЫ А:' + #$0D#$0A]);
Result := Result + Format('%s',[' (']);
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 + Format('%s',[' IERR = ']);
Result := Result + Format('%5d ',[IERR]) + #$0D#$0A;
UtRes('TAFH1R',Result); { вывод результатов в файл TAFH1R.res }
exit;
end;
end.
Результаты: A = (1., 2., 4., 3., 5., 6.), IERR = 0