summaryrefslogtreecommitdiffstats
path: root/ml/dlib/dlib/matlab/example_mex_callback.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/dlib/matlab/example_mex_callback.cpp')
-rw-r--r--ml/dlib/dlib/matlab/example_mex_callback.cpp52
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"
+