如何从tcl脚本(mac)运行.m文件

时间:2012-11-21 09:49:15

标签: macos matlab tcl

有人知道我怎么能在我的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
    
  4. 我是一个绝对的新手,并不知道如何处理这个问题。任何人都可以帮助我吗?

    第一个解决方案

    我已经做了一些事情,但我并不是百分之百满意。我的解决方案如下所示:

        # 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
    

    所以有人可以看到,我要用'source output.tcl'加载我的计算数据。

    但是:有没有办法让我的变量直接进入tcl变量?关于列表的最新消息?如果我在matlab中计算了一个向量,我该如何直接将这个向量保存到列表中?

2 个答案:

答案 0 :(得分:0)

我对TCL没有经验。但我相信你可以通过参数来调用命令。基本上你有两个选择:

  1. 从命令行(see,特别是matlab -r "statement")调用Matlab,并将您的声明放入调用中。

  2. 您可以将Matlab脚本设置为服务器,让它在您发送命令和接收答案的某个端口上进行侦听。在Windows上,您还可以使用COM连接到Matlab并发送命令 - 但我无法找到Mac / Linux上是否有类似的功能。

  3. 此外,您可以考虑使用mbuild编译脚本。它不仅可以分发它 - 但我认为如果你编译成java,它可能更容易集成到TCL中。

答案 1 :(得分:0)

你可以让matlab简单地打印两个值(在单独的行上或在一行上以空格分隔)。然后,在Tcl:

set output [exec matlab ...]
lassign [split $output] c d
# do stuff with $c and $d