我有这个函数可以通过高斯消去法求解 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 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;