1

問題が発生しました。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 

そのような小さな例の可能な方法を私に提案してください。残りは自分で拡張します。

よろしくお願いします

4

1 に答える 1

2

ターミナルからMatlabを呼び出して、次の1つのコマンドを実行できます。

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

<YOUR_COMMAND>m-script/関数にすることができます。この出力は、シェルスクリプトにリダイレクトできます。

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

(スクリプトはパイプを処理できる必要があります)、またはこのコマンド全体をシェルスクリプトに埋め込むことができます。

#!/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とシェルスクリプトが厳密に分離されており、1つのmファイルだけで十分なことです。

もちろん、どちらの方法を選択しても、そもそもなぜこれを実行したいのでしょうか。Matlabは、bashの機能のほとんどを実行でき、プラットフォームにも依存しません(したがって、MS Windowsに切り替えても、すべてが機能します)...これを少し明確にできますか?

于 2012-08-24T15:28:54.220 に答える