DAU hat ein Problem !!
-
Hi,
ich hab ne Aufgabe von der Schule an der ich verzweifel.
Matrizen multiplikation !Die gegebene Aufgabe:
"...Demgegenüber muß die vorbereitete Funktion int matMul (float f1, float *mi1, int z1, int s1z2, float f2, float *mi2, int s2, float *mout) erst codiert werden.
Sie ermöglicht die Multiplikation zweier Matrizen beliebiger Größe. (Die skalaren Faktoren f1 und f2 sind aus mathematischer Sicht willkürlich;
sie sollen lediglich Anwendungen erleichtern, bei denen alle Elemente der jeweiligen Matrix mit einem konstanten Faktor zu multiplizieren sind.)
Matrizen sind im Rahmen dieser Aufgabe (praxisnah) als eindimensionale Felder gespeichert. ..."Gegebener Quelltext:
int matMul (float f1, float *mi1, int z1, int s1z2, float f2, float *mi2, int s2, float *mout) /* Es wird das gewichtete Produkt zweier Matrizen berechnet. <mout> wird eine <z1>x<s2>-Matrix return = 1: Ausfuehrung erfolgreich ======= Variablen der Parameterrampe: ======= (I) f1, f2 skalare Faktoren (I) mi1, mi2 Eingangsmatrizen (z1 x s1z2), (s1z2 x s2) (I) z1 Anzahl Zeilen erste Matrix (I) s1z2 Anzahl Spalten erste Matrix = Anzahl Zeilen zweite Matrix (I) s2 Anzahl Zeilen, Spalten zweite Matrix (O) mout Ergebnismatrix */ { ??????? ??????? ???????...... return (1); }
ICH STEH AUF DEM SCHLAUCH !!!!!
Kann da einer helfen ??
THX Merlin04
-
frage 1: was verstehst du nicht? liegt das problem beim code oder in der mathematik?
-
Mathe ist klar.
Der Code ist das Problem
-
soll das wirklich C++ oder doch bloß C werden?
-
Die Signatur der Methode ist ja ekelhaft -.-
-
Sorry das soll natürlich nur C sein.
-
Merlin04 schrieb:
Sorry das soll natürlich nur C sein.
Sorry, dann ist das natürlich das falsche Forum.
-
Dann schreib doch erstmal Schritt für Schritt auf (=Algorithmus), wie du es mathematisch machen würdest. Und dann zeig mal Ansätze vom Code. Bissl was wirst du doch haben, oder?
-
*mi1: pointer auf ein 1.Dim array, welches aber die 2.dim matrix representiert.
zugriff auf die Matrixwerte über Koordinaten (X,Y)int x=5, int y=4; float wert = mi1[y*x-1];
Denke mal dir war nich klar wie man auf die werte der matrizen zugreift, der rest ist ja selbsterklären, wenn du das in mathe verstanden hst
-
Also,
ich weiß wie man Matrizen multipliziert.
Ich weiß auch das ich bei einem eindimensionalen Array immer die Breite der Matrix weiterspringen muss um aufs mächste Element in der nächsten Zeile zu gelangen.
Was ich nicht hinbekomme ist, das alles in zwei, drei for-Schleifen einzupacken.
Könnte mir da einer helfen !
Ich steh total auf denm Schlauch ???Big THX
Gruß Merlin04
-
Merlin04 schrieb:
...
Was ich nicht hinbekomme ist, das alles in zwei, drei for-Schleifen einzupacken.Könnte mir da einer helfen !
...Schreib doch mal für Dich auf, was Du genau tust, wenn Du es "manuell" machst. Daraus ergibt sich eigentlich die Programmierung fast von selbst:
"a(1,1) * b(1,1) + ....."
Dann siehst Du selbst, wie sich die Indizes verändern (welcher "wandert nach oben" (und wie weit), welcher bleibt gleich, ....)Gruß,
Simon2.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ich finde überall im Netzt Bsp. zu zweidim. Arrays aber keins zu eindim. !!
Jeder gibt mit gute Tipps aber keiner Hilft wirklich weiter.
Kann den keiner mal schnell was coden !!!
Ich sitze schon drei Tage daran und ich bekomms net hin.THX
-
Es geht nicht um "helfen können". Die Fähigkeiten hat hier vermutlich ein Großteil. Aber: Dir etwas Fertiggekautes zu geben, wird Dich nicht weiterbringen.
Außerdem steht eine Hilfe doch schon da: Schreib detailliert auf, was genau Du beim "Rechnen auf Papier" machst, und dann bist Du schon einen großen Schritt weiter.
Eine regelgerechte Rechtschreibung und der sparsame Gebrauch von "!" würden Deine Chancen auf Hilfe ebenfalls erhöhen.
-
Dann zeig halt mal deinen Code den du in den 3 Tagen gemacht hast.
-
Pseudeocode
für alle zeilen aus matrix eins für alle spalten aus matrix zwei berechne ergebnis aus aktueller zeile und spalte trage ergebnis an aktueller position in ergebnis matrix ein
fertig...
Gruß
zeigerzeigerEdit:
matrix eins und matrix zwei und ergebnis matrix eingefügt...
-
kein plan, ob es stimmt:
int matMul (float f1, float *mi1, int z1, int s1z2,
float f2, float *mi2, int s2, float *mout)
{ int jz=0, js=0, jsz=0;for (jz=0; jz<z1; jz++)
{ for (js=0; js<s2; js++)
{ for (jsz=0;jsz<s1z2;jsz++)
{
mout[jz*s2+js] += f1*mi1[jz*jsz+jsz]*f2*mi2[jsz*s2+js];
}
}
}
return (1);
}