N是未知数个数,A是系数矩阵,X是右端项矩阵,同时存放解,右端项矩阵允许有M列。
function GAUE(var A: TDoubleExtendedArray; var X: TDoubleExtendedArray; N, M: longint): boolean;
var
i, j, k, jk: longint;
B, Max, Eps: Extended;
begin
Eps := 1E-8;
for k := 0 to N - 1 do begin
Max := 0;
for j := k to N - 1 do
if Abs(A[j, k]) > Max then begin
jk := j;
Max := Abs(A[j, k]);
end;
if Max < Eps then begin
Result := false;
exit;
end;
Max := 1 / A[jk, k];
for j := 0 to N - 1 do begin
B := A[jk, j] * Max;
A[jk, j] := A[k, j];
A[k, j] := B;
end;
for j := 0 to M - 1 do begin
B := X[jk, j] * Max;
X[jk, j] := X[k, j];
X[k, j] := B;
end;
for i := k + 1 to N - 1 do begin
B := A[i, k];
for j := k + 1 to N - 1 do A[i, j] := A[i, j] - A[k, j] * B;
for j := 0 to M - 1 do X[i, j] := X[i, j] - X[k, j] * B;
end;
end;
for i := N - 1 downto 1 do
for j := 0 to M - 1 do
for k := 0 to i - 1 do
X[k, j] := X[k, j] - A[k, i] * X[i, j];
end;