Вызов обратного вызова / дескриптора функции Matlab из Java - PullRequest
6 голосов
/ 17 июня 2009

Как передать дескриптор функции Matlab объекту Java и вызвать его изнутри Java (то есть я хочу, чтобы Java сообщила Matlab, когда он будет готов к вычислению). Я пытаюсь использовать класс com.mathworks.jmi.Matlab для оценки выражений Matlab в объекте Java, но я не могу понять, как 1) передать дескриптор функции обратного вызова в Java и 2) вызвать его из Java, возможно, используя класс com.mathworks.jmi.Matlab.

Спасибо, Jakob

Ответы [ 5 ]

2 голосов
/ 17 июня 2009

Хм. Похоже, JMI - это одна из тех вещей, которые могут быть изменены в будущих версиях. Я нашел эти статьи в Интернете, но не уверен, что они помогут в вашем случае.

1 голос
/ 09 июля 2011

matlabcontrol - это Java API, который позволит вам сделать это. Он может вызывать функцию MATLAB, используя feval. Он не может работать напрямую с дескриптором функции, но, как упомянул KitsuneYMG, вы можете использовать func2str для преобразования дескриптора функции в строку. Чтобы начать, вы можете взглянуть на прохождение .

1 голос
/ 30 марта 2010

Боюсь, что я не знаю, как сделать точно то, что вы просили, но есть два способа сделать что-то похожее:

1) Если вы установитеобратный вызов Java из Matlab, вы можете отправить ему дескриптор функции Matlab.Когда событие обратного вызова Java возникает, ваша функция Matlab будет вызвана.Пример этого можно найти здесь: http://UndocumentedMatlab.com/blog/uicontrol-callbacks/. Обратите внимание, что для этого не требуется JMI.

2) JMI нужна строка (имя функции или командная строка) для оценки Matlab.Если вы заранее знаете название функции, вы можете использовать ее.В противном случае вы можете подготовить функцию коммутатора Matlab (имя которой известно заранее), чтобы динамически направлять ваш обратный вызов на соответствующее действие Matlab.

Я планирую запустить статью о JMI ​​в http://UndocumentedMatlab.com веб-сайт в середине апреля, так что следите за обновлениями ...

Яир Альтман

0 голосов
/ 20 апреля 2010

попробуйте этот инструмент: http://jamal.sourceforge.net/

Он делает именно то, что вам нужно и хорошо документировано.

Основным принципом, на котором он основан, является вызов RMI к серверной части, которая выполняется внутри Matlab. Вывод возвращается в программу Java. Опять же, это зависит от JMI ...

0 голосов
/ 29 марта 2010

Чтобы передать обратный вызов в matlab, вы передаете имя функции matlab и ее аргументы в com.mathworks.jmi.Matlab.feval ("matlabControlcb", ..., 0); ... является объектом [], где [0] = команда и [1..end] = аргументы.

Смотрите также: FEVAL FUNC2STR

...