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;