real procedure SYMDET (A,i,j,n); value n; integer i,j,n; real A; begin integer k; real d,r; array v[1:n]; d:= 1; for k:= 1 step 1 until n do begin j:= k; for i:= 1 step 1 until k do v[i]:= A; r:= v[k] - SUM (i,1,k-1,v[i] ** 2); d:= r * d; i:= k; A:= r:= 1 / sqrt (r); for j:= k+1 step 1 until n do begin i:= k; A:= (A - SUM (i,1,k-1,A * v[i])) * r end end LU; SYMDET:= d end SYMDET; procedure SYMSOL (A,i,j,n,b); value n; integer i,j,n; real A; array b; begin for j:= 1 step 1 until n do b[j]:= (b[j] - SUM (i,1,j-1,A * b[i])) * A; for i:= n step -1 until 1 do begin j:= i; b[i]:= A * (b[i] - SUM (j,i+1,n,A * b[j])) end end SYMSOL; procedure SYMINV (A,i,j,n); value n; integer i,j,n; real A; begin integer k; array v[1:n]; for k:= 1 step 1 until n do begin i:= j:= k; v[k]:= A; for j:= k+1 step 1 until n do begin i:= k; A:= v[j]:= - SUM (i,k,j-1,A * v[i]) * A end; for i:= 1 step 1 until k do begin j:= k; A:= SUM (j,k,n,A * v[j]) end end end SYMINV; procedure syminv (A,i,j,n); value n; integer i,j,n; real A; begin integer k; array v[1:n]; for k:= 1 step 1 until n do begin i:= j:= k; v[k]:= A; for j:= k+1 step 1 until n do v[j]:= - SUM (i,k,j-1,A * v[i]) * A; i:= j:= k; A:= SUM (j,k,n,v[j] ** 2) end end syminv;