Matlabfunktion in C++ verwenden



  • Hallo zusammen

    Ich habe diese funktion aus Matlab und möchte die nun in C++ .
    Einige sachen konnte ich eänder doch mit zeros und 1:size hab ich probleme.

    Danke für euren supper support.

    E_Multiplier   = zeros(length(DeltaP_Cell), length(DeltaP_Cell));
    
        for i = 1:size(E_Multiplier, 1)
            for j = 1:size(E_Multiplier, 2)
                if i >= j
                    E_Multiplier(i,j) = 1;
                end
            end
        end
    -----------------------------------------------------
    Version in C++
    
    E_Multiplier   = zeros(sizeof(p), sizeof(p));        // Define the multiplication matrix, such that integrating the power is achieved via matrix multiplication
    
        for (i = 1:size(E_Multiplier, 1))
            {for (j = 1:size(E_Multiplier, 2))
                {if (i >= j)
                    {E_Multiplier(i,j) = 1;}
                 }
            }
    


  • @Dabru sagte in Matlabfunktion in C++ verwenden:

     E_Multiplier   = zeros(sizeof(p), sizeof(p));        // Define the multiplication matrix, such that integrating the power is achieved via matrix multiplication
    
        for (i = 1:size(E_Multiplier, 1))
    

    Was ist p? Warum sizeof p - du scheinst doch eher eine (variable) Länge haben zu wollen als die (konstante) Größe des Speicherverbrauchs (in Bytes) der Variablen p?

    Ich kenne mich mit Matlab nicht aus, haben die C++-Header? Wenn ja, wo? Wäre spannend zu wissen, weil du ja irgendwie die Matlab-Matrixklasse zu verwenden scheinst.

    Edit:
    schau mal hier: https://www.mathworks.com/help/matlab/matlab_external/create-matlab-array-with-matlab-data-cpp-api.html



  • Nur mal interessehalber, wofür brauchst du das? Ist hoffentlich kein ernstgemeinter numerischer Code (da sollte man solche Schleifen vermeiden, das was du zeigst würde man mit 'tril' bzw 'triu' machen).

    Aber:
    zeros erzeugt ein Array, das mit Nullen initialisiert ist. In c++ mit std::array wäre das z.B.

    array<array<float,DeltaP_Cell.size()>,DeltaP_Cell.size()> E_Multiplier {};
    

    Als Typ von DeltaP_Cell hab ich mal angenommen dass es ein Container mit size Funktion ist (also z.B. auch ein std::array).

    Die size Funktion in Matlab nimmt ein Array (E_Multiplier) und die Dimension (bei einem 2D-Array also 1 oder 2) als Argument. 1:size... gibt ein 1d-Adday mit den Indizes, die in der for-Schleife benötigt werden, zurück. Also kannst du die for Schleife auch schreiben:

        for (int i = 0; i < E_Multiplier.size(); ++i)
            for (int j = 0; j < E_Multiplier[i].size(); j++)
                if (i >= j)
                    E_Multiplier[i][j] = 1;
    

Log in to reply