Лучший способ получить интерфейс Matlab ↔ С++

У меня есть программа С++ Windows, и я хочу преобразовать и визуализировать некоторые данные из этого приложения С++ в существующей программе Matlab.

В настоящее время я пишу данные из приложения С++ в файлы. В то же время приложение Matlab считывает файлы и обрабатывает данные. (опрос) Это в основном работает, но я столкнулся с проблемами производительности, когда загрузка данных достигает максимума.

Какое наилучшее решение для передачи данных между этими программами? Я думаю о виде очереди сообщений или сокетов.

Ответ 1

Используйте API Matlab для отправки ваших данных из С++ в Matlab, а затем выполните команду plot на нем. Грубо сделайте следующее: ошибок нет, но существует суть:

#include <engine.h>
//open the engine
Engine *m_engine;
m_engine = engOpen("\0");

//put our data
//pretend this is a 2 column, n row matrix, so we can do a 2D plot
mxArray* mx = mxCreateDoubleMatrix(mat->n_rows, mat->n_cols, mxREAL);
memcpy(mxGetPr(mx),some_data,data->n_elem*sizeof(double));
put("data",mx);
mxDestroyArray(mx);

//plot
engEvalString(m_engine, "plot(data(:,1),data(:,2),'-o')");

Просто помните, что Matlab работает в основном столбце, а С++ - это строка.

Ответ 2

Лучший способ - использовать MATLAB-движок из кода C/С++. Все, что вам нужно сделать, это вызвать MATLAB-движок из программы C/С++, а затем вы можете легко выполнять команды MATLAB непосредственно из программы C/С++.

Пожалуйста, следите за тем, чтобы вам пришлось включить в проект дополнительные файлы библиотеки MATLAB, чтобы они работали. Вы можете взглянуть на рабочий пример так же, как показано здесь.