1

Macのtclスクリプトからmatlab.mファイルを実行する方法を誰かが知っていますか。私はこれに関連する何かをしたい:

  1. 私の.tclスクリプトのいくつかの変数の定義:

    # run_matlab.tcl:
    set a 1;
    set b 2;
    set c 3;
    
  2. matlab test.mを開き、事前定義された変数(tclで事前定義されている)を使用していくつかの計算を実行します。例:

    % test.m
    D = [a b c];
    E = [c b a]';
    F = D*E
    
  3. tclに戻り、F(matlabで計算)に基づいて新しい変数を設定し、Fを使用してさらに計算を実行します。例:

    # run_matlab.tcl:
    set m $F;
    set n [expr 3*$m];
    puts $n
    

私は絶対的な初心者であり、この問題を処理する方法がわかりません。誰か助けてもらえますか?

最初の解決策

私は何かをしましたが、これに100%満足しているわけではありません。私の解決策は次のようになります。

    # test.tcl
    # parameter definition
    set a 7;
    set b 5;

    # calculation of 'e' in matlab
    exec /Applications/MATLAB_R2012a.app/bin/matlab -nosplash -nodesktop -r test_matlab($a,$b);

    # input calculated variables
    # c = a+b = 2
    # d = a-b = 12
    source output.tcl

    # do further calculations
    set e [expr $c+$d];
    puts $e

そして、Matlab.mファイルは次のようになります。

function test_matlab(a,b)
% calculate a and b
c = a+b;
d = a-b;
% output
fprintf(fopen(['output.tcl'],'a+'),'set c %f;\n',c);
fprintf(fopen(['output.tcl'],'a+'),'set d %f;\n',d);
% quit matlab
quit
end

したがって、誰かが、計算されたデータを「sourceoutput.tcl」でロードしていることがわかります。

しかし:私の変数を直接tcl変数に入れる方法はありますか?そして、リストはどうですか?matlabでベクトルを計算した場合、このベクトルをリストに直接保存するにはどうすればよいですか?

4

2 に答える 2

0

私はTCLの経験がありません。しかし、引数を指定してコマンドを呼び出すことができると確信しています。基本的に、次の 2 つのオプションがあります。

  1. コマンド ラインから Matlab を呼び出し (特にを参照matlab -r "statement")、宣言を呼び出しに入れます。

  2. Matlab スクリプトをサーバーとしてセットアップし、コマンドを送信して応答を受信するポートでリッスンすることができます。Windows では、COM を使用して Matlab に接続し、コマンドを送信することもできますが、Mac/Linux で同様の機能が利用できるかどうかはわかりませんでした。

さらに、スクリプトをmbuildでコンパイルすることを検討してください。配布が可能になるだけでなく、Java にコンパイルすると、TCL に統合しやすくなると思います。

于 2012-11-21T12:56:54.360 に答える
0

matlab に 2 つの値を単純に出力させることができます (別々の行に、またはスペースで区切って 1 行に)。次に、Tcl で:

set output [exec matlab ...]
lassign [split $output] c d
# do stuff with $c and $d
于 2012-11-21T14:52:57.270 に答える