私は、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 歳であるかのように説明できる人がいれば、非常にありがたいです!
ありがとう、
セブ。