Timothy asked . 2020-12-12
Fmincon code generation with C++ objective
I try to generate a mex file for fmincon in combination with an objective in c++.
My objective looks like:
#include
#include
#include "obj.h"
double obj(double x)
{
return x*x;
}
and the corresponding header file:
double obj(double x);
On MATLAB side I have writte a wrapper as desribed in the MATLAB docs:
function y = callobj(x) %#codegen
y = 0.0;
if coder.target('MATLAB')
% Executing in MATLAB, call MATLAB equivalent of
% C function foo
y = x*x;
else
% Executing in generated code, call C function foo
coder.updateBuildInfo('addSourceFiles','obj.cpp');
coder.cinclude('obj.h');
y = coder.ceval('obj',coder.ref(x));
end
end
The objective is passed to the fmincon function in a matlab function:
function x_result = opt_th(x0,lb,ub)
options = optimoptions('fmincon','Algorithm','sqp');
x_result = fmincon(@callobj,x0,[],[],[],[],lb,ub,[],options);
end
The test script is defined as:
x0 = -2;
lb = -2.2;
ub = 3.3;
x_res = opt_th(x0,lb,ub);
So thats the definition of the problem.
If I run the Coder App I get an compiler error:
[1/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex opt_th_data.c /Fobuild\win64\opt_th_data.obj
opt_th_data.c
[2/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex rt_nonfinite.c /Fobuild\win64\rt_nonfinite.obj
rt_nonfinite.c
[3/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex factorQRE.c /Fobuild\win64\factorQRE.obj
factorQRE.c
[4/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2\obj.cpp" /Fobuild\win64\obj.obj
obj.cpp
[5/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex opt_th_mexutil.c /Fobuild\win64\opt_th_mexutil.obj
opt_th_mexutil.c
[6/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex opt_th_initialize.c /Fobuild\win64\opt_th_initialize.obj
opt_th_initialize.c
[7/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex factorQR.c /Fobuild\win64\factorQR.obj
factorQR.c
[8/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex eml_int_forloop_overflow_check.c /Fobuild\win64\eml_int_forloop_overflow_check.obj
eml_int_forloop_overflow_check.c
[9/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex computeObjective_.c /Fobuild\win64\computeObjective_.obj
FAILED: build/win64/computeObjective_.obj
cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex computeObjective_.c /Fobuild\win64\computeObjective_.obj
computeObjective_.c
computeObjective_.c(18): fatal error C1083: Datei (Include) kann nicht ge”ffnet werden: "ssq.h": No such file or directory
[10/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex opt_th.c /Fobuild\win64\opt_th.obj
opt_th.c
[11/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex computeFiniteDifferences.c /Fobuild\win64\computeFiniteDifferences.obj
computeFiniteDifferences.c
[12/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex squareQ_appendCol.c /Fobuild\win64\squareQ_appendCol.obj
squareQ_appendCol.c
[13/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex xcopy.c /Fobuild\win64\xcopy.obj
xcopy.c
[14/87] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /I "." /I "D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2" /I ".\interface" /I "C:\Program Files\MATLAB\R2020a\extern\include" /I "." -DMODEL=opt_th_mex fmincon.c /Fobuild\win64\fmincon.obj
fmincon.c
D:\OneDrive\OneDrive - ruhr-uni-bochum.de\Fitter\code_gen_2\codegen\mex\opt_th\fmincon.c(159) : warning C4700: Die nicht initialisierte lokale Variable "FiniteDifferences" wurde verwendet.
ninja: build stopped: subcommand failed.
matlab, ann , matlab coder