GAMS [ Home | Support | Sales | Solvers | Documentation | Model Libraries | Search | Contact Us ]

invert01.gms : Test invert utility


Test the invert utility:
  1. write a square matrix to a GDX file
  2. call 'invert' (an external program) to do the inversion
  3. read in the invert from a second GDX file
  4. test that A * A-inv = I

Contributor: Erwin Kalvelagen and Steve Dirkse, July 2008.

Small Model of Type: GAMS
$title 'Test invert utility' (INVERT01,SEQ=391) $ontext Test the invert utility: 1. write a square matrix to a GDX file 2. call 'invert' (an external program) to do the inversion 3. read in the invert from a second GDX file 4. test that A * A-inv = I Contributor: Erwin Kalvelagen and Steve Dirkse, July 2008. $offtext set i /i1*i3 /; alias (i,j,k); table a(i,j) 'original matrix' i1 i2 i3 i1 1 2 3 i2 1 3 4 i3 1 4 3 ; scalar rc; parameter inva(i,j) 'inverse of a' chk(i,j) 'check the product a * inva' ; execute_unload 'a.gdx',i,a; execute 'invert a.gdx i a b.gdx inva >invert.log'; rc=errorlevel; abort$(rc > 0) 'Nonzero return code from invert', rc; execute_load 'b.gdx',inva; rc=errorlevel; abort$(rc > 0) 'Error loading inverse from b.gdx', rc; chk(i,j) = sum{k, a(i,k)*inva(k,j)}; chk(i,j) = round(chk(i,j),15); display a,inva,chk; chk(i,i) = chk(i,i) - 1; abort$[card(chk)] 'a * ainv <> identity';