Matrix mal Vektor



  • Hallo,
    ich bin ein C-Anfänger und möchte in einer Funktion eine Matrix mit einem Vektor multiplizierne. Mein Hauptproblem liegt darin, dass ich den entstehenden Vektor nicht mehr rüber in main bekommen.
    Das Problem dabei ist, dass meine Dimension nicht fest ist, sondern dass ich sie mit einem Makro verändern kann. Sonst würde ich die unschöne Lösung nehmen, in der ich die einzelnen Komponenten multipliziere und addiere.

    double berechnen (double matrix[D][D], double vektor[D])
    {
       double ergebnis[D];
       double zwischenergebnis=0;
       for(i=0; i< D; i++)
        {
          for(j=0; j< D; j++)
            {
              zwischenergebnis = zwischenergebnis + matrix [i][j] * vektor[j];
            }
         ergebnis[i] = zwischenergebnis;
        }
      return (ergebnis);
    }
    
    //Aufruf in main
    
    double ergebnis[D];
    ergebnis = berechne (matrix, vektor);
    

    Den Code habe ich so geschrieben, wie ich es mir vorstelle dass es funktioniert(zumindest vom Prinzip her). Kann mir jemand sagen, wie ich das Ergenis der Funktion richtig in main bekomme?

    Vielen Dank



  • - etwas speicher mittels malloc() holen (und auf fehler pruefen!)
    - den speicher und seine groesse an deine funktion uebergeben
    - funktion pruefen lassen, ob das auch genug ist; wenn nicht, abbrechen mit fehler
    - funktion macht was mit dem speicher
    - funktion kommt zurueck, gibt evtl die verwendete laenge wieder

    aufrufende funktion stellt speicher und free()t ihn auch wieder.



  • ungefähr so:

    #define D 3
    #define TYPE int
    
    typedef struct __vector
    {
       TYPE values[D];
    } VECTOR;
    
    typedef struct __matrix
    {
       TYPE values[D][D];
    } MATRIX;
    
    VECTOR berechnen (MATRIX matrix, VECTOR vektor)
    {
       VECTOR ergebnis;
       int i, j;
    
       memset (&ergebnis, 0, sizeof(VECTOR));
    
       for (i=0; i<D; i++)
          for (j=0; j<D; j++)
             ergebnis.values[i] += matrix.values[i][j] * vektor.values[i];    
    
       return ergebnis;
    }
    

    kann aber sein dass du zeilen/spalten tauschen musst...



  • Danke für die schnellen Antworten.
    Ich werds gleich probieren.


Anmelden zum Antworten