大規模なデータ処理を必要とする Matlab プロジェクトに取り組んでおり、コードの一部を Matlab 関数よりも高速に実行する必要があります。この目的のために、ワークスペースから変数を渡す他のスクリプト内で .exe を呼び出す必要があります。それをどのように解決できるかを理解するために、小さな追加プログラムを作成しました。
次のコードがあります
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)
実行可能にするために展開ツールを使用しました。!test.exe 5 3 を使用して matlab で test.exe を実行すると動作します。2 つの変数 a=5 と b=3 を作成して !test.exe ab を試しても動作しません。
変数を .txt または .dat ファイルに渡し、プログラムを閉じて再度開くことができることは知っていますが (使用する必要がある変数は動的です)、mfile を実行するよりも効率的だとは思いませんワークスペースから変数をロードしています。
varargin、narginなどの使用についても検索しましたが、これらのコマンドにはCのargc []、argv []が使用されていません。そのようなもので問題を解決できます。
次に、mex ファイルを検索して、次のコードを記述します。
#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");
}
}
(変数 a=5 b=3 も渡しました)しかし、変数 a がワークスペースにないというプロンプトが表示されたため、何も機能しませんでした。
.txt または .dat ファイルを開かずに、matlab ワークスペースから変数を読み取る .exe プログラムを作成する方法について、コード ソリューションを提供してくれる人はいますか?
私のトピックを読んでいただき、ありがとうございます。