diff options
Diffstat (limited to 'ml/dlib/dlib/matlab/example_mex_callback.cpp')
-rw-r--r-- | ml/dlib/dlib/matlab/example_mex_callback.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/ml/dlib/dlib/matlab/example_mex_callback.cpp b/ml/dlib/dlib/matlab/example_mex_callback.cpp new file mode 100644 index 00000000..a5a25dda --- /dev/null +++ b/ml/dlib/dlib/matlab/example_mex_callback.cpp @@ -0,0 +1,52 @@ +// The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt + +#include "call_matlab.h" +#include "dlib/matrix.h" + +using namespace dlib; +using namespace std; + +/* + This mex function takes a MATLAB function handle, calls it, and + returns the results. + + For example, you can call this function in MATLAB like so: + A = magic(3) + y = example_mex_callback(A, @(x)x+x) + + This will result in y containing the value 2*A. +*/ + +void mex_function ( + const matrix<double>& A, + const function_handle& f, + matrix<double>& result +) +{ + // The f argument to this function is a function handle passed from MATLAB. To + // call it we use the following syntax: + call_matlab(f, A, returns(result)); + // This is equivalent to result = f(A). Therefore, the returns(variable) syntax + // is used to indicate which variables are outputs of the function. + + + + + // Another thing we can do is call MATLAB functions based on their string name + // rather than a function_handle. Here is an example of calling eigs(). + matrix<double> m(2,2); + m = 1,2, + 3,4; + matrix<double> v,d; + + // This is equivalent to [v,d] = eigs(m); + call_matlab("eigs", m, returns(v), returns(d)); + cout << "eigenvectors: \n" << v << endl; + cout << "eigenvalues: \n" << d << endl; +} + + + +// #including this brings in all the mex boiler plate needed by MATLAB. +#include "mex_wrapper.cpp" + |