1

fminconC++ からMatlab の関数を呼び出そうとしています。通話を利用しています

mxcallMatlab(2, &arg1, 4, &arg2, "fmincon");

ここで、 は次元 4arg2"の MatlabmxArray配列です (つまり、 として定義されますmxArray *arg2[4])。arg2への 4 つの異なる引数を受け取りますfmincon。最初の引数として使用arg2[0]する目的関数ハンドルでなければなりません。fmincon問題は、目的関数のハンドルを に渡す方法ですarg2[0]。私の目的関数は Matlab ではなく、c++ で定義されています。目的関数ポインターを double にキャストし (Matlab へのすべての入力が double であるため、これを行う必要があります)、それを に渡しarg2[0]ますか?

4

1 に答える 1

1

ここにあるように:

MATLAB 関数ハンドルを呼び出すことができるのは MATLAB だけです。MATLAB の関数ハンドルは、MATLAB エンジンによる解釈が必要な事前解析済みスレッド インタープリター形式で MATLAB コードを格納するデータ ブロックへの参照を (特に) 含むデータ構造です。MATLAB .m コードは機械語にコンパイルされず、リンクされたデータ構造にのみコンパイルされます。

したがって、あなたが望むように、あなたが望むものを直接達成することはできません. 別の MEX ファイルで目的関数を定義し、Matlab でその関数ハンドルを定義し、それを呼び出した MEX に渡す必要がありますfmincon。だから、次のようなもの

[sol, fval, ...] = your_main_mex(@your_objective_mex, ...)
于 2012-10-13T18:16:39.990 に答える