刚才的一位仁兄给出了最小二乘算法,如下:
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 := [red]i + 1[/red] 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; 
以下是调用
procedure TForm1.FormClick(Sender: TObject); 
var 
  A: TMatrix;                
//系统提示[Error] UnitPump.pas(67): Undeclared identifier: 'TMatrix'
  b: array [0..2] of Double; 
  x: array [0..1] of Double; 
begin 
  SetLength(A, 3, 2); 
  A[0, 0] := 1; A[0, 1] := 2; b[0] := 3; 
  A[1, 0] := 1; A[1, 1] := 2; b[1] := 4; 
  A[2, 0] := 2; A[2, 1] := 1; b[2] := 3; 
  MinSqrMul(3, 2, A, b, x); 
  ShowMessage(Format('%f, %f', [x[0], x[1]])); 
end; 问题是,里面的TMatrix在哪里定义呀?