n:
NAT = 2;
BEGIN -- solve Ax=b by Gaussian Elimination
FOR i:[1..n]
IN [1..n]
DO
bestk:[1..n] ← i;
FOR k:[1..n]
IN [i..n]
DO
IF ABS[A[k][i]] > ABS[A[bestk][i]] THEN bestk ← k;
ENDLOOP;
{t:Row2 ← A[i]; A[i] ← A[bestk]; A[bestk] ← t}; -- sorry about the dependence on n
{t:REAL ← b[i]; b[i] ← b[bestk]; b[bestk] ← t};
FOR k:(1..n]
IN (i..n]
DO
r:REAL = A[k][i]/A[i][i]; -- Singular A causes divide by zero
FOR j:[1..n]
IN [i..n]
DO
A[k][j] ← A[k][j] - A[i][j]*r
ENDLOOP;
b[k] ← b[k] - b[i]*r
ENDLOOP
ENDLOOP;
Now A is upper-triangular, so back substitute
FOR i:[1..n]
DECREASING IN [1..n]
DO
xi:REAL ← b[i];
FOR j:[1..n]
IN (i..n]
DO
xi ← xi - A[i][j]*x[j];
ENDLOOP;
x[i] ← xi / A[i][i]
ENDLOOP
END