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