1

私は経験豊富な MATLAB ユーザーですが、C および MEX ファイルについてはまったくの初心者です。MATLAB 内から呼び出す必要がある C で記述された複雑なプログラムがあります。このプログラムは、コマンド ラインからの入力を処理し、実際の計算を行う他のクラスに結果を渡す main.c と呼ばれるファイルを含む、フォルダー内の数十個のファイルで構成されます。

通常、このプログラムをコマンド ラインからインストールするには、UNIX コマンド プロンプトで ./configure, make を実行します。次に、プログラムを実行するには、./runMyProgram -f input_file.txt -p some_parameters. このプログラムは、数値のリストで構成されるテキスト ファイルを入力として受け取り、コマンド ウィンドウに結果の表を出力します。プログラムに (.txt ファイルの代わりに) MATLAB 配列をフィードし、(印刷された結果の表の代わりに) 配列を取得したいと考えています。

The Mathworks の MEX ドキュメント (かなりわかりにくいと思います) やその他の「チュートリアル」を読みましたが、完全に理解できませんでした。例は非常に単純な単一ファイルの C プログラム用であり、実際には議論していません。より大規模で複雑なプログラムを処理する方法。main.c ファイルを同じことを行う MEX ファイルに置き換えるだけで十分ですか? また、MATLAB 内でパッケージ全体をコンパイルするにはどうすればよいですか?

これをどこから始めるべきかについての平易な英語のアドバイス、またはこの主題をわかりやすい方法で扱うチュートリアルへのポインタに感謝します。

4

1 に答える 1

2

はい。通常、main.c ファイルを MEX ファイルに置き換えるプロセスです。あなたの場合、すでに複雑なビルド設定があるため、ライブラリをビルドしてから、このライブラリにリンクするだけの別の mex ファイルをビルドする方が簡単かもしれません。これは、mex コマンドを使用して全体を構築するよりもはるかに簡単です。ライブラリから呼び出す必要がある関数をエクスポートする場合は、mexFunction から呼び出すことができます。mexFunction は、mxArray のすべての作成と読み取りを行うことができます。簡単なサンプル mexFunction は次のようになります。

#include "mex.h"
// Include headers for your library

void
mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{
   void* x = mxGetData(prhs[0]); // Assume one input. Check nrhs
   plhs[0] = mxCreateDoubleMatrix(10,10,mxREAL); // Create 10x10 double matrix for output
   void* y = mxGetData(plhs[0]);
   yourLibraryFunction(x, y); // Read from x and write to y. Pass sizes in if needed
}
于 2013-05-23T13:11:46.637 に答える