Thema: Delphi Determinanten Berechnung

Einzelnen Beitrag anzeigen

krutho

Registriert seit: 12. Jun 2007
9 Beiträge
 
#6

Re: Determinanten Berechnung

  Alt 1. Jul 2007, 13:42
Hallo nochmal. Habt jetzt selbst ein paar Fehler gefunden und korrigieren können. Die Berechnung an sich läuft jetzt auch, jedoch ist das Ergebnis immer 0, was natürlich nicht sein kann. Nach einigem rumprobieren habe ich herausgefunden, dass der Fehler an den Hilfsmatrizen liegt. Deswegen habe ich eingefügt, dass die erste der Hilfsmatrizen ins ein zweites Stringgrid eingefügt werden soll um zu überpfüfen, was dort drin steht. Dies jedoch funktioniert nicht. Der Compiler meldet einen Fehler beim Lesen der Adresse 00000.... . Was bedeutet dass und was kann man dagegen tun ?
Delphi-Quellcode:
procedure TForm4.ButtonDetOnClick(Sender:Tobject);
var i,j,n:integer;
    matrixA:T2DMatrix;

Begin {Liest zu berechnende Matrix ein und startet ersten Funktionsaufruf}
  n:=SG1.ColCount;
  SetLength(matrixA,n,n);
    for i:= 0 to n-1 do
      for j:= 0 to n-1 do
        begin
          matrixA[i,j]:=StrtoFloat(SG1.Cells[j,i]);
        end;
EditDet.text:=FloatToStr(matrixdet(matrixA,n));
end;

function TForm4.MatrixDet(matrixN:T2DMatrix;n:integer):double; {Berechnet Determinante einer Matrix mit Entwicklung nach erster Zeile }
var matrizen:array of T2DMatrix; {Array enthält Hilfsmatrizen}
  i,j,k,l:integer;
Begin
   result:=0;
  if n =2 then {wenn 2x2 Matrix, dann einfaches Berechnen, ansonsten rekursiver aufruf}
  begin
    result:= (matrixn[0,0]*matrixn[1,1])-(matrixn[1,0]*matrixn[0,1]);
  end
  else
  begin
  setlength(matrizen,n,n-1,n-1); {Dimension der MAtrix betimmt gleichzeitig Anzahl der
  Hilfsmatrizen}

  {Zuerst müsen Hilfsmatrizen eingelesen werden}
  for i:= 0 to n-1 do {i= Index der Hilfsmatrix}
  begin
  l:=0; {l= zeilenindex der Hilfsmatrizen}

      for k:= 0 to n-1 do {k= Spaltenindex der zu berechnenden Matrix (MatrixN)}
        if i <> k then
        begin

          for j:= 1 to n-1 do
          begin
            matrizen[i,j-1,l]:= matrixN[j,k]; {Nacheinander sollen alle Elemente
            einer Spalte k (außer dem ersten) der zu berechnenden Matrix MatrixN in die Spalte l der i ten Hilfsmatrix eingelesen werden}

          end;
            inc(l); {nach dem einlesen der Spalte soll die nächste Spalte der
        Hilfsmatrix betrachtet werden (l wird um eins erhöht)}

        end;
    end;
  for i:= 0 to n-1 do
      begin
        result:=result + (intpower(-1,i)* matrixn[1,i]* matrixdet(matrizen[i],n-1));
         {Die Determinante einer Matrix ist die Summe der Elemente der ersten
        Zeile multipliziert mit den Hilfsmatrizen und multipliziert mit
         (-1) hoch i(alternierend)}


      end;
  end;
 for i:= 0 to n-2 do
  for j:= 0 to n-2 do
    begin
      SG2.Cells[j,i]:=FloatToStr(matrizen[0,i,j]);
    end;
 end;
Vielen Dank für eure Hilfe schon mal im Vorraus.
  Mit Zitat antworten Zitat