1

我遇到了一个问题。我必须将 MATLAB 与 linux 一起使用。我需要将数据从 MATLAB 解析到 Linux,反之亦然。

例如

这一切都写在

basic.sh

this basic.sh has to be opened in MATLAB

 s=3     # is defined is MATLAB
##########################


for (( p=1 ; p<5; p++ ))     # from here starts the loop in Linux
do                                # is a command from Linux
echo "$p"                         # is a command from Linux
add= $p+s                         # should calulate in linux , is a command from Linux
add=add/5                         # should do in MATLAB 
done     

#########################
 add                              # should OUTPUT the value of add as there is no semicolumn in MATLAB 

请为这样一个小例子建议我一种可能的方法,其余的我将自己扩展它。

最好的祝福

4

1 回答 1

2

好吧,您可以从终端调用 Matlab,然后运行一个命令:

$ matlab -nodesktop -nojvm -nosplash -r <YOUR_COMMAND>

其中<YOUR_COMMAND>可以是一个 m 脚本/函数。它的输出可以重定向到 shellscripts,

$ matlab -nodesktop -nojvm -nosplash -r <YOUR_COMMAND> | ./basic.sh

(您的脚本应该能够处理管道),或者整个命令可以嵌入到 shell 脚本中,

#!/bin/bash

s=$(matlab -nodesktop -nojvm -nosplash -r <FUNCTION_GENERATING_S>)

<code generating $add>

result=$(matlab -nodesktop -nojvm -nosplash -r <SOME_FUNCTION($add)>)

当然,您也可以使用文件作为内存。Matlab部分:

s=3;      

fid = fopen('TMP.txt','w');
fprintf(fid, s);
fclose(fid);

!./basic.sh

fid = fopen('TMP.txt','r');
add = fscanf(fid, '%f');
fclose(fid);

外壳脚本:

#!/bin/bash

s=$(cat TMP.txt)
for (( p=1; p<5; p++ ))     
do                            
    echo "$p" 
    add=$(($p+$s))
    add=add/5                      
done

echo $add > TMP.txt

这样做的好处是 Matlab 和 shell 脚本之间有严格的分离,只有一个 m 文件就足够了。

当然,无论您选择哪种方式——您为什么首先要这样做?Matlab 可以完成 bash 的大部分功能,并且与平台无关(所以如果你切换到 MS Windows,它仍然可以工作)......所以你能澄清一下吗?

于 2012-08-24T15:28:54.220 回答