Текст подпрограммы и версий
aih1r_p.zip  aih1e_p.zip 
Тексты тестовых примеров
taih1r_p.zip  taih1e_p.zip 

Подпрограмма:  AIH1R (модуль AIH1R_p)

Назначение

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

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

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

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

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

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

Параметры

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

Версии

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

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

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

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

 

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

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

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

Unit TAIH1R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, AIH1R_p;

function TAIH1R: String; 

implementation

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

end.


Результаты:     B = (11., -3., 1., -4., 1., 2.),

                         IERR  =  0.