exponenta event banner

Использование структур MATLAB в Java

Структуры MATLAB

Структуры MATLAB ® содержат данные и ссылаются на них с использованием имен полей. Каждое поле может содержать данные любого типа. Код MATLAB обращается к данным в структуре, используя точечную нотацию формыstructName.fieldName. Класс структуры MATLAB: struct.

Java ®com.mathworks.matlab.types.Struct класс позволяет:

  • Создать Struct в Java и передать его в MATLAB.

  • Создание MATLAB struct и вернуть его на Java.

com.mathworks.matlab.types.Struct класс реализует java.util.Map интерфейс. Однако нельзя изменять сопоставления, клавиши или значения Struct возвращено из MATLAB.

Проход Struct в функцию MATLAB

MATLAB set устанавливает свойства графических объектов MATLAB. Установка нескольких свойств в одном вызове для set, удобно использовать MATLAB struct. Определить это struct с именами полей, совпадающими с именами свойств, которые требуется задать. Значение, на которое ссылается поле, является значением, назначенным свойству.

Этот пример кода выполняет следующие шаги:

  • Запустите MATLAB.

  • Передача двойного массива в MATLAB plot функция.

  • Возврат объекта-дескриптора MATLAB в Java в качестве com.mathworks.matlab.types.HandleObject.

  • Создать com.mathworks.matlab.types.Struct с использованием имен и значений свойств.

  • Создайте график MATLAB и отобразите его для 5 секунд.

  • Пройти HandleObject и Struct в MATLAB set функция с использованием feval. Эта функция изменяет цвет и ширину линий выводимых на печать данных.

  • Экспорт графика в jpeg файл с именем myPlot и замыкает соединение двигателя.

import com.mathworks.engine.*;
import com.mathworks.matlab.types.*;

public class CreateStruct {
    public static void main(String[] args) throws Exception {
        MatlabEngine eng = MatlabEngine.startMatlab();
        double[] y = {1.0, 2.0, 3.0, 4.0, 5.0};
        HandleObject h = eng.feval("plot", y);
        eng.eval("pause(5)");
        double[] color = {1.0, 0.5, 0.7};
        Struct s = new Struct("Color", color, "LineWidth", 2);
        eng.feval("set", h, s);
        eng.eval("print('myPlot', '-djpeg')");
        eng.close();
    }
}

Получение структуры из MATLAB

MATLAB axes функция создает оси для графика и возвращает ссылку на объект дескриптора. MATLAB get функция при вызове с одним выходом возвращает MATLAB struct со свойствами графического объекта.

Этот пример кода:

  • Создает графический объект MATLAB и возвращает дескриптор объекта в виде HandleObject.

  • Создает структуру MATLAB, содержащую свойства и значения графического объекта, и возвращает ее в виде Struct.

  • Получение значения FontName свойство из Struct.

  • Попытки изменить значение FontName ключ, который бросает UnsupportedOperationException потому что Struct является неизменяемым.

import com.mathworks.engine.*;
import com.mathworks.matlab.types.*;

public class GetStruct {
    public static void main(String[] args) throws Exception {
        MatlabEngine eng = MatlabEngine.startMatlab();
        HandleObject h = eng.feval("axes");
        Struct s = eng.feval("get", h);
        Object fontName = s.get("FontName");
        System.out.println("The font name is " + fontName.toString());
        try {
            s.put("FontName", "Times");
        }catch(UnsupportedOperationException e){
            e.printStackTrace();
        }
        eng.close();
    }
}

Связанные темы