繁体   English   中英

如何从TCL脚本运行.m文件(Mac)

[英]How to run a .m file from a tcl script (mac)

有谁知道我如何在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 = [abc]; E = [cba]'; 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

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

但是:有没有办法将我的变量直接放入tcl变量? 那列表呢? 如果我已经在Matlab中计算出向量,该如何直接将向量保存到列表中?

我没有TCL经验。 但我敢肯定,您可以使用参数调用命令。 基本上,您有两种选择:

  1. 从命令行调用Matlab( 请参见 ,尤其是matlab -r "statement" ),并将声明放入调用中。

  2. 您可以将Matlab脚本设置为服务器,并使其在某个端口上侦听,在该端口上您将命令发送至该端口并接收答案。 在Windows上,您还可以使用COM连接到Matlab并发送命令-但我找不到Mac / Linux上是否提供类似功能。

另外,您可以考虑使用mbuild编译脚本。 这样不仅可以分发它,而且我认为,如果您编译为Java,可能更容易集成到TCL中。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM