Einzelnen Beitrag anzeigen

Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#1

Matrix multiplikation, help

  Alt 5. Jun 2012, 18:01
Mein Gehirn ist einfach zu klein um mein Projekt zum Abschluss zu bringen... bin ein bisschen deprimiert grade.

In meinem derzeitigen Programm soll der Benutzer 2 Matritzen eingeben, in Tabellen.
Die Tabellen sind in Spaltenanzahl und Zeilen Identisch und auch die Tabelle für sich hat immer genau so viele Spalten wie Zeilen.

Wenn der User die Eingaben erledigt hat wird jede Tabelle in ein 2D Array geschoben mit dem Ich dann weiter rechne.

Dann gibt es noch einen Ergebnis Array.

Also Ich habe folgendes Problem:

Array 1
10 3 5
3 3 5
8 7 9

Array 2
23 5 1
1 4 5
8 7 7

Ich brauche ne Schleife die jeden Wert aus meinen Array entsprechend der Gesetze der Matritzenmultiplikation berechnet. Wichtig: Ich möchte dass das ganez Skalier bar ist... d.h.
Es kann auch eine 1x1 oder 10x10 Matrix - Combo vorliegen und nicht nur dieses 3x3 Format.

Jetz muss man ja 10x23 + 3x1 + 8x8 ! 10x5 + 10x4 + 10x7 ! undsoweiter rechnet um dann zum Schluss:

Array Ergebnis
bla bla bla
bla bla bla
bla bla bla

Rauszubekommen... Ich hab mir das ganze versucht zu überlegen finde es aber derbe kompliziert grade...

Meine Schleife liefert nur einen Teil der Werte und sieht folgendermaßen aus:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender : TObject);
var
  I : Integer;
  I2: Integer;

  Ergebnis : Double;
  I3 : Integer;
begin
                       
  GridToArray(StringGrid1, MatrixData.ValueArray1);
  GridToArray(StringGrid2, MatrixData.ValueArray2);

  // einfach erstmal groß genug machen...
  SetLength(MatrixData.ResultArray, 20, 20);

  I := 0;
  while I <= High(MatrixData.ValueArray1) do
  begin
    I2 := 0;
    while I2 <= High(MatrixData.ValueArray1[I]) do
    begin

      Ergebnis := 0;
      for I3 := 0 to High(MatrixData.ValueArray2[I]) do
      begin
        Ergebnis := Ergebnis + (MatrixData.ValueArray1[I2, I3] * MatrixData.ValueArray2[I3, I2]);
      end;

      MatrixData.ResultArray[I, I2] := Ergebnis;
      inc(I2);
    end;
  inc(I);
  end;


end;
Würde mich auch freuen wenn jemand beschreiben könnte wie Ich mich solchen Problemen Gedanklich annähern kann, bin erst 22Jahre Alt also noch nicht alles verloren hoffe ich, gruß
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!
  Mit Zitat antworten Zitat