1

私は現在 C++ のプロジェクトに取り組んでおり、独自のデータ型 (行列、配列など) を作成する代わりに、Matlab データ構造を使用することに実際に興味があります。

C++ で Matlab オブジェクトをシームレスに使用する方法はありますか? プログラムの実行中にバックグラウンドで Matlab を実行する必要はありません。

編集: 出発点はこれです: http://www.mathworks.co.uk/help/matlab/calling-matlab-engine-from-cc-and-fortran-programs.html。私はこれを読み続けます。

4

4 に答える 4

4

代わりに Armadillo C++ 数学ライブラリを使用できます。NASA、ボーイング、シーメンス、ドイツ銀行、MIT、CMU、スタンフォードなどで使用されています。

MATLAB/OCTAVE http://arma.sourceforge.net/docs.html#syntaxに精通している場合は、適切なドキュメントと例があります。

Matlabではなく、ある種のネイティブC++ライブラリを使用することをお勧めします。これは、開発と実行の両方でより高速になる可能性があります。

于 2014-02-21T22:11:50.513 に答える
1

あなたが見ている機能は、シームレスなオブジェクトとして使用することを意図したものではありません。過去に使用したとき、ネイティブ配列またはサードパーティの行列ライブラリを使用して C 部分を実行し、それを Matlab 行列に変換して返す方がはるかに簡単であることがわかりました。

Matlab と C++ の混合は、通常、次の 2 つの方法のいずれかで行われます。

  1. C++ プログラムで Matlab を呼び出して、専門的な処理を行う。これは主に、複雑な行列アルゴリズムの迅速な開発に役立ちます。これを行うには、完全な Matlab エンジンを呼び出すか、Matlab コードのスニペットを配布用の共有ライブラリにパッケージ化します。(配布バージョンは、スクリプトで呼び出される Matlab ランタイムの配布可能なコピーをパッケージ化します)。

  2. Matlab スクリプトで C++ 関数を呼び出して、専門的な処理を行う。これは、アルゴリズム (機械学習モデルなど) の C++ 実装を埋め込んだり、特定の最適化を処理したりするためによく使用されます。

これらのユースケースはどちらも、Matlab との間でデータを転送する際にオーバーヘッドが発生します。

C++ で使用するマトリックス コードを単純に探している場合は、Boostで実装されているものなど、さまざまな C++ マトリックス ライブラリを調べたほうがよいでしょう。

于 2014-02-21T20:24:09.293 に答える