我遇到了一个问题。我必须在linux上使用MATLAB。 我需要将数据从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
请建议我这样一个小例子的可能方法,其余的我会自己扩展它。
最好的问候
答案 0 :(得分: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);
Shell脚本:
#!/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,它仍然有效)......那么你能澄清一下吗?