Текст подпрограммы и версий
aig2r_p.zip  aig2e_p.zip  aig2c_p.zip 
Тексты тестовых примеров
taig2r_p.zip  taig2e_p.zip  taig2c_p.zip 

Подпрограмма:  AIG2R (модуль AIG2R_p)

Назначение

Обращение вещественной матрицы методом Жордана с выбором ведущего элемента по всей матрице.

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

Заданная матрица А  N - го порядка приводится к единичной матрице Е последовательностью элементарных преобразований Жордана  L1, L2, ... LN  и матрицами перестановок Р и Q так, что

     LNLN-1 ... L1PAQ = E , 

при этом  А- 1 = QLNLN-1 ... L1Р.  Матрицы Р и Q осуществляют соответственно перестановку строк и столбцов матрицы А и обеспечивают стратегию выбора ведущего элемента по всей матрице.

В.В.Воеводин, Р.В.Петрина, Комплекс алгоритмов, основанных на преобразованиях типа Гаусса, в пакете линейной алгебры, Сб. "Численный анализ на ФОPТPАНе", вып.3, Изд-во МГУ, 1973.

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

procedure AIG2R(var A :Array of Real; var S :Array of Integer;
                N :Integer); 

Параметры

A - двумерный N на N массив, в котором задается исходная матрица; по окончании работы подпрограммы в массиве А запоминается вычисленная обратная матрица (тип: вещественный);
S - двумерный N на 2 массив, используемый подпрограммой как рабочий (тип: целый);
N - заданный порядок матрицы (тип: целый).

Версии

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

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

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

1. 

В подпрограмме АIG2E массив А имеет тип External.

2.  В подпрограмме АIG2С массив А имеет тип Сomplex.

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

Unit TAIG2R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, AIG2R_p;

function TAIG2R: String; 

implementation

function TAIG2R: String;
var
_i :Integer;
S1 :Array [0..7] of Integer;
const
A :Array [0..15] of Real = ( 7.9,8.5,4.3,3.2,5.6,-4.8,4.2,-1.4,5.7,0.8,-3.2,
-8.9,-7.2,3.5,9.3,3.3 );
begin
Result := '';
AIG2R(А,S1,4);
Result := Result + #$0D#$0A;
for _i:=0 to 15 dО
 begin
  Result := Result + Format('%15.5f ',[A[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
exit;
end;

end.


Результат: 

                   |  0.0505   0.0542   0.0062    0.0350 |
                   |  0.0518  -0.0846   0.0721  -0.0003 |
      A-1  =   | -0.0084   0.0432   0.0202  -0.1211 |
                   | -0.0497   0.0279   0.0790  -0.0577 |