10 Stimmen

Der beste Weg zu einer Matlab <-> C++ Schnittstelle

Ich habe ein C++-Windows-Programm, und ich möchte einige Daten aus dieser C++-Anwendung in ein bestehendes Matlab-Programm konvertieren und visualisieren.

Derzeit schreibe ich die Daten aus der C++-Anwendung in Dateien. Gleichzeitig liest die Matlab-Anwendung die Dateien und verarbeitet die Daten. (Polling) Es funktioniert grundsätzlich, aber ich habe Probleme mit der Leistung, wenn die Datenlast zu hoch wird.

Was ist die beste Lösung, um Daten zwischen diesen Programmen zu übertragen? Ich denke dabei an eine Art Nachrichtenwarteschlange oder Socket-Schnittstelle.

5voto

Chris Punkte 1522

Verwenden Sie die Matlab-API um Ihre Daten von C++ an Matlab zu senden und dann einen Plot-Befehl darauf auszuführen. Gehen Sie grob wie folgt vor - es gibt keine Fehlerprüfungen, aber die Grundzüge sind vorhanden:

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

Denken Sie daran, dass Matlab in der Spalten-Darstellung arbeitet, während C++ die Zeilen-Darstellung verwendet.

0voto

Jappi Bains Punkte 11

Der beste Weg ist die Verwendung der MATLAB-Engine aus C/C++-Code heraus. Dazu müssen Sie lediglich die MATLAB-Engine aus einem C/C++-Programm heraus aufrufen und können dann MATLAB-Befehle direkt aus dem C/C++-Programm heraus ausführen.

Bitte beachten Sie, dass Sie zusätzliche Bibliotheksdateien von MATLAB in das Projekt einbinden müssen, damit es auch funktioniert. Sie können sich ein funktionierendes Beispiel für dasselbe wie folgt ansehen aquí .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X