Matrix-Multiplikation (Falsches Ergebnis)



  • Hallo Leute,
    vorneweg möchte ich mich entschuldigen, wenn ich trotz mehrfacher Suche diese Frage unnötig ins Forum setze. Ich muss eine Matrix*Matrix-Multiplikation und Matrix*Vektor-Multiplikation durchführen aber schon bei Matrix*Matrix habe ich meine Probleme. Die Matrizen werden zufällig generiert aber das Produkt liefert ein falsches Ergebnis. Ich bin leider kein guter bzw. kein erfahrener Programmierer, deshlab wäre ich für eure Hilfe sehr sehr dankbar

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    int main(void)
    {
    	int mat[10][10];
    	int mat2[10][10];
    	int erg[10][10];
    	int dim;
    	int i=0,j=0, k=0;
    	int RANGE_MIN = 0;
        int RANGE_MAX = 2;
    
    std::cout<<"Bitte Anzahl der Reihen :"<<endl;
     std::cin>>dim;
    std::cout<<"Matrix 1:"<<endl;
    for (i=1;i<=dim;i++)
     {
      for (j=1;j<=dim;j++)
      {
       mat[i][j]=(( (double) rand() /(double) RAND_MAX) * RANGE_MAX + RANGE_MIN);
       std::cout<<"\t"<<mat[i][j];
      }
      std::cout<<"\n"<<endl;
    
     }
    
    std::cout<<"Matrix 2:"<<endl;
    for (i=1;i<=dim;i++)
     {
      for (j=1;j<=dim;j++)
      {
       mat2[i][j]=(((double) rand() /(double) RAND_MAX) * RANGE_MAX + RANGE_MIN);
       std::cout<<"\t"<<mat2[i][j];
      }
      std::cout<<"\n"<<endl;
    
     }
    
    std::cout<<"Produkt:"<<endl;
     for (i=0; i<dim; i++) 
     {
          for (j=0; j<dim; j++)
    	  {
            erg[i][j] = 0;
            for ( k=0; k<dim; k++)
              erg[i][j]+= mat[i][k]*mat2[k][j];
            std::cout<<"\t"<<erg[i][j];
    	  }
    	  std::cout<<"\n"<<endl;
     }
    
    return 0;
    
    }
    


  • Als Anfänegr würde ich mal behaupten, dass deine beiden ersten schleifen auch bei 0 und nicht bei 1 beginnen sollten, oder?



  • Shinja schrieb:

    Als Anfänegr würde ich mal behaupten, dass deine beiden ersten schleifen auch bei 0 und nicht bei 1 beginnen sollten, oder?

    Yepp, zumindest wenn man davon ausgeht, dass der User beides mal 10 eingibt, kriegst du Probleme, weil du das erste Element nicht multiplizierst und auf das 11. Element zugreifen willst, das gehört dir aber nicht.
    Im Übrigen würd ich die Userabfrage eh rausschmeißen, wenn deine Matrizen sowieso statisch sind.

    MfG

    GPC



  • Danke für die Hinweise aber wenn ich beide Indizen auf 0 setze dann bekomme ich z.B. bei einer 3*3 Matrix als Ergebnis ein 2*2-Matrix und das kann auch nicht richtig sein 😕 😕 ??????
    Userabfrage muss ich drin lassen weil die Dimension frei wählbar sein muss!!



  • NuCoder schrieb:

    Danke für die Hinweise aber wenn ich beide Indizen auf 0 setze dann bekomme ich z.B. bei einer 3*3 Matrix als Ergebnis ein 2*2-Matrix und das kann auch nicht richtig sein 😕 😕 ??????

    ne. errr, hast du auch die obere Grenze der Schleifen verändert (<dim statt <=dim)?

    Userabfrage muss ich drin lassen weil die Dimension frei wählbar sein muss!!

    hehe, cool. Aber dann schau wenigstens, dass der User nicht 15 eingibt 😃

    Poste bitte den aktuellen Code.



  • es war mein Fehler. Ich habe bei der Multiplikation, für die For-Schleife-Bedingung nicht <=dim gemacht sondern nur <dim . Jetzt mit der Änderung klappts 1A.

    Ich danke dir 😉 🙂


Anmelden zum Antworten