AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem nach Matrizenmultiplikation

Ein Thema von Mysterio08 · begonnen am 26. Apr 2010 · letzter Beitrag vom 26. Apr 2010
Antwort Antwort
Mysterio08

Registriert seit: 11. Jan 2009
142 Beiträge
 
#1

Problem nach Matrizenmultiplikation

  Alt 26. Apr 2010, 15:47
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:
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;
Multipliziere ich zwei quadratische Matrizen, gibt es keine Probleme, alle Elemente werden richtig errechnet und ausgegeben.
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
Miniaturansicht angehängter Grafiken
fehlermeldung_199.png  
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Problem nach Matrizenmultiplikation

  Alt 26. Apr 2010, 15:55
Zitat von Mysterio08:
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.
Du weist schon, dass eine Multiplikation 3x2 mal 3x3 nicht definiert ist? Insofern würde ich den Fehler eher da sehen wo keine Fehlermeldung kommt

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.
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Problem nach Matrizenmultiplikation

  Alt 26. Apr 2010, 16:35
Hier hab ich mal eine Routine für die Matrixmultiplikation geschrieben.
Dürfte eventuell hilfreich sein!

MfG
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Mysterio08

Registriert seit: 11. Jan 2009
142 Beiträge
 
#4

Re: Problem nach Matrizenmultiplikation

  Alt 26. Apr 2010, 17:44
Zitat von jfheins:
Du weist schon, dass eine Multiplikation 3x2 mal 3x3 nicht definiert ist? Insofern würde ich den Fehler eher da sehen wo keine Fehlermeldung kommt
Ich habe mich verschrieben, ich meinte 2x3 mal 3x3.
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.
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Problem nach Matrizenmultiplikation

  Alt 26. Apr 2010, 17:57
Diese Fehlermeldung bedeutet das du in Speicher rumschreibst/ließt der dir nicht gehört.
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Mysterio08

Registriert seit: 11. Jan 2009
142 Beiträge
 
#6

Re: Problem nach Matrizenmultiplikation

  Alt 26. Apr 2010, 18:08
Zitat von Teekeks:
Diese Fehlermeldung bedeutet das du in Speicher rumschreibst/ließt der dir nicht gehört.
Ja, jetzt, wo ich das Problem gelöst habe, leuchtet es mir ein. Das Problem war das ich die Matrizen falsch initialisiert habe: ich habe es so geschrieben
Delphi-Quellcode:
  //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)
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.
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz