Multiplikation einer matrix[3][3] mit einem vektor[3]
-
Hallo! Ich bin ein Anfänger in C.
Ich hab hier ein Programm das eine 3x3 matrix mit einem vektor multipliziert.
Das läuft auch so weit aber es kommen falsche Werte raus.
Wo ist der Fehler?#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { double matrix [3][3] = { {1.0, 2.5, 3.0 }, {2.0, 2.5, 3.0 }, {3.0, 2.5, 3.0 }}; double vektor[3] = {1.0, 2.0, 3.0}; double erg[3] = {0.0, 0.0, 0.0}; /* Berechnung des Ergebnisvektors: Die Elemente einer zeile werden spaltenweise mit dem Vektor multipliziert und die Ergebnisse aufsummiert */ for (int zeile = 0; zeile < 3; zeile++) { for (int spalte = 0; spalte < 3; spalte++) erg[zeile] = erg[zeile] + (matrix [zeile][spalte] * vektor[spalte]); }; /* Ausgabe des Ergebnis */ printf("Ergebnis der Matrix * Vektor Multiplikation (2-Nachkommastellen): \n"); for (int zeile = 0; zeile < 3; zeile++) printf("%4.2f\n",erg[zeile]); system("PAUSE"); return 0; }
-
Tausche gerne
vektor[spalte]
gegenvektor[zeile]
.. o O ( Da auch nach dem edit nicht vernünftig indentet: )
Geschmacksmuster:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main( void ) { double matrix[ 3 ][ 3 ] = { { 1., 2.5, 3. }, { 2., 2.5, 3. }, { 3., 2.5, 3. } }; double vektor[ 3 ] = { 1., 2., 3. }; double erg[ 3 ] = { 0 }; for( int zeile = 0; zeile < 3; ++zeile ) { for( int spalte = 0; spalte < 3; ++spalte ) { erg[ zeile ] += matrix[ zeile ][ spalte ]; } erg[ zeile ] *= vektor[ zeile ]; } printf( "Ergebnis der Matrix * Vektor Multiplikation (2-Nachkommastellen): \n" ); for( int zeile = 0; zeile < 3; ++zeile ) { printf("%4.2f\n", erg[ zeile ] ); } }
-
Danke. Jetzt kommen auch richtige Ergebnisse raus. Und so geschrieben ist mir die for-Schleife klarer.
Aber warum braucht man vor der ergebnisausgabe nochmal die forschleife? kann man die printf nicht in die erst forschleife reinschreiben?
-
Klar.
-
Könnte man. Aber man tut sich einen Gefallen Berechnung und Ausgabe zu trennen. In einem größeren Programm würde man für beides eh eigene Funktionen schreiben, also ist es besser gleich getrennt geschrieben. Und Gedanken über Performance muss man sich bei Ein-und Ausgaben eh nicht machen, die sind so schon um ein vielfaches langsamer.
-
Okay. Danke für die schnellen Antworten!