Hallo,
ich habe das Unterprogramm zur Berechnung der Inversen soweit hingekriegt (nehm ich an). Dummerweise mache ich wohl etwas bei der Übergabe der Ausgangsmatrix bzw Übergabe der Ergebnismatrix falsch. Dabei brauch ich noch einmal Hilfe.
Ich habe in meiner ButtonInverse.Onclick procedure zeilen-und spaltengröße, sowie meine Matrix, die ich invertieren möchte eingelesen. Daraufhin habe ich eine Matrix erzeugt, welche so aussieht, dass im vorderen Teil meine Ausgangsmatrix steht und die Einheitsmatrix sozusagen im hinteren Teil angehangen wird.
Bsp:
|1 2 3 1 0 0|
|4 5 6 0 1 0| =: matgauss
|7 8 9 0 0 1|
dann rufe ich mein Unterprogramm "Inverse" auf mit folgendem Befehl:
Inverse(0, zeilen, spaltengauss, matgauss);
der Quelltext meines Unterprogramms sieht dabei so aus:
Delphi-Quellcode:
procedure Inverse(a,zeilen,spaltengauss:Integer;matgauss:TMatrixgauss);
var i,j,k : Integer;
begin
if a < zeilen-1 then
begin
for i := a to spaltengauss - 1 do
begin
matgauss[a,i]:=matgauss[a,i]/matgauss[a,a];
end;
for j := a+1 to zeilen - 1 do
begin
for k := a to spaltengauss - 1 do
begin
matgauss[j,k]:=matgauss[j,k]-matgauss[j,a]*matgauss[a,k];
end;
end;
Inverse(a+1,zeilen,spaltengauss,matgauss);
end;
end;
so wenn ich das Programm starte, werden mir keine Fehler gemeldet. Wenn ich nun eine beliebige Matrix eingebe (angenommen, die obige, also
|1 2 3|
|4 5 6|
|7 8 9|,
dann wird mir leider nicht wie erhofft:
|1 0 0 x x x|
|0 1 0 x x x|
|0 0 1 x x x| (x steht hierbei für die invertierten werte)
ausgegeben, sondern:
|1 2 3 1 0 0|
|4 5 6 0 1 0|
|7 8 9 0 0 1|
also muss ich ja irgendwas bei der übergabe falsch gemacht haben, oder? Bitte schnellstens um Hilfe!
PS: eine Überprüfung und Korrektur, falls das erste Element in der matrix eine 0 sein sollte, habe ich vorgenommen und alle Fälle abgefangen(also sollte es nur eine zeile geben, weile im ersten element nicht 0 ist, bzw wenn alle elemente eine 0 enthalten usw)
es geht mir erst einmal nur allein darum, wenigstens eine korrekte ausgabe zu erhalten, sprich, dass mir ein stringgrid angezeigt wird in dem im vorderen teil die einheitsmatrix steht!