Текст подпрограммы и версий
afh1r_p.zip , afh1e_p.zip , afh1c_p.zip
Тексты тестовых примеров
tafh1r_p.zip , tafh1e_p.zip , tafh1c_p.zip

Подпрограмма:  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