-1

私は、MatLab でシミュレーションを実行した経験があり、現在、MatLab を使用して MatLab エンジンを介してプロットする一方で、シミュレーションを実行するために C++ を学習しています。以下のコードは、変数を生成し、それを MatLab ワークスペースに渡し、それをプロットし、別の変数を C++ に戻すために記述したコードの例を示しています。

#include <iostream>
#include "engine.h"
//#include "mex.h"



using namespace std;

void main()
{

    //Create pointer for matlab engine
    Engine *matlab;

    //Open matlab engine interface
    matlab = engOpen("null");

    //Create variable
    double timedata[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    mxArray *T = mxCreateDoubleMatrix(1, 10, mxREAL);
    memcpy((void *)mxGetPr(T), (void *)timedata, 10 * sizeof(double));

    //Put variable into workspace
    engPutVariable(matlab, "workspaceT", T);

    //Evaluate strings in MatLab
    engEvalString(matlab, "D = workspaceT+2;");
    engEvalString(matlab, "plot(workspaceT,D);");

    //Get variable from MatLab workspace
    mxArray *d = engGetVariable(matlab, "D");

    double b[10];
    for (int i = 0; i < 9; i++)
    {
        b[i] = (double)mxGetPr(d)[i];
        cout << b[i];
    }
    cout << endl;

    system("pause");

    //Close matlab engine interface
    engClose(matlab);


}

特に気になる部分は・・・

memcpy((void *)mxGetPr(T), (void *)timedata, 10 * sizeof(double));

このコードが何をしているのかまったくわかりません。私はドキュメント(http://www.cplusplus.com/reference/cstring/memcpy/)を見てきましたが、正確には理解できませんでした。私が特に理解していない部分は、(void *) の使用です。前述したように、私のバックグラウンドは MatLab であり、C++ の専門家ではありません。そのため、ここで何が起こっているかを私が 5 歳であるかのように説明できる人がいれば、非常にありがたいです!

ありがとう、

セブ。

4

1 に答える 1