gauss.gms : Matrix Inversion with Full Pivoting

Description

```This example demonstrates the use of Loops and Dynamic definition
of sets in elementary transformations using Gaussian Elimination with
full pivot selection.
```

Small Model of Type : GAMS

Category : GAMS Model library

Main file : gauss.gms

``````\$title Matrix Inversion with full Pivoting (GAUSS,SEQ=71)

\$onText
This example demonstrates the use of Loops and Dynamic definition
of sets in elementary transformations using Gaussian Elimination with
full pivot selection.

GAMS Development Corporation, Formulation and Language Example.

Keywords: matrix inversion, Gaussian elimination, full pivoting
\$offText

Set
i 'row labels'    / row-1 * row-3 /
j 'column labels' / col-1 * col-3 /;

Alias (i,ip), (j,jp);

Table a(i,j) 'original matrix'
col-1  col-2  col-3
row-1          1      2      3
row-2          1      3      4
row-3          1      4      3;

Parameter
b(j,i)    'inverse of a'
bp(i,j)   'permuted and transposed inverse of a'
pair(i,j) 'pivoting sequence and permutation'
rank      'rank of matrix a'
adet      'absolute value of determinant of matrix a'
piv
big
tol;

Set
r(i)   'pivot row candidates'
npr(i) 'non pivot rows'
s(j)   'pivot column candidates'
nps(j) 'non pivot columns';

r(i)    = yes;
s(j)    = yes;
bp(i,j) = a(i,j);
rank    = 0;
tol     = 1e-5;

loop(j,
big = smax((r,s), abs(bp(r,s)));
big\$(big < tol) = 0;
npr(i)   = yes;
nps(jp)  = yes;
loop((r,s)\$(big and big = abs(bp(r,s))),
rank = rank + 1;
pair(r,s) = rank;
piv    = 1/bp(r,s);
big    = 0;
npr(r) = no;
nps(s) = no;

bp(  r,nps)  =  bp(r,nps)*piv;
bp(npr,nps)  =  bp(npr,nps) - bp(r,nps)*bp(npr,s);
bp(npr,  s)  = -bp(npr,s)*piv;
bp(  r,  s)  =  piv;
);
r(r) = npr(r);
s(s) = nps(s);
);

b(j,i) = sum((ip,jp)\$(pair(i,jp) and pair(ip,j)), bp(ip,jp));

display a, rank, adet, pair, bp, b;

Parameter
ir(i,ip) 'a times b'
ic(j,jp) 'b times a';

ir(i,ip) = sum(j, a(i,j)*b(j,ip));
ic(j,jp) = sum(i, b(j,i)*a(i,jp));

display ir, ic;
``````
GAMS Development Corp.
GAMS Software GmbH

General Information and Sales
U.S. (+1) 202 342-0180
Europe: (+49) 221 949-9170