Текст подпрограммы и версий
afh2r_p.zip , afh2e_p.zip
Тексты тестовых примеров
tafh2r_p.zip , tafh2e_p.zip

Подпрограмма:  AFH2R (модуль AFH2R_p)

Назначение

Треугольное разложение положительно определенной симметричной ленточной матрицы методом квадратного корня (методом Холецкого) с компактной формой представления симметричной и треугольной матриц.

Математическое описание

Заданная в компактной форме положительно определеная симметричная ленточная матрица А приводится к действительной невырожденной нижней треугольной матрице L, такой, что LLT = А, методом квадратного корня (методом Холецкого). Треугольная матрица с является ленточной.

В.В.Воеводин, Численные методы алгебры (теория и алгорифмы), "Наука", М., 1966 г.

Использование

procedure AFH2R(var A :Array of Real; N :Integer; NC :Integer;
                var IERR :Integer);

Параметры

A - вещественный двумерный массив размера N * (NС + 1), в котором содержится заданная матрица, записанная в компактной форме; по окончании работы подпрограммы в массиве А запоминается также в компактной форме нижняя треугольная ленточная матрица L;
N - порядок матрицы (тип: целый);
NC - число ненулевых диагоналей заданной матрицы по одну сторону от главной диагонали (тип: целый);
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом:
IЕRR=65 - если заданная матрица не является положительно определенной.

Версии

AFH2E - треугольное разложение положительно определенной симметричной ленточной матрицы методом квадратного корня (методом Холецкого) с компактной формой представления симметричной и треугольной матриц с расширенной (Extended) точностью.

Вызываемые подпрограммы

UTAF10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы АFН2R;
UTAF11 - подпрограмма выдачи диагностических сообщений при работе подпрограммы АFН2E.

Замечания по использованию

  Для подпрограммы АFН2E параметр А должен иметь тип Extended.

Пример использования

Unit TAFH2R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AFH2R_p;

function TAFH2R: String;

implementation

function TAFH2R: String;
var
N,NC,_i,IERR :Integer;
const
A :Array [0..5] of Real = ( 0.0,2.0,12.0,1.0,25.0,56.0 );
begin
Result := '';  { результат функции }
N := 3;
NC := 1;
AFH2R(A,N,NC,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 := RЕSULT + #$0D#$0А;
UtRes('TAFH2R',Result);  { вывод результатов в файл TAFH2R.res }
exit;
end;

end.


Результаты:  A  =   (0.,  2.,  2.6186,  1.,  4.5826,  7.0102)