Ответ 1
Хитрость заключается в использовании класса MatlabControl http://www.cs.virginia.edu/~whitehouse/matlab/JavaMatlab.html. Он очень прост в использовании, и вы можете делать именно то, что вы пытаетесь сделать (и многое другое).
У меня есть файл .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, он открывает отдельное окно, которое является проблемой, потому что я хотел бы запускать это много раз.
Хитрость заключается в использовании класса MatlabControl http://www.cs.virginia.edu/~whitehouse/matlab/JavaMatlab.html. Он очень прост в использовании, и вы можете делать именно то, что вы пытаетесь сделать (и многое другое).
matlabcontrol основано на той же базовой библиотеке MATLAB, которую использует MatlabControl, упомянутой Jeff, но более актуальной, надежной и документированы. Для начала просмотрите walkthrough.
JAMAL - это библиотека с открытым кодом, основанная на Java RMI (Java Remote Method Invocation API), соответствующая вашим потребностям
В Matlab R2016b MathWorks добавил MATLAB Engine API для Java, который позволяет выполнять код MATLAB с Java.
Существует хороший Java-COM-мост под названием JaCoB (http://sourceforge.net/projects/jacob-project/), который вы можете использовать для автоматического запуска Matlab в качестве COM -Сервер в фоновом режиме. Затем вы можете следовать инструкциям в помощи Matlab для взаимодействия с интерфейсом COM Matlab.
Хотя это очень общий интерфейс, он обеспечивает достаточную гибкость, чтобы легко выполнять несколько вызовов в Matlab, как в вашем случае.
Просто загрузите пакет JaCoB и загляните в папку docs для некоторой документации. Вы также должны включить DLL Jacob в свой путь.