Некоторый MATLAB® функции принимают a 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. Например, MATLAB eval
функция требует 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);