Matrixmultiplikation



  • Tim schrieb:

    pointercrash() schrieb:

    Bummi1983 schrieb:

    MatrixA MatrixB und Result werden per Pointer in der Form ** MatrixA übergeben

    Das geht nur, wenn eine Dimension zur Compiletime fix ist.

    Falsch.

    Jupp, ich habe ja MatrixARow .... als Parameter der Funktion mit übergeben die Funktion soll ja rein dynamischer Natur sein, so dass mit den Größenangaben die Ergebnissmatrix berechnet werden kann



  • wie baust du die matrizen auf?

    #define ROWS 11
    #defein COLUMNS 13
    
    int foo[ROWS][COLUMNS];
    
    // ...oder...
    
    oder int **foo = malloc(sizeof(int*) * ROWS);
    for (i = 0; i < ROWS; i += 1) foo[i] = malloc(sizeof(int) * COLUMNS);
    


  • Tim schrieb:

    pointercrash() schrieb:

    Das geht nur, wenn eine Dimension zur Compiletime fix ist.

    Falsch.

    Tim, warum stellst du nicht eine Frage statt so eine nutzlose Antwort zu geben?



  • weltnichtmehrversteher schrieb:

    Tim schrieb:

    pointercrash() schrieb:

    Das geht nur, wenn eine Dimension zur Compiletime fix ist.

    Falsch.

    Tim, warum stellst du nicht eine Frage statt so eine nutzlose Antwort zu geben?

    Wieso sollte ich eine Frage stellen? Und warum sollte meine Antwort nutzlos sein?



  • cracki schrieb:

    wie baust du die matrizen auf?

    #define ROWS 11
    #defein COLUMNS 13
    
    int foo[ROWS][COLUMNS];
    
    // ...oder...
    
    oder int **foo = malloc(sizeof(int*) * ROWS);
    for (i = 0; i < ROWS; i += 1) foo[i] = malloc(sizeof(int) * COLUMNS);
    

    Ich tu den Speicher Dynamisch allokieren. So wie ich es verstanden habe,

    oder int **foo = malloc(sizeof(int*) * ROWS); sind es ja die Zeilen.



  • Ok hat sich erledigt, ich hatte einen Dreher in der Speicherallokierung drin, und der hat sich durch das gesamte Programm durchgezogen bis an die Stelle wo es doch mal kritisch wird. Trotzdem vielen dank den Leuten 🙂 Damit auch in Zukunft jemand was davon hat, hier der Code wie ich mittels Größenangabe dynamisch 2 Matrizen Multipliziere.

    void Mva_MatrixMult(double** MatrixA, double** MatrixB, double** Result, int MatrixARow, int MatrixAColumn, int MatrixBColumn)
    {
       unsigned int i, j, k;
    
       for(i = 0; i < MatrixARow; i++)                                
    	{                                                               
    		for(j = 0; j < MatrixBColumn; j++)                        
    		{   
    			Result[i][j] = 0.0;
    			for(k = 0; k < MatrixAColumn; k++)                     
    			{                                                   
    			     Result[i][j] += MatrixA[i][k] * MatrixB[k][j];
    
    			}                                                           
    		}
    	  }
    


  • weltnichtmehrversteher schrieb:

    Tim, warum stellst du nicht eine Frage statt so eine nutzlose Antwort zu geben?

    Du weißt doch, wie das ist mit den Frauen und ihren Tagen 🙄 . Die sind dann halt einfach manchmal nicht gut drauf 😉 .

    Ich wollte sichergehen, daß Bummi nicht versucht, auf solche Art ein Array durchzupressen (das compiliert nämlich prächtig):

    void foo(double **matrix)
    {
    	matrix[2][1] = 10;
    	// do something
    }
    
    void bar(void)
    {
    	double mat_a[3][4];
    	foo((double **)mat_a);
    }
    

    @Bummi1983:
    Wenn Du künftig Fragen hast, bitte die relevanten Sachen gleich mit beigeben (also Funktionsheader, Deklaration der betroffenen Vars, im Idealfall ein Stück, das compiliert und den Fehler zeigt.
    Dann muß man Dir nicht alles einzeln "aus der Nase ziehen". 🙂



  • pointercrash() schrieb:

    weltnichtmehrversteher schrieb:

    Tim, warum stellst du nicht eine Frage statt so eine nutzlose Antwort zu geben?

    Du weißt doch, wie das ist mit den Frauen und ihren Tagen 🙄 . Die sind dann halt einfach manchmal nicht gut drauf 😉 .

    Lern mal mit Kritik klarzukommen.



  • ^^ los, prügelt euch!
    🙂



  • ~fricky schrieb:

    ^^ los, prügelt euch!
    🙂

    Och, ist doch nur der kleine Timmy mit seinen Launen. Das soll seine Mami regeln ... 😉


Anmelden zum Antworten