Некоторые функции MATLAB® принимают struct
пар "имя-значение" как входные параметры. API MATLAB Engine для Java® обеспечивает класс com.mathworks.matlab.engine.Struct
, чтобы создать эту структуру данных на Java и передать его MATLAB, где это преобразовано в struct
MATLAB.
Некоторые функции MATLAB, которые принимают входной параметр struct
, требуют, чтобы значения полей, чтобы быть векторами символов MATLAB (char
) вместо MATLAB представили в виде строки (string
). Чтобы создать Java Struct
с правильным типом значений, преобразуйте от String
до массива char
прежде, чем передать переменную MATLAB.
Можно использовать метод toCharArray
для преобразования:
char[] on = "on".toCharArray(); char[] yOut = "yOut".toCharArray(); char[] tOut = "tOut".toCharArray(); Struct simParam = new Struct("SaveOutput", on, "OutputSaveName", yOut,"SaveTime", on, "TimeSaveName", tOut);
Когда функции MATLAB требуют входных параметров char
, можно преобразовать Java, который String
в вызове функции передал MATLAB. Например, функция eval
MATLAB требует входного параметра char
:
double result = engine.feval("eval", "3+5");
Undefined function 'eval' for input arguments of type 'string'..
Передача массива char
работает правильно.
double result = engine.feval("eval", "3+5".toCharArray());
Можно установить значения свойств графического объекта MATLAB с помощью указателя объекта. Передайте имена свойства и значения свойств как Java массивы char
при передаче функциям MATLAB.
double[][] data = {{1.0, 2.0, 3.0}, {-1.0, -2.0, -3.0}}; HandleObject[] h = eng.feval("plot", (Object)data); String property = ("HitTest"); String value = ("off"); eng.feval(0,"set", h, property.toCharArray(), value.toCharArray());
Некоторые функции MATLAB, такие как sqrt
ограничивают входной параметр double
или значениями точности single
. Движок MATLAB преобразовывает целые числа Java в MATLAB значения int32
. Для функций MATLAB, которые не принимают целочисленные значения, гарантируйте, чтобы вы передали соответствующие числовые значения.
double result = engine.feval("sqrt", 4);
Undefined function 'sqrt' for input arguments of type 'int32'.
Передача двойные работы правильно.
double result = engine.feval("sqrt", 4.0);