2011-06-28 1155 views
10

Tengo un programa Windows C++ y quiero convertir y visualizar algunos datos de esta aplicación C++ en un programa Matlab existente.La mejor manera de obtener una Matlab <-> interfaz C++

Actualmente estoy escribiendo los datos de la aplicación C++ en los archivos. Al mismo tiempo, la aplicación Matlab lee los archivos y procesa los datos. (sondeo) Básicamente funciona, pero estoy corriendo en problemas de rendimiento cuando la carga de datos llega a ser alta.

¿Cuál es la mejor solución para transferir datos entre estos programas? Estoy pensando en un tipo de cola de mensajes o interfaz de socket.

+0

Quizás este enlace pueda ayudar? [Utilizando Matlab como una biblioteca de trazado para C++?] (Http://www.mathworks.de/matlabcentral/newsreader/view_thread/81552) y esto: [Llamando a MATLAB Engine desde C/C++ y Fortran Programs] (http: // www.mathworks.com/help/techdoc/matlab_external/f38569.html) Y sobre la programación del socket: [¿programación de socket en MATLAB?] (http://stackoverflow.com/questions/3164348/socket-programming-in-matlab) Hay también hay archivos en el intercambio de archivos de Matlab que podrían ayudarlo: [TCP/IP Socket Communications en MATLAB] (http://www.mathworks.com/matlabcentral/fileexchange/21131) Aunque creo que –

Respuesta

5

Use the Matlab API para enviar sus datos de C++ a Matlab, luego ejecute un comando de trazado en él. Aproximadamente , haga lo siguiente - no hay verificación de error, pero la esencia está ahí:

#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')"); 

Sólo recuerde, Matlab trabaja en la columna principal, mientras que C++ es importante fila.

+0

¡Esta es la respuesta! –

0

La mejor manera es usar el motor MATLAB desde el código C/C++. Todo lo que tiene que hacer es invocar el motor de MATLAB desde el programa C/C++ y luego puede ejecutar fácilmente los comandos de MATLAB directamente desde el programa C/C++.

Tenga cuidado de que tendrá que incluir archivos de biblioteca adicionales de MATLAB en el proyecto, para que el mismo funcione. Puede echar un vistazo a un ejemplo de trabajo para el mismo que se muestra here.

Cuestiones relacionadas