![]() |
Problem nach Matrizenmultiplikation
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Tag,
ich lasse eine/n Nutzer/in in ein StringGrid, dessen Row- und ColCount er/sie bestimmen kann, Zahlen eingeben, die dann in ein dynamisches, zweidimensionales Array of Double eingelesen und als Matrizen multipliziert werden. Der Code dafür sieht wie folgt aus:
Delphi-Quellcode:
Multipliziere ich zwei quadratische Matrizen, gibt es keine Probleme, alle Elemente werden richtig errechnet und ausgegeben.
procedure TMatrizen.MatrizenMultiplikation;
var i, j, Zeile, Spalte: Byte; MatrixA, MatrixB, MatrixE: Array of Array of Double; begin //Hier steht für mein Problem unwichtiger Code ... //MatrixA * MatrixB (den anderen Fall, BxA, habe ich absichtlich hier weggelassen, das Prinzip ist das gleiche) if SAA = ZAB then begin //This is the part where the matrices are multiplied //Do for all rows repeat //Do for all cols repeat //Specific part of the multiplication for i := 0 to SAA-1 do begin MatrixE[Spalte, Zeile] := MatrixE[Spalte, Zeile] + MatrixA[i,Zeile]*MatrixB[Spalte,i] end; Inc(Spalte) until Spalte = SAA; Inc(Zeile); Spalte := 0 until Zeile = ZAA; //Hier folgt weiterer, nicht so wichtiger Code end; Lauten die Dimensionien aber 3 kreuz 2 * 3 kreuz 3, dann bekomme ich die im Anhang mitgeschickte Fehlermeldung, sobald ich ein Element ausgeben will - aber nur, wenn ich vorher nicht zwei quadratische Matrizen multipliziert habe, denn sonst funktioniert es. Meine Vermutung ist, dass es mit der Multiplikation zusammenhängen muss, allerdings weiß ich nicht wo. Wenn weiterer Code erwünscht ist, kann ich den auch noch zeigen. mfg. Mysterio08 |
Re: Problem nach Matrizenmultiplikation
Zitat:
Lösung des Problems: Fange den Fall vorher ab, und zeige eine Sinnvolle Fehlermeldung an. Besser noch: Werfe in der Matrizen-multiplikations-Funktion eine eigene Exception (z.B.: EInvalidDimensionException) sodass der Aufrufer wählen kann, was passieren soll. |
Re: Problem nach Matrizenmultiplikation
![]() Dürfte eventuell hilfreich sein! MfG |
Re: Problem nach Matrizenmultiplikation
Zitat:
Das mit der Exception ist auch hilfreich, nur sollte die ja nicht erscheinen, wenn gar kein Fehler vorliegt; damit beschäftige ich mich dann, wenn alles soweit läuft. Deinen Artikel, Aphton, habe ich mir angeschaut, aber nicht implementiert, ich versuche meinen Lösungsweg zu Ende zu bringen. Aber was genau meint denn die Fehlermeldung, die ich bei meinem ersten Eintrag mit angehangen habe? Solch eine habe ich noch nie erhalten, und ich kann sie nicht deuten. |
Re: Problem nach Matrizenmultiplikation
Diese Fehlermeldung bedeutet das du in Speicher rumschreibst/ließt der dir nicht gehört.
|
Re: Problem nach Matrizenmultiplikation
Zitat:
Delphi-Quellcode:
Dabei muss MatrixA nicht immer so viel Zeilen wie MatrixB haben, das schließt ja der Fall MatrixA*MatrixB mit MatrixA=3kreuz2 und MatrixB=3kreuz3 aus.
//Fall Multiplikation AxB
for i := 0 to SAA-1 do //Für alle Spalten der MatrixA for j := 0 to ZAB-1 do //Für alle Zeilen der MatrixB do //Code zur Initialisierung nur für MatrixA Val(StringGridA.Cells[i,j], MatrixA[i,j], Code) Da lag das Problem, das ich jetzt behoben habe, die Berechnungen werden nun einwandfrei durchgeführt. Wenn allerdings noch was sein sollte, schildere ich mein Problem erneut. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz