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++ エンジン プログラムを設定およびビルドする方法の詳細については、C++ エンジン プログラムのビルド要件を参照してください。