|
|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 3072 (0xc00)
Types: TextFile
Names: »gausstxt«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt.
└─⟦0364f57e3⟧
└─⟦this⟧ »gausstxt«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
└─⟦4334b4c0b⟧
└─⟦this⟧ »gausstxt«
detgauss=set 5
permanent detgauss.5
detgauss=algol
procedure for solving linear equations, gauss.
07 03 73 19 00 00
external
real procedure Det_Gauss(n,m,A,exit);
value n,m;
integer n,m;
array A;
label exit;
comment Det Gauss solves m systems of linear equations with n
unknowns and computes the determinant of the coeffi-
cient matrix. The parameters are:
n : Number of unknowns.
m : Number of right hand sides. m=0 implies that
only the determinant will be computed (cf. section 2).
A : Has the dimension (1:n,1:n+m) and must on entry
contain the coefficient matrix in A(1:n,1:n) and
the right hand sides in A(1:n,n+1:n+m). The solu-
tion vectors are on exit stored as columns in
A(1:n,n+1:n+m).
exit : Label to which Det Gauss goes when the system is
singular;
begin integer i,j,k,i0,j0;
real factor,max,detfac,twofac;
integer array permute(1:n);
m:= n+m;
detfac:= 1;
for i:= 1 step 1 until n do
begin
max:= 0;
for j:= 1 step 1 until n do
max:= max+ A(i,j)**2;
if max>1 or max<.25 then
begin
twofac:= 2**(-entier(ln(max)/1.3863+1));
for j:= 1 step 1 until m do
A(i,j) := A(i,j)*twofac;
detfac:= detfac/twofac
end
end equilibration;
for k:= 1 step 1 until n do
begin
max:= 0;
for i:= k step 1 until n do
for j:= k step 1 until n do
begin
factor:= abs(A(i,j));
if max <= factor then
begin
max:= factor;
i0:= i;
j0:= j
end
end searching_for_pivotal_element;
if max <= '-8 then goto exit;
max:= A(i0,j0);detfac:= detfac*max;
if i0<>k then
begin
detfac:= -detfac;
for j:= k step 1 until m do
begin
factor:= A(k,j);
A(k,j) :=A(i0,j);
A(i0,j) := factor
end
end interchange_of_rows;
permute(k) := k;
if j0<>k then
begin
detfac:= -detfac;
permute(k) := j0;
for i:= 1 step 1 until n do
begin
factor:= A(i,k);
A(i,k) := A(i,j0);
A(i,j0) := factor
end
end interchange_of_columns;
for i:= k+1 step 1 until n do
begin
factor:= A(i,k)/max;
for j:= k+1 step 1 until m do
A(i,j) := A(i,j) - A(k,j)*factor
end reduction
end for_k;
for k:= n+1 step 1 until m do
for i:= n step -1 until 1 do
begin
factor:= A(i,k);
for j:= i+1 step 1 until n do
factor:= factor- A(i,j)*A(j,k);
A(i,k) := factor/A(i,i)
end solving;
if m<>n then
begin
for i:= n-1 step -1 until 1 do
begin
i0:= permute(i);
if i0<>i then
for k:= n+1 step 1 until m do
begin
factor:= A(i,k);
A(i,k) := A(i0,k);
A(i0,k) := factor
end
end
end interchange_of_solutions;
Det_Gauss:= detfac
end;
end Det_Gauss; \f
\f
\f
▶EOF◀