Текст подпрограммы и версий
aig1r_p.zip  aig1e_p.zip  aig1c_p.zip 
Тексты тестовых примеров
taig1r_p.zip  taig1e_p.zip  taig1c_p.zip 

Подпрограмма:  AIG1R (модуль AIG1R_p)

Назначение

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

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

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

     LNLN-1 ... L1PA = E, 

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

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

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

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

Параметры

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

Версии

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

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

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

  1. 

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

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

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

Unit TAIG1R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, AIG1R_p;

function TAIG1R: String; 

implementation

function TAIG1R: String;
var
_i :Integer;
S :Array [0..3] of Integer;
const
A1 :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 := '';
AIG1R(A1,S,4);
Result := Result + #$0D#$0A;
for _i:=0 to 15 do
 begin
  Result := Result + Format('%15.5f ',[A1[_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 |