2012-10-13 58 views
1

我想從C++調用Matlab的fmincon函數。我使用的呼叫matlab fmincon從C++調用

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

其中arg2"是一個Matlab mxArray陣列尺寸4的(即,它被定義爲mxArray *arg2[4])。 arg2接受fmincon的4個不同參數。 arg2[0]應該是fmincon用作其第一個參數的目標函數句柄。 問題是如何將目標函數句柄傳遞給arg2[0]。 我的目標函數沒有在Matlab中定義,而是在C++中定義。我應該把我的目標函數指針加倍(這是我必須做的,因爲Matlab的所有輸入都是雙精度值),然後將其傳遞給arg2[0]

+1

我認爲這個問題不是很清楚,任何人都不明白。你可以編輯帖子,並更具描述性。 – Deamonpog

回答

1

由於發現here

只有MATLAB可以調用MATLAB函數處理。 MATLAB中的函數句柄是一個數據結構,其中包括(其中包括)一個數據塊的引用,該數據塊存儲MATLAB預編譯的 線程解釋器格式的代碼,需要由MATLAB 引擎進行解釋。 MATLAB .m代碼不會編譯成機器語言,只有 才能鏈接到數據結構。

所以你不能達到你想要的,就像你想要的那樣。您必須在單獨的MEX文件中定義目標函數,在Matlab中爲其定義一個函數句柄,然後將其傳遞給您稱爲fmincon的MEX。所以,像

[sol, fval, ...] = your_main_mex(@your_objective_mex, ...)