Matrix in C- programmieren



  • Einen wunderschönen guten Tag !

    Ich schreibe hier einfach mal verzweifelt mein Anliegen rein 😉

    Im Studium haben wir folgende Aufgabe als Übung angeboten bekommen:

    "Schreiben Sie eine Funktion, die eine 3x3-Matrix und einen Vektor mit 3 Elementen einliest. Anschließend soll das Ergebnis der Multiplikation zwischen der Matrix und dem Vektor berechnet, in
    einer Variable gespeichert und ausgegeben werden.
    Speichern Sie die Matrix und den Vektor in Variablen geeigneter Dimension des Typs Array."

    Ich bin Anfänger und sitze da nun schon ein paar Stunden dran. Wäre ziemlich nett, wenn mir vielleicht jemand dabei helfen könne?!

    PS: Ich studiere etwas komplett anderes. Wir machen das nur, um....naja...den Grund konnte unser Proff uns auch nicht sagen 😉



  • Kennst du die mathematisxhen Grundlagen dafür?



  • du meinst vektorenmultiplikation? ja, die bekomm ich wohl hin 🙂



  • Du brauchst ein ein 2D-Array für die Matrix und zwei 1D-Arrays für den Vector und das Ergebnis.

    Eine Funktion der Art

    void Funktionsname (int ergebnis[3], int vector[3], int matrix[3][3])
    { ...}
    

    In der Funktion brauchst du dann drei verschachtelte Schleifen für i,j und k (bei http://de.wikipedia.org/wiki/Matrix_%28Mathematik%29#Matrizenmultiplikation)
    (du brauchst nur zwei, da ein Parameter 1 ist)



  • Danke für die Antwort.

    Also ich bin jetzt derzeit soweit gekommen :

    #include <stdio.h>
    #define LEN 3
    
    void AusgabeMatrix(double matrix[][LEN])
    { long i, j;
    for (i = 0; i < LEN; i = i + 1)
    { for (j = 0; j < LEN; j = j + 1)
    printf("%8g ", matrix[i][j]);
    printf("\n");
    }
    }
    void EingabeMatrix(double matrix[][LEN])
    { long i, j;
    for (i = 0; i < LEN; i = i + 1)
    { for (j = 0; j < LEN; j = j + 1)
    { printf("Element (%2ld, %2ld): ", i, j);
    scanf("%lf", &matrix[i][j]);
    }
    }
    } 
    void MatrixMultiplikation(double ergebnis[][LEN],
    double matrix1[][LEN],
    double matrix2[][LEN])
    { long i, j, k;
    double sum;
    for (i = 0; i < LEN; i = i + 1)
    { for (j = 0; j < LEN; j = j + 1)
    { sum = 0;
    for (k = 0; k < LEN; k = k + 1)
    sum += matrix1[i][k] * matrix2[k][j];
    ergebnis [i][j] = sum;
    }
    }
    } 
    main()
    { double arg1[LEN][LEN];
    double arg2[LEN][LEN];
    double erg [LEN][LEN];
    
    printf("Eingabe Matrix 1:\n");
    EingabeMatrix(arg1);
    printf("Eingabe Matrix 2:\n");
    EingabeMatrix(arg2);
    
    MatrixMultiplikation(erg, arg1, arg2);
    
    printf("Ergebnismatrix:\n");
    AusgabeMatrix(erg);
    }
    

    Aber das ist ja jetzt eine 3x3 Matrix im 1. Wert und 3x3 im 2. Wert.

    Ich multipliziere also quasie 9 Werte mit 9 Werten. Kla, weil ich zu Beginn LEN mit "3" definiert habe. Aber wie kann ich z.B. 9 Werte mit 3 Werten multiplizieren?

    Also quasie so :

    1 2 3 1
    2 4 3 * 2
    1 4 6 4



  • Noname7350 schrieb:

    Ich multipliziere also quasie 9 Werte mit 9 Werten. Kla, weil ich zu Beginn LEN mit "3" definiert habe. Aber wie kann ich z.B. 9 Werte mit 3 Werten multiplizieren?

    Also quasie so :

    1 2 3 1
    2 4 3 * 2
    1 4 6 4

    Indem du das eine LEN in den Schleifen von MatrixMultiplikation durch 1 ersetzt.


Anmelden zum Antworten