![]() |
Delphi-Version: 5
Matrixmultiplikation Problem
Hallo,
ich möchte ein Programm schreiben, welches mir zwei beliebig große Matrizen miteinander multipliziert. Dazu werden zunächst die Dimensionen der beiden Matrizen eingegeben und daraufhin zwei Arrays erstellt. Eine Multiplikation wird nur durchgeführt, wenn die Spaltenanzahl der ersten Matrix gleich der Zeilenanzahl der zweiten Matrix ist. Die Größe der Ergebnismatrix ist die Zeilenanzahl der Ersten -und die Spaltenanzahl der Zweiten. So weit so gut ;) nun sollen die Werte berechnet werden. Btw: ausgegeben werden die Werte in ein StringGrid mittels IntToStr(). Hier der erste Teil des Codes. Beim Klick auf den Button werden die Werte für die Dimensionen ausgelesen und die Arrays erstellt. Daraufhin werden nach der Reihe vom Nutzer Werte eingegeben (ja ich weiss nicht sehr elegant xD aber es soll einfach nur funktionieren). Die Matrizen sind M1Matrix, M2Matrix, welche multipliziert werden sollen und MEMatrix speichert das Ergebnis. Alle drei wurde vorher als Array of Array of Integer initialisiert. Die Matrizen sind nun erstellt und beim Klick auf den Button für Multiplizieren wird folgender Code ausgeführt: Das Problem ist nun, dass ich total astronomische Werte ausgegeben bekomme und dazu auch noch in Zeilen und Spalten (beim StrinGrid) absolut nicht stimmen. Ich hoffe ihr könnt mir weiterhelfen. |
AW: Matrixmultiplikation Problem
Also einen Fehler habe ich schonmal gefunden.
Du solltest dich übrigens mit der setlength Funktion vertraut machen, die nimmt auch 3 Parameter an ;-)
Delphi-Quellcode:
procedure TForm1.MultiplizierenButtonClick(Sender: TObject);
var i: Integer; j: Integer; k: Integer; summe: Integer; begin //Abfrage ob Spaltenanzahl der ersten Matrix gleich der Zeilenanzahl //zweiten Matrix ist if Length(M1Matrix[0]) = Length(M2Matrix) then begin //Setzen der Groesse der Ergebnismatrix SetLength(MEMatrix, Length(M1Matrix)); for i := 0 to Length(MEMatrix) do begin SetLength(MEMatrix[i], Length(M2Matrix[i])); end; //Durchlaufen der Ergebnismatrix for i := 0 to Length(MEMatrix)-1 do begin for j := 0 to Length(MEMatrix[0])-1 do summe := 0; // <<<<<-----------------------------------------------------------fehler !! begin //Errechnen der Ergebniswerte aus den eingebenen Matritzen for k := 0 to Length(M1Matrix[i])-1 do begin summe := summe + (M1Matrix[i,k] * M2Matrix[k,j]); end; MEMatrix[i,j] := summe; StringGrid3.Cells[j,i] := IntToStr(summe); end; end; end else begin ShowMessage('Spaltenanzahl der ersten Matrix ist ungleich der Zeilenanzahl der zweiten Matrix. Keine Multiplikation möglich.') end end; |
AW: Matrixmultiplikation Problem
Du muß selbstverständlich die Skalarproduktsumme immer wieder für jedes Element MEMatrix[i,j] neu-initialisieren, am besten setz mal die Summe direkt vor der k-Schleife auf Null:
Delphi-Quellcode:
for j := 0 to Length(MEMatrix[0])-1 do
begin //Errechnen der Ergebniswerte aus den eingebenen Matritzen summe := 0; for k := 0 to Length(M1Matrix[i])-1 do begin summe := summe + (M1Matrix[i,k] * M2Matrix[k,j]); end; MEMatrix[i,j] := summe; StringGrid3.Cells[j,i] := IntToStr(summe); end; |
AW: Matrixmultiplikation Problem
Zitat:
Zitat:
|
AW: Matrixmultiplikation Problem
Hast du fixedrows bzw. fixedcols des stringgrid auch auf null stehen?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:54 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