C++ から MATLAB への変数の引き渡し
変数の渡し方
これらの例では、以下の手法を使用して C++ 変数を MATLAB® に渡す方法を示します。
matlab::engine::MATLABEngineのメンバー関数fevalまたはfevalAsyncの呼び出しで、変数を関数の引数として渡す。関数呼び出しの引数として渡される変数は、MATLAB ベース ワークスペースには保存されません。詳細については、C++ からの MATLAB 関数の呼び出しを参照してください。matlab::engine::MATLABEngineのメンバー関数setVariableとsetVariableAsyncを使用して、変数を MATLAB ベースまたはグローバル ワークスペースに配置する。MATLAB でのグローバル変数の使用の詳細については、MATLAB 関数globalを参照してください。
matlab::engine::MATLABEngine のメンバー関数evalとevalAsyncを使用して、MATLAB ワークスペースで変数を作成することができます。これらの関数を使用して、変数への代入を行う MATLAB ステートメントを実行します。詳細については、C++ からの MATLAB ステートメントの評価を参照してください。
MATLAB ベース ワークスペースへの変数の配置
この例では以下の手順が実行されます。
MATLABEngine::setVariableを使用して MATLAB ワークスペースに変数を配置するMATLABEngine::evalを使用してこれらの変数を MATLAB 関数movsumの呼び出しに使用するMATLABEngine::getVariableを使用して MATLAB ワークスペースから出力変数Aを取得する
以下は等価の MATLAB コードです。
A = movsum([4 8 6 -1 -2 -3 -1 3 4 5],3,'Endpoints','discard');
以下は C++ コードです。
#include "MatlabDataArray.hpp"
#include "MatlabEngine.hpp"
#include <iostream>
void callputVariables() {
using namespace matlab::engine;
// Start MATLAB engine synchronously
std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB();
//Create MATLAB data array factory
matlab::data::ArrayFactory factory;
// Create variables
matlab::data::TypedArray<double> data = factory.createArray<double>({ 1, 10 },
{ 4, 8, 6, -1, -2, -3, -1, 3, 4, 5 });
matlab::data::TypedArray<int32_t> windowLength = factory.createScalar<int32_t>(3);
matlab::data::CharArray name = factory.createCharArray("Endpoints");
matlab::data::CharArray value = factory.createCharArray("discard");
// Put variables in the MATLAB workspace
matlabPtr->setVariable(u"data", std::move(data));
matlabPtr->setVariable(u"w", std::move(windowLength));
matlabPtr->setVariable(u"n", std::move(name));
matlabPtr->setVariable(u"v", std::move(value));
// Call the MATLAB movsum function
matlabPtr->eval(u"A = movsum(data, w, n, v);");
// Get the result
matlab::data::TypedArray<double> const A = matlabPtr->getVariable(u"A");
// Display the result
int i = 0;
for (auto r : A) {
std::cout << "results[" << i << "] = " << r << std::endl;
++i;
}
}C++ エンジン プログラムを設定およびビルドする方法の詳細については、Requirements to Build C++ Engine Applicationsを参照してください。
参考
matlab::engine::MATLABEngine | matlab::engine::startMATLAB