mxArray in Schleife mit Werten füllen



  • Hallo.
    Ich möchte gerne mein mxArray

    mxArray *result[1];
    

    in einer Schleife mit Werten füllen. Ich verstehe jetzt aber nicht ganz, wie ich die Werte übergeben soll. Durch

    result[0]
    

    erhalte ich ja Zugriff auf ein ganzes Array, welches im mxArray gespeichert ist, quasi ein Array im Array? Wenn ich einen einzelnen Wert (einen 2x1-Vektor) übergebe klappt das. In jeder Schleifenfolge soll aber immer wieder ein neu berechneter 2x1-Vektor angehängt werden. Muss man da mit der Klasse "vector" arbeiten?
    Und, ich möchte nicht das mxArray erweitern, also nicht

    mxArray *result[Gewünschte Länge]
    

    Dann gäbs doch Schwierigkeiten, wenn man mehrere Outputs hat.

    Vielen Dank schonmal.

    #include <math.h>
    #include "mex.h"
    #include <string.h>
    void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
    {
        // Fange Fehler ab
        if (nrhs == 0)
        mexErrMsgTxt("Fehler: Keine Eingabeparameter");
    
        // Makros für vereinfachte Eingabe
        #define DS_OUT plhs[0]
        #define p_IN prhs[0]
        #define t_IN prhs[1]
    
        // Definiere Zaehler, Variablen und Arrays
        int i;                                  // Zähler
        double p_M, p_N, t_M, t_N, T_M, T_N;    // Variablen        
        mxArray *result[1];                     // Arrays
        mxArray *arguments[3];
    
        // Ermittle Dimensionen
        p_M = mxGetM(p_IN); 
        p_N = mxGetN(p_IN);
        t_M = mxGetM(t_IN);  
        t_N = mxGetN(t_IN); 
    
        // Erstelle Arrays und lese Daten ein
        arguments[0] = mxCreateDoubleMatrix(p_M, p_N, mxREAL);
        arguments[1] = mxCreateDoubleMatrix(t_M, t_N, mxREAL);
    //     result[0] = mxCreateDoubleMatrix(2, t_N, mxREAL);
    
        memcpy(mxGetPr(arguments[0]), mxGetPr(p_IN), sizeof(double)*p_M*p_N);
        memcpy(mxGetPr(arguments[1]), mxGetPr(t_IN), sizeof(double)*t_M*t_N);
    
        for (i = 0; i < t_N; i++) {
            arguments[2] = mxCreateDoubleScalar(i+1);
            mexCallMATLAB(1,result,3,arguments,"SchwerpunktDreieck");
    
           // HIER MÖCHTE ICH AN RESULT IMMER WIEDER DAS NEU BERECHNETE ERGEBNIS ANHÄNGEN
        }
    
        // Übergebe Ergebnis
        DS_OUT = result[0];
        return;    
    }
    

Anmelden zum Antworten