Gaußalgorithmus
Programm zur Lösung des Systems
mit einer
Matrix
und
einem Vektor
durch Gaußelimination ohne Pivotisierung.
Die Vorwärtselimination im Gaußalgorithmus erfordert ca.
, die Rücksubstitution ca.
Operationen.
program Gauss(input, output);
{Gauss-Elimintation ohne Pivotisierung}
uses
stdfile;
const
MaxArray = 32;
var
n: integer;
a: array [1..MaxArray, 1..MaxArray] of double;
c, x: array [1..MaxArray] of double;
i, j, k: integer;
sum: double;
factor: double;
procedure init;
var
fName: string;
f: text;
t: double;
i: integer;
begin {init}
writeln('Gauss-Elimination ohne Pivotisierung');
writeln;
writeln('In welcher Datei stehen Matrix und Loesungsvektor?');
writeln('(In gauss.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}
if not StdReadn(f, n, @c[1]) then begin
writeln('Fehler beim Lesen des Loesungsvektors.');
halt
end; {if}
writeln;
close(f)
end else begin {if}
writeln('Kann Datei "', fName, '" nicht oeffnen.');
halt
end {if}
end; {init}
procedure result;
var
i: integer;
begin {result}
writeln('Das Ergebnis lautet');
writeln;
for i := 1 to n do begin
writeln(x[i]:7:3)
end {for}
end; {result}
begin {Gauss}
init;
{Vorwaertselimination}
for k := 1 to n - 1 do begin
for i := k + 1 to n do begin
{Hier mue3te die Pivotisierung kommen}
if a[k,k] = 0 then begin
writeln('Matrix muss pivotisiert werden.');
halt
end; {if}
factor := a[i, k] / a[k, k];
for j := k + 1 to n do begin
a[i, j] := a[i, j] - factor * a[k, j]
end; {for}
c[i] := c[i] - factor * c[k]
end {for}
end; {for}
{Rueckwaertsubstitution}
x[n] := c[n] / a[n, n];
for i := n - 1 downto 1 do begin
sum := 0;
for j := i + 1 to n do begin
sum := sum + a[i, j] * x[j]
end; {for}
x[i] := (c[i] - sum) / a[i, i]
end; {for}
result
end. {Gauss}