メインコンテンツ

C++ アプリケーションでの MATLAB 関数の統合

この例では、feval 関数を使用して MATLAB® 関数を呼び出す C++ アプリケーションを作成、ビルド、および実行する方法を示します。C++ アプリケーション コードでは、C++ 用の MATLAB エンジン API と C++ 用の MATLAB データ API を使用して、MATLAB 関数およびデータを操作します。この例では、mex コマンドを呼び出して、MATLAB を使用してアプリケーションをビルドします。

前提条件

  • C++ 開発環境が設定されていることを確認します。詳細については、C++ 開発環境の設定を参照してください。

  • C++ 用の MATLAB エンジン API を使用して C++ プログラムをビルドするためのすべての要件が満たされていることを確認します。詳細については、C++ エンジン アプリケーションをビルドするための要件を参照してください。

  • MATLAB コマンド プロンプトで次のステートメントを入力して、C++ コンパイラがインストールされていることを確認します。

    mex -setup -client engine C++

MATLAB を呼び出す C++ アプリケーションの作成

この例では、C++ 開発環境として MATLAB を使用します。この C++ コードでは、C++ 用の MATLAB エンジン API およびデータ API のヘッダー ファイルと、標準の入出力ストリーム ライブラリがインクルードされています。このコードでは、エンジン API を使用して MATLAB セッションを開始し、データ API を使用して 4 要素の double 配列を作成します。feval 関数は、この配列を入力として MATLAB sqrt 関数を呼び出します。次に、コードでは feval 関数呼び出しの結果を表示します。

この例では、コードを testFeval.cpp という名前のファイルに保存します。

#include "MatlabDataArray.hpp"
#include "MatlabEngine.hpp"
#include <iostream>
void callSQRT() {

    using namespace matlab::engine;

    // Start MATLAB engine synchronously
    std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB();

    // Create MATLAB data array factory
    matlab::data::ArrayFactory factory;

    // Define a four-element typed array
    matlab::data::TypedArray<double> const argArray = 
        factory.createArray({ 1,4 }, { -2.0, 2.0, 6.0, 8.0 });

    // Call MATLAB sqrt function on the data array
    matlab::data::Array const results = matlabPtr->feval(u"sqrt", argArray);

    // Display results
    for (int i = 0; i < results.getNumberOfElements(); i++) {
        double a = argArray[i];
        std::complex<double> v = results[i];
        double realPart = v.real();
        double imgPart = v.imag();
        std::cout << "Square root of " << a << " is " << 
            realPart << " + " << imgPart << "i" << std::endl;
    }
}

int main() {
    callSQRT();
    return 0;
}

C++ アプリケーションのビルド

mex 関数を使用して、testFeval アプリケーションをコンパイルしてリンクします。次のコマンドは、実行可能ファイル testFeval.exe を現在のフォルダーに保存します。

mex -v -client engine testFeval.cpp

C++ アプリケーションの実行

アプリケーションを実行するには、まず、適切な環境変数を指定パスに追加してランタイム環境を構成してください。詳細については、ランタイム環境を参照してください。

たとえば、Windows® 上の matlabrootC:\Program Files\MATLAB\R2024b の場合、次のシステム プロンプト コマンドによってランタイム環境変数を設定します。

set PATH=C:\Program Files\MATLAB\R2024b\extern\bin\win64;%PATH%

次に、アプリケーションを実行します。

testFeval.exe

MATLAB は、データ配列内の数値の 1 つが負であるため、複素数配列を C++ プログラムに返します。その後、C++ プログラムが結果を表示します。

Square root of -2 is 0 + 1.41421i
Square root of 2 is 1.41421 + 0i
Square root of 6 is 2.44949 + 0i
Square root of 8 is 2.82843 + 0i

参考

|

トピック