procedure (a,np,b);

/* Fortran specifications

SUBROUTINE MATINV(A,NP,B)

C

C PURPOSE: PERFORM MATRIX INVERSION FOR PARAMETER ESTIMATION

C

IMPLICIT REAL*8(A-H,O-Z)

DIMENSION A(14,14),B(28),INDEX(14,2)

*/

index=mat$alloc(lastrow(a),2);

DO J=1 to 14;

INDEX[J,1]=0;

end;

I=0;

s4: AMAX=-1.0;

DO J=1 to NP;

IF(INDEX[J,1] ne 0) donext;

DO K=1 to NP;

IF(INDEX[K,1] ne 0) donext;

P=ABS(A[j,k]);

IF(P LE AMAX) donext;

IR=J;

IC=K;

AMAX=P;

end;

end;

IF(AMAX le 0.0) goto s26;

INDEX[ic,1]=IR;

IF(IR ne IC) then begin;

DO L=1 to NP;

P=A[ir,l];

A[ir,l]=A[IC,L];

A[IC,L]=P;

end;

P=B[ir];

B[ir]=B[ic];

B[ic]=P;

I=I+1;

INDEX[i,2]=IC;

end;

P=1.0/A[ic,ic];

A[ic,ic]=1.0;

DO L=1 to NP;

A[IC,L]=A[IC,L]*P;

end;

B[ic]=B[ic]*P;

DO K=1 to NP;

IF(K EQ IC) donext;

P=A[k,ic];

A[k,ic]=0.0;

DO L=1 to NP;

A[K,L]=A[K,L]-A[IC,L]*P;

end;

B[k]=B[k]-B[ic]*P;

end;

GOTO s4;

s26: if(i le 0) goto s30;

IC=INDEX[i,2];

IR=INDEX[ic,1];

DO K=1 to NP;

P=A[k,ir];

A[k,ir]=A[k,ic];

A[k,ic]=P;

end;

I=I-1;

s30:

RETURN;

END;