行主元素消去法求解线性方程组的Pascal代码

来源:互联网 发布:js获取复选框选中的值 编辑:程序博客网 时间:2024/04/28 04:55

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;