Reference system.copy提供对数组pascal的引用

Reference system.copy提供对数组pascal的引用,reference,dynamic-arrays,freepascal,Reference,Dynamic Arrays,Freepascal,我正在编写一个程序,该程序应该使用Cramer法则求解矩阵方程,我有这样的函数: function solveKramers(AMatr: Matrix; BMatr: Vector): vector; var detA: real; solvingMatrix: Matrix; i, j: Integer; begin detA := getDet(AMatr); if (not (detA = 0) or not (Length(AMatr) = Lengt

我正在编写一个程序,该程序应该使用Cramer法则求解矩阵方程,我有这样的函数:

function solveKramers(AMatr: Matrix; BMatr: Vector): vector;
var
    detA: real;
    solvingMatrix: Matrix;
    i, j: Integer;
begin
  detA := getDet(AMatr);

  if (not (detA = 0) or not (Length(AMatr) = Length(BMatr))) then begin
    SetLength(Result, Length(BMatr));

    for i := 0 to High(BMatr) do begin

      solvingMatrix := system.copy(AMatr);

      for j := 0 to High(solvingMatrix) do begin
        solvingMatrix[j, i] := BMatr[j];
      end;

      Result[i] := getDet(solvingMatrix) / detA;

    end;
    Exit;
  end;

end;
我创建了
矩阵=向量数组
向量=实数数组

当我尝试使用它时,
solvingMatrix:=system.copy(AMatr)创建对AMatr的引用,而不是创建此矩阵的副本。

好吧,我不知道这是如何工作的,但我通过单独复制每一行来解决它(奇怪的是,我在getDet函数中做了类似的操作,但它工作正常)
我添加的代码如下所示:

for j := 0 to High(AMatr) do begin
  solvingMatrix[j] := system.copy(AMatr[j]);
end; 

您实际上得到了数组的一个副本。但它只是外部阵列。这里的问题是该语言不支持多维数组。这些是交错阵列,在本例中为一维阵列,其元素也是一维阵列。Delphi中的锯齿状数组对于矩阵运算来说是错误的数据类型。顺便说一句,在实际情况下,Cramer规则通常不是求解矩阵方程的好算法。@DavidHeffernan,谢谢你提供的信息,我使用Cramer规则只是因为我们有这样的任务,但谢谢你。另外,你能推荐一种更容易使用矩阵的类型吗?如果我是你,我会使用另一种语言,而且可以。但您真正想要的是一个Delphi没有的多维数组。您可以使用1d数组伪造它,并自己处理2d索引
(j*nCol+i)
。如果你只是在做一个教育性的任务,那么你在回答中所做的就可以了。