Matrixinversion nach Gauß-Jordan
Programm zur Matrixinversion einer (n x n)-Matrix nach dem
Gauß-Jordan-Verfahren ohne Pivotisierung.
program GJordan(input, output);
{Berechnung der inversen Matrix nach Gauss-Jordan}
uses
stdfile;
const
MaxArray = 32;
var
n: integer;
a, b: array [1..MaxArray, 1..MaxArray] of double;
i, j, k: integer;
t: double;
procedure init;
var
fName: string;
f: text;
t: double;
i: integer;
begin {init}
writeln('Berechnung der inversen Matrix nach Gauss-Jordan');
writeln;
writeln('In welcher Datei steht die Matrix? (In gjordan.dat liegt ein Beispiel.)');
readln(fName);
if StdOpen(f, fName) then begin
if not StdRead(f, t) then begin
writeln('Kann Dimension nicht lesen.');
halt
end; {if}
if t > MaxArray then begin
writeln('Dimension zu gross (groesser als ', MaxArray,
').');
halt
end; {if}
n := round(t);
for i := 1 to n do begin
if not StdReadn(f, n, @a[i, 1]) then begin
writeln('Fehler beim Lesen der ', i, '-ten Zeile.');
halt
end {if}
end; {for}
writeln;
close(f)
end else begin {if}
writeln('Kann Datei "', fName, '" nicht oeffnen.');
halt
end {if}
end; {init}
procedure result;
var
i, j: integer;
begin {result}
writeln('Das Ergebnis lautet');
writeln;
for i := 1 to n do begin
for j := 1 to n do begin
write(b[i, j]:7:3, ' ')
end; {for}
writeln
end {for}
end; {result}
begin {GJordan}
init;
for k := 1 to n do begin
for j := 1 to n do begin
b[k, j] := 0
end; {for}
b[k, k] := 1
end; {for}
for k := 1 to n do begin
t := a[k, k];
for j := 1 to n do begin
a[k, j] := a[k, j] / t;
b[k, j] := b[k, j] / t
end; {for}
for i := 1 to n do begin
if i <> k then begin
t := a[i, k];
for j := 1 to n + 1 do begin
a[i, j] := a[i, j] - t * a[k, j];
b[i, j] := b[i, j] - t * b[k, j]
end {for}
end {if}
end {for}
end; {for}
result
end. {GJordan}