Wie Sie ausgeführt werden .exe-Programme übergeben Variablen aus dem Matlab-workspace?
Ich 'm arbeiten auf ein Matlab-Projekt, das erfordert, dass große Daten-Verarbeitung und einige Teile des Codes müssen, um schneller zu laufen als Matlab-Funktionen. Für diesen Zweck muss ich anrufen ein .exe in andere Scripte übergeben Variablen aus dem workspace. Um zu verstehen, wie ich das lösen könnte, dass ein kleines Zusatz-Programm.
Ich habe den folgenden code
function test(a,b)
if ischar(a)
a2=str2num(a);
else
a2=a;
end
if ischar(b)
b2=str2num(b);
else
b2=b;
end
res=a2+b2;
disp(res)
und ich das deployment-tool, um es ausführbar machen.
Wenn ich laufen die test.exe durch matlab mit !test.exe 5 3 es funktioniert,
Wenn ich zwei Variablen a=5 und b=3 und versuchen Sie es !test.exe a b es funktioniert nicht.
Weiß ich, dass ich übergeben Sie die Variablen ein .txt-oder .dat-Datei und dann schließen und neu eröffnet
wieder durch das Programm (die Variablen, die ich verwenden müssen, die dynamisch sind), aber ich glaube nicht, dass seine effizienter als mfile laden von Variablen aus workspace.
Ich suchte auch über die Verwendung varargin,nargin etc. aber diese Befehle nicht über die Verwendung von argc[], argv[] C. so Etwas wie, dass könnte es lösen meiner Probleme.
Dann Suche ich für mex-Dateien und schreiben Sie den folgenden code:
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
mxArray *mexGetVariable(const char *workspace, const char *varname);
const mxArray *mex_a;
const mxArray *mex_b;
//http://www.mathworks.com/help/techdoc/apiref/mexgetvariable.html
if ((mex_a = mexGetVariable("a", "global"))==NULL)
{
mexErrMsgTxt("Variable 'a' not in workspace.");
}
else if ((mex_b = mexGetVariable("b", "global"))==NULL)
{
mexErrMsgTxt("Variable 'b' not in workspace.");
}
else
{
mexEvalString("!test.exe mex_a mex_b");
}
}
(Habe ich auch übergeben Sie die variable a=5 b=3), Aber nichts funktionierte, wie ich eine Eingabeaufforderung zu sagen
Die Variable a nicht in den Arbeitsbereich.
Kann jemand mir eine code-Lösung, wie kann ich das machen .exe-Programme das Lesen der Variablen aus dem matlab-workspace ohne Sie zu öffnen .txt-oder .dat-Dateien?
Vielen Dank im Voraus für Ihre Freundlichkeit bei der Lektüre mein Thema.
InformationsquelleAutor George | 2012-06-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Befehl
!test.exe a b
versucht zu startentest.exe
auf den Saiten'a'
und'b'
, nicht die Werte dera
undb
. Dies wäre der Fall, ob Sie hatte es von der Befehlszeile oder über eine mex-Datei.Wenn Sie so etwas wie:
Dass es nennen würde, in der Art, wie ich denke, Sie sind Absicht.
Ist Ihre echte .exe (nicht die test.exe) erstellt von MATLAB mit MATLAB-Compiler? Wenn ja, die oben noch nicht erreichen, was du bist suchen für. Ausführbare Dateien, erstellt mit MATLAB Compiler laufen in der selben Geschwindigkeit wie live MATLAB.
Danke für deine Antwort. Sie WIRKLICH hat mir geholfen. Also, was ist der Schnellste Weg, um mein Programm? parallelisieren mein m-file mit parallel toolbox oder schreiben Sie das Programm außerhalb von matlab in c-code? MEX sind schneller als .exe, wenn wir alles aus matlab?
Es hängt ganz von dem bestimmten code, den Sie möchten, zu beschleunigen. Ohne zu wissen mehr darüber, ich würde anfangen, indem der Fokus auf die Optimierung der MATLAB-code, mit Techniken wie preallocation und der profiler. Dann, wenn Teile des Codes sind leicht parallelisierbare, mithilfe der Parallel Computing Toolbox können Sie einige sehr einfache Geschwindigkeit Gewinne. Schließlich können Sie nehmen Engpass Punkte identifiziert, durch die profiler und recode in ein C-mex-Datei.
InformationsquelleAutor Sam Roberts