如何在 Delphi 中创建一个接受 Extended 二维数组并返回 TArray<Extended> 的函数?

问题描述 投票:0回答:1

我有这个函数可以通过高斯消去法求解 3x4 矩阵。但是我在运行程序时遇到了这个错误。

[错误] Unit1.pas(79):需要标识符但找到“ARRAY”

[错误] Unit1.pas(79):未声明的标识符:'TArray'

function Solve3x4MatrixByGaussianElimination(A: array of array of Extended): TArray<Extended>;
const
  Rows = 3;
  Cols = 4;
var
  i, j, k: Integer;
  factor: Extended;
  X: array of Extended;
begin
  SetLength(X, Rows);

  for i := 0 to Rows - 2 do
  begin
    for k := i + 1 to Rows - 1 do
    begin
      if Abs(A[i, i]) < Abs(A[k, i]) then
      begin
        for j := 0 to Cols - 1 do
        begin
          factor := A[i, j];
          A[i, j] := A[k, j];
          A[k, j] := factor;
        end;
      end;
    end;

    for k := i + 1 to Rows - 1 do
    begin
      factor := A[k, i] / A[i, i];
      for j := i to Cols - 1 do
        A[k, j] := A[k, j] - factor * A[i, j];
    end;
  end;

  X[Rows - 1] := A[Rows - 1, Cols - 1] / A[Rows - 1, Rows - 1];
  for i := Rows - 2 downto 0 do
  begin
    X[i] := A[i, Cols - 1];
    for j := i + 1 to Rows - 1 do
      X[i] := X[i] - A[i, j] * X[j];
    X[i] := X[i] / A[i, i];
  end;

  Result := X;
end;

我想知道如何解决这个问题,我一直在寻找一些解决方案,例如我需要使用的用途,但仍然失败。我正在开发 Delphi 7。

delphi math pascal gaussian
1个回答
0
投票

Delphi 7 中根本不存在泛型,这就是为什么您在

TArray
上收到错误。

如果你真的想返回一个动态数组,你需要一个明确的

type
,例如:

type
  TArrayOfExtended = array of Extended;

function Solve3x4MatrixByGaussianElimination(A: array of array of Extended): TArrayOfExtended;
...
var
  ...
  X: TArrayOfExtended;
begin
  ...
end;

话虽如此,当您直接在参数类型中使用

array of ...
时,它将参数声明为 Open Array,而不是 Dynamic Array。 您不能使用
array of array of ...
作为参数类型,因为 Open Array of Open Array 没有任何意义。

在这种情况下,对于二维数组,您可以使用:

  • 静态数组:
type
  TMatrix = array[0..2] of array[0..3] of Extended;
  TArrayOfExtended = array of Extended;

function Solve3x4MatrixByGaussianElimination(const A: TMatrix): TArrayOfExtended;
  • 动态数组的动态数组:
type
  TArrayOfExtended = array of Extended;
  T2DArrayOfExtended = array of TArrayOfExtended;

function Solve3x4MatrixByGaussianElimination(const A: T2DArrayOfExtended): TArrayOfExtended;
© www.soinside.com 2019 - 2024. All rights reserved.