2011-06-28 26 views
10

我有一个C++ Windows程序,我想在现有的Matlab程序中转换和可视化来自此C++应用程序的一些数据。获取Matlab的最佳方法<-> C++接口

目前我正在将来自C++应用程序的数据写入文件。同时Matlab应用程序读取文件并处理数据。 (轮询)它基本上可以工作,但是当数据负载变得很高时,我会遇到性能问题。

在这些程序之间传输数据的最佳解决方案是什么?我正在考虑一种消息队列或套接字接口。

+0

也许这个链接可以帮助吗? [使用Matlab作为C++的绘图库?](http://www.mathworks.de/matlabcentral/newsreader/view_thread/81552)和这个:[从C/C++和Fortran程序调用MATLAB引擎](http:// www.mathworks.com/help/techdoc/matlab_external/f38569.html)关于套接字编程:[套接字编程在MATLAB?](http://stackoverflow.com/questions/3164348/socket-programming-in-matlab)也可以通过Matlab文件交换文件来帮助你:[MATLAB中的TCP/IP Socket通信](http://www.mathworks.com/matlabcentral/fileexchange/21131)虽然我认为 –

回答

5

Use the Matlab API将您的数据从C++发送到Matlab,然后对其执行绘图命令。 粗略,请执行下列操作 - 没有错误检查,但要点有:

#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作品在列优先,而C++是一排大。

+0

这就是答案! –

0

最好的方法是使用C/C++代码中的MATLAB引擎。你所要做的就是从C/C++程序调用MATLAB引擎,然后你可以直接从C/C++程序中直接执行MATLAB命令。

请注意,您必须将MATLAB的其他库文件包含到项目中才能使用。你可以看看here所示的相同工作示例。

相关问题