多元一次方程组的解法(算法)???帮忙!!

解决方案 »

  1.   

    我一般是用高斯消元法,
    lu分解,gmres效率也蛮高。
      

  2.   

    转贴,不知是不是你要的:type
      TMatrix = array of array of Double;procedure MinSqrMul(m, n: Integer; A: TMatrix; b: array of Double; var x: array of Double);
    var
      i, j, k: Integer;
      ATA: array of array of Double;
      ATb: array of Double;
      Elem: Double;
    begin
      SetLength(ATA, n, n);
      SetLength(ATb, n);
      for i := 0 to n - 1 do
        for j := 0 to n - 1 do begin
          ATA[i, j] := 0;
          for k := 0 to m - 1 do
            ATA[i, j] := ATA[i, j] + A[k, i] * A[k, j];
        end;
      for i := 0 to n - 1 do begin
        ATb[i] := 0;
        for j := 0 to m - 1 do
          ATb[i] := ATb[i] + A[j, i] * b[j];
      end;
      for i := 0 to n - 1 do begin
        Elem := ATA[i, i];
        for j := i to n - 1 do
          ATA[i, j] := ATA[i, j] / Elem;
        ATb[i] := ATb[i] / Elem;
        for k := i + 1 to n - 1 do begin
          Elem := -ATA[k, i];
          for j := k to n - 1 do
            ATA[k, j] := ATA[k, j] + ATA[i, j] * Elem;
          ATb[k] := ATb[k] + ATb[i] * Elem;
        end;
      end;
      x[n - 1] := ATb[n - 1];
      for i := n - 2 downto 0 do begin
        for j := i + 1 to n - 1 do
          ATb[i] := ATb[i] - ATA[i, j] * x[j];
        x[i] := ATb[i];
      end;
    end;
     
    用法:
    var
      m,n:integer;
      a:array[1..2] of array[1..2] Double ;
      b: array[1..2] of Double; 
      x: array[1..2] of Double
    begin
      m:=2;
      n:=2;
      a:={{3,4},{5,6}}
      b:={7,8};
      MinSqrMul(m, n, A, b,x);
    end;