2012-08-24 86 views
1

我遇到了一個問題。我必須使用MATLAB與Linux。我需要從MATLAB到Linux解析數據,反之亦然。在shell中解析變量從MATLAB到Linux,反之亦然

對於exammple

這一切都在

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 

是writtein請給我建議一個可能的方式這樣一個小例子,其餘的我將擴大它自己。

問候

+0

不是matlab具有相同的功能,你在bash中要做什麼? – chepner

+0

@chepner我正在使用一個模擬軟件來生成一些數據 - 我必須優化和處理這些數據。爲了做到這一點,我必須編寫一個shell腳本。由於shell腳本在處理實數方面存在問題,因此我認爲如果能夠將兩個軟件的POWERS結合起來會更好。這就是爲什麼我寫了,我會擴大到我的需要。我需要一個開始和一個可能的方法。 –

+1

啊哈!所以,**真正的**問題就是你如何在shell腳本中進行數學運算。您當然可以用'bash'標籤在SO上提出問題? –

回答

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 

的這個優點是隻存在一個m文件就足夠了Matlab和外殼腳本之間的嚴格分離,和。

當然,無論您選擇哪種方式 - 您爲什麼要這樣做呢? Matlab可以完成大部分bash的功能,並且也是平臺獨立的(所以如果你切換到MS Windows,它仍然可以工作)...所以你可以澄清一點嗎?

+0

我正在使用一個模擬軟件來生成一些數據 - 我必須優化和處理這些數據。該軟件在基於Linux的服務器上運行。爲了做到這一點,我必須編寫一個shell腳本。由於shell腳本在處理實數方面存在問題,因此我認爲如果能夠將兩個軟件的POWERS結合起來會更好。這就是爲什麼我寫了,我會擴大到我的需要。我需要一個開始和一個可能的方法。 –

+0

是不是可以以某種方式使用shell腳本中的MATLAB命令?我的意思是不是調用MATLAB函數而是一些命令? –

+0

@hamadkhan你如何在shell腳本中編寫工作的C++代碼?你不能!問題是:你爲什麼想要?使用正確的工具來完成這項工作。如果你確實需要在Matlab中進行高級數字操作,那麼你必須將腳本所做的所有事情都放到一個m文件中,並忘記腳本。 –