Registriert seit: 12. Jun 2007
9 Beiträge
|
Re: Determinanten Berechnung
1. Jul 2007, 14: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.
|
|
Zitat
|