2011-11-30 171 views
0

對不起,這是一個基本的問題,但我找不到一個直接的答案,它似乎沒有在這裏回答過(可能因爲它是如此基礎?!)MATLAB:從另一個M文件調用M文件

我想從另一個M文件中調用M函數。我所調用的函數是一個主要函數,沒有輸入或輸出:它只是我想要在我的主M文件中多次插入的代碼行。

功能稱爲

function generateGrating 

並駐留在文件generateGrating.m。主要功能稱爲

function project 

並駐留在文件project.m中。正如你所看到的,兩者都沒有輸入或輸出。他們只是運行他們的例程。

我曾嘗試以下嘗試調用函數,沒有運氣:

generateGrating() 
generateGrating 
generateGrating.m() 
generateGrating.m 
generateGrating(); 
generateGrating; 
generateGrating.m(); 
generateGrating.m; 

任何幫助,將不勝感激!看來,答案一定是如此基本,我不能在任何地方找到它:(

+0

在調用'generateGrating'時適用於我。也許在名稱的某個地方出現拼寫錯誤或Matlab沒有找到'generateGrating.m'文件。這兩個文件都在同一個目錄中嗎? – Boris

+0

謝謝。問題實際上是第二個例程不能運行,因爲它需要第一個定義的變量。我沒有意識到函數在MATLAB中有私有變量。基於C:S的確很有意義 – CaptainProg

回答

1

我認爲你要使用腳本,而不是一個功能

腳本是一個.m文件。沒有在一開始的關鍵字功能

因此,舉例來說,我FI有兩個文件:

sub.m:

b=b+1; 

的main.m:

function main 
    b=1; 
    b 
    sub; 
    b 
    sub; 
    b 

我得到了答案:

b=1 
b=2 
b=3 

如果我改變sub.m使它成爲一個功能:

sub.m:

function sub 
    b=b+1; 

子變量b現在是從一個不同的範圍比b在main.m文件 所以我得到了答案:

b=1 
b=1 
b=1 
1

這應該只是generateGrating。文件generateGrating.mproject.m需要位於包含在Matlab路徑中的目錄中。最簡單的方法是讓它們都在同一個目錄中,並且將該目錄作爲工作目錄運行。最簡單的方法是打開project.m並按F5運行它,然後單擊「更改目錄」按鈕(如果彈出)。

注意

如果generateGrating被填充一些變量(聽起來好像這是你在做什麼),那麼就不要讓generateGrating一個function。否則,在generateGrating.m中設置的任何變量將只在該函數的範圍內。例如:

% generateGrating.m 
function generateGrating() 
x = 42; 

% project.m 
x = 1; 
generateGrating 
disp(x) 

將顯示X = 1,因爲x是隻有42的功能generateGrating的範圍之內。但改變generateGrating.m

% generateGrating.m 
x = 42; 

並再次運行project將顯示X = 42;

相關問題