C++ からの MATLAB ステートメントの評価
MATLAB ステートメントの評価
これらの例では、MATLABEngine::eval
および MATLABEngine::evalAsync
メンバー関数を使用して MATLAB® ステートメントを C++ から評価する方法を示します。これらのメンバー関数は、MATLAB 関数 eval
とよく似ています。関数 MATLABEngine::eval
と関数 MATLABEngine::evalAsync
は MATLAB ステートメントの評価結果を返しません。
引数を C++ から渡す必要がない場合や値を C++ に返す必要がない場合は、MATLABEngine::eval
および MATLABEngine::evalAsync
を使用します。これらの関数で実行するステートメントは、MATLAB ワークスペースの変数にアクセスできます。
以下は、MATLAB でステートメントを評価するときの注意点です。
これらの関数はステートメントを
matlab::engine::String
として MATLAB に渡します。リテラル
u"…"
またはユーティリティ関数matlab::engine::convertUTF8StringToUTF16String
を使用して、std::string
をmatlab::engine::String
に変換します。文字列内で名前がつけられた入力引数は、MATLAB ワークスペースになければなりません。
評価の結果は、ステートメント文字列内で変数に代入することができます。ステートメントに代入する値は、MATLAB ベース ワークスペースで作成されます。
MATLAB では、ステートメントで作成された変数を初期化する必要がありません。
MATLAB 関数からの標準出力とエラー メッセージをストリーム バッファーに格納することができます。
MATLAB での数学関数の評価
この例では MATLABEngine::eval
を使用して、一連の MATLAB ステートメントを評価します。これらのステートメントは次を行います。
以下は等価の MATLAB コードです。
[X, Y] = meshgrid(-2:0.2:2); Z = X .* exp(-X.^2 - Y.^2); surf(Z) print('SurfaceGraph', '-djpeg') currentFolder = pwd;
以下は、これらのステートメントを MATLAB で実行する C++ コードです。
#include "MatlabDataArray.hpp"
#include "MatlabEngine.hpp"
#include <iostream>
void evalSurfaceGraph() {
// Evaluate functions in MATLAB
using namespace matlab::engine;
// Start MATLAB engine synchronously
std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB();
// Evaluate commands in MATLAB
matlabPtr->eval(u"[X, Y] = meshgrid(-2:0.2:2);");
matlabPtr->eval(u"Z = X .* exp(-X.^2 - Y.^2);");
matlabPtr->eval(u"surf(Z)");
matlabPtr->eval(u"print('SurfaceGraph', '-djpeg')");
matlabPtr->eval(u"currentFolder = pwd;");
// Get the name of the folder containing the jpeg file
matlab::data::CharArray currentFolder = matlabPtr->getVariable(u"currentFolder");
std::cout << "SurfaceGraph.jpg written to this folder: " <<
currentFolder.toAscii() << std::endl;
}
C++ エンジン プログラムを設定およびビルドする方法の詳細については、Requirements to Build C++ Engine Applicationsを参照してください。