You can execute MATLAB® functions from Java® using the MatlabEngine
feval
and fevalAsync
methods.
These methods work like the MATLAB feval
function.
Use feval
and fevalAsync
when
you want to return the result of the function execution to Java or
to pass arguments from Java.
To call a MATLAB function:
Pass the function name as a string.
Define the input arguments required by the MATLAB function.
Specify the number of outputs expect from the MATLAB function (1 is assumed if not specified).
Define the appropriate returned type for the outputs of the MATLAB function.
Use writers to redirect output from the MATLAB command window to Java.
You can also use the MatlabEngine
eval
and evalAsync
methods
to evaluate MATLAB expressions. These methods enable you to create
variables in the MATLAB workspace, but do not return values.
This example code uses the MATLAB sqrt
function
to find the square root of the elements in an array of doubles. The feval
method
returns a double array containing the results of the sqrt
function
call.
import com.mathworks.engine.*; public class javaFevalFunc{ public static void main(String[] args) throws Exception{ MatlabEngine eng = MatlabEngine.startMatlab(); double[] a = {2.0 ,4.0, 6.0}; double[] roots = eng.feval("sqrt", a); for (double e: roots) { System.out.println(e); } eng.close(); } }
This example code uses the MATLAB gcd
function
to find the greatest common divisor and Bézout coefficients from
the two integer values passes as input arguments. The feval
method
returns an object array containing the results of the gcd
function
call. The returned values are integers.
Because the MATLAB gcd
function is returning
three output arguments, specify the number of returned values as the
first argument to the feval
method.
import com.mathworks.engine.*; public class javaFevalFcnMulti { public static void main(String[] args) throws Exception { MatlabEngine eng = MatlabEngine.startMatlab(); Object[] results = eng.feval(3, "gcd", 40, 60); Integer G = (Integer)results[0]; Integer U = (Integer)results[1]; Integer V = (Integer)results[2]; eng.close(); } }
The MatlabEngine
feval
and fevalAsync
methods
enable you to specify the number of output arguments returned by the MATLAB function.
By default, the number of output arguments from the MATLAB function
is assumed to be 1
.
If you want to call a MATLAB function with no outputs or
more than one output, specify that number as the first argument passed
to feval
or fevalAsync
.
For example, this code calls the MATLAB gcd
function with the three output syntax:
Object[] results = eng.feval(3, "gcd", 40, 60);
MATLAB functions can behave differently depending on the
number of outputs requested. Some functions can return no outputs
or a specified number of outputs. For example, the MATLAB pause
function holds execution for a
specified number of seconds. However, if you call pause
with
an output argument, it returns immediately with a status value. Therefore,
this code does not cause MATLAB to pause because feval
requests
one output argument.
eng.feval("pause", 10);
To pause MATLAB execution for the 10 seconds requested,
specify the number of outputs as 0
.
eng.feval(0, "pause", 10);
To ensure that a MATLAB function is called with no outputs,
specify the number of returned arguments as 0
.