Текст подпрограммы и версий
aih2r_p.zip  aih2e_p.zip 
Тексты тестовых примеров
taih2r_p.zip  taih2e_p.zip 

Подпрограмма:  AIH2R (модуль AIH2R_p)

Назначение

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

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

Подпрограмма AIH2R вычисляет матрицу В (симметричная, в компактной форме), такую, что А*В = Е, где А - исходная симметричная ленточная положительно определенная заданная в компактной форме, а Е - единичная матрицы. Используется метод квадратного корня (метод Холецкого).

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

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

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

Параметры

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

Версии

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

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

UTAI10 - подпрограмма печати диагностических сообщений при работе подпрограммы АIН2R;
UTAI11 - подпрограмма печати диагностических сообщений при работе подпрограммы АIН2E;

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

 

При работе подпрограммы исходная матрица не сохраняется. На место вектора А помещается ее треугольное разложение, полученное методом квадратного корня (методом Холецкого).

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

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

Unit TAIH2R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, AIH2R_p;

function TAIH2R: String; 

implementation

function TAIH2R: String;
var
_i,IERR :Integer;
B :Array [0..5] of Real;
const
A :Array [0..5] of Real = ( 0.0,-1.0,-1.0,2.0,2.0,2.0 );
begin
Result := '';
Result := Result + Format('%s',
[' ИНВЕРСИЯ ПОЛОЖИТЕЛЬНО ОПРЕДЕЛЕННЫХ СИММЕТРИЧНЫХ ЛЕНТОЧНЫХ MATPИЦ' + 
#$0D#$0A]) + #$0D#$0A; 
Result := Result + Format('%s',[' ЗАДАННАЯ MATPИЦA:']);
Result := Result + #$0D#$0A;
for _i:=0 to 5 do
 begin
  Result := Result + Format('%10.2f ',[A[_i]]);
  if ( ((_i+1) mod 2)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
AIH2R(A,B,3,1,IERR);
Result := Result + Format('%s',[' МАТРИЦА B: A*B=E:']);
Result := Result + #$0D#$0A;
for _i:=0 to 5 do
 begin
  Result := Result + Format('%12.4f ',[B[_i]]);
  if ( ((_i+1) mod 2)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + Format('%s',[' IERR=']);
Result := Result + Format('%8d ',[IERR]) + #$0D#$0A;
UtRes('TAIH2R',Result);  { вывод результатов в файл TAIH2R.res }
exit;
end;

end.


Результаты:    AINV = (0.75, 0.5, 1., 0.25, 0.5, 0.75),

                        IERR  =  0