Запуск функции MATLAB с Java

У меня есть файл .m в MATLAB, который я бы хотел вызвать из Java, и получить решение как строку или что-то в Java. Это звучит очень просто, но по какой-то причине я не могу заставить его работать.

Я пробовал это:

matlab -nosplash -wait -nodesktop -r  myFunction

но я не уверен, как я разбираю ответ, так как MATLAB открывает собственную командную строку (в Windows).

Я использую это, но ничего не возвращает.

Process p = Runtime.getRuntime().exec(commandToRun);
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));

также кажется, что каждый раз, когда я вызываю MATLAB, он открывает отдельное окно, которое является проблемой, потому что я хотел бы запускать это много раз.

Ответ 1

Хитрость заключается в использовании класса MatlabControl http://www.cs.virginia.edu/~whitehouse/matlab/JavaMatlab.html. Он очень прост в использовании, и вы можете делать именно то, что вы пытаетесь сделать (и многое другое).

Ответ 2

matlabcontrol основано на той же базовой библиотеке MATLAB, которую использует MatlabControl, упомянутой Jeff, но более актуальной, надежной и документированы. Для начала просмотрите walkthrough.

Ответ 3

JAMAL - это библиотека с открытым кодом, основанная на Java RMI (Java Remote Method Invocation API), соответствующая вашим потребностям

Ответ 4

В Matlab R2016b MathWorks добавил MATLAB Engine API для Java, который позволяет выполнять код MATLAB с Java.

Ответ 5

Существует хороший Java-COM-мост под названием JaCoB (http://sourceforge.net/projects/jacob-project/), который вы можете использовать для автоматического запуска Matlab в качестве COM -Сервер в фоновом режиме. Затем вы можете следовать инструкциям в помощи Matlab для взаимодействия с интерфейсом COM Matlab.

Хотя это очень общий интерфейс, он обеспечивает достаточную гибкость, чтобы легко выполнять несколько вызовов в Matlab, как в вашем случае.

Просто загрузите пакет JaCoB и загляните в папку docs для некоторой документации. Вы также должны включить DLL Jacob в свой путь.