Main Content

C++ から MATLAB への変数の引き渡し

変数の渡し方

以下の手法を使用して、C++ 変数を MATLAB® に渡すことができます。

  • matlab::engine::MATLABEngine のメンバー関数fevalまたはfevalAsyncの呼び出しで、変数を関数の引数として渡す。関数呼び出しの引数として渡される変数は、MATLAB ベース ワークスペースには保存されません。詳細については、C++ からの MATLAB 関数の呼び出しを参照してください。

  • matlab::engine::MATLABEngine のメンバー関数setVariablesetVariableAsyncを使用して、変数を MATLAB ベースまたはグローバル ワークスペースに配置する。MATLAB でのグローバル変数の使用の詳細については、MATLAB 関数 global を参照してください。

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

参考

|

関連するトピック