Thema: Delphi Determinanten Berechnung

Einzelnen Beitrag anzeigen

krutho

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

Re: Determinanten Berechnung

  Alt 30. Jun 2007, 16:47
Ok, hab den Quelltext jetzt mit ein paar Beschreibungen versehen. Hab vergessen zu erwähnen, dass die Determinante mit Hilfe der Entwicklung nach der ersten Zeile erfolgen soll.
Hoffe ihr habt jetzt etwas mehr Durchblick. falls ihr noch fragen habt oder mehr Hinweise benötigt sagt bescheid.

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
  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); {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)}
      begin
        if i <> k then
        begin
          for j:= 1 to n-1 do
          begin
            matrizen[i,j,k]:= matrixN[j,l]; {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;
        end;
        inc(l); {nach dem einlesen der Splate soll die nächste Spalte der
        Hilfsmatrix betrachtet werden (l wird um eins erhöht)}

      end;
    end;
  result:=0;
  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 Elemetne der ersten
        Zeile multipliziert mit den Hilfsmatrizen und multipliziert mit
         (-1) hoch i(alternierend)}

      end;
  end;
end;
  Mit Zitat antworten Zitat