Текст подпрограммы и версий
aib1r_p.zip  aib1e_p.zip 
Тексты тестовых примеров
taib1r_p.zip  taib1e_p.zip 

Подпрограмма:  AIB1R (модуль AIB1R_p)

Назначение

Обращение ленточной матрицы, заданной в компактной форме, с выбором ведущего элемента по столбцу.

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

Подпрограмма AIB1R вычисляет матрицу B, такую что А*В = Е, где А - исходная ленточная, а Е - единичная матрицы. Обращение осуществляется с выбором главного элемента по столбцу.

Дж.Х.Уилкинсон, Алгебраическая проблема собственных значений. "Наука", М., 1970.

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

procedure AIB1R(var A :Array of Real; var AINV :Array of Real;
                N :Integer; NLC :Integer; NUC :Integer;
                var R :Array of Real; var IERR :Integer);

Параметры

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

Версии

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

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

UTBF10 - подпрограмма печати диагностических сообщений при работе подпрограммы АIВ1R;
UTBF11 - подпрограмма печати диагностических сообщений при работе подпрограммы АIВ1E.

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

 

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

Для подпрограммы АIВ1E параметры А, B, R должны иметь тип External.

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

Unit TAIB1R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, AIB1R_p;

function TAIB1R: String; 

implementation

function TAIB1R: String;
var
_i,IERR :Integer;
B :Array [0..8] of Real;
R :Array [0..5] of Real;
const
A :Array [0..8] of Real = ( 0.0,1.0,2.0,1.0,3.0,3.0,-1.0,-2.0,0.0 );
begin
Result := '';
Result := Result + Format('%s',[' ЗАДАННАЯ MATPИЦA:']);
Result := Result + #$0D#$0A;
for _i:=0 to 8 do
 begin
  Result := Result + Format('%10.4f ',[A[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
AIB1R(A,B,3,1,1,R,IERR);
Result := Result + Format('%s',[' PEЗYЛЬTAT:']);
Result := Result + #$0D#$0A;
for _i:=0 to 8 do
 begin
  Result := Result + Format('%10.4f ',[B[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + Format('%s',[' I=']);
Result := Result + Format('%5d ',[IERR]) + #$0D#$0A;
UtRes('TAIB1R',Result);  {вывод результатов в файл TAIB1R.res}
exit;
end;

end.


Результаты:

         B = (0.8125, -0.1875, 0.125, 0.1875, 0.1875, -0.125, 0.125, 0.125, 
                 0.25), 
         IERR  =  0