如果我正確理解你的處境,你有這樣的事情:
的文件(`時三十分 '):
function results = A(parameters)
% some code
的文件(`B.m'):
function results = B(parameters)
% some code
您想使用的功能A
內B
,你可以調用該函數從函數內部B:
function results = B(parameters)
% some code
otherResults = A(otherParameters)
如果你的情況是一樣的東西nimrodm描述了,你A.m
文件是一樣的東西:
function results = A(paramters)
% some code
function results = C(parameters)
% code of function C
end
end
function results = D(parameters)
% code of function D
end
沒有來自外部A
直接訪問C
和D
方式。如果您需要使用subfunctionD
外A
,只要含有
function results = D(parameters)
% code of function D
end
文件D.m
,最好,除去從功能A
相同的代碼。
對於nested functionC
,同樣可以在一些(但不是全部)的情況下完成,嵌套函數也可以訪問的功能A
的變量。在最新版本的MATLAB(我猜R2010b或R2011a)中,編輯器突出顯示了在一個函數和teal中的嵌套函數之間共享的變量。如果您不使用功能C
中的功能A
的變量,則只需執行與功能D
相同的功能。如果你這樣做,傳遞這些變量作爲參數和/或返回值,並調整代碼的其餘部分以反映這一點。測試您的代碼,然後執行與D
相同的操作。
最有可能的是,你將不會有案例C
,因爲這是MATLAB的高級功能。
然而還有另一種情況,如果你不使用MATLAB函數,而是MATLAB腳本在不同的文件中。你可以調用腳本(無論是從命令行和其他函數或腳本,僅僅通過它(文件)名
文件
E.m
的
內容:
文件
F.m
的
% code for script E
內容:
% some code
E;
使用該代碼,您可以從腳本F
內執行E
中的所有命令。請注意,E
和F
將共享其所有變量,因此如果您開始使用scrip由於類似於clear all; close all; clc;
,您無法將F
中的任何變量傳遞給E
(在致電E
之前,您將失去計算F
的所有結果。
在大多數情況下,最好使用函數而不是腳本,所以這也是解決這種情況的方法:將所有事情都變成具有體面參數和返回值的函數。
編輯: 當你「改變」你的問題後,這很容易。
讓我們考慮你有這個功能,我將使用不同的名字,因爲這是更直觀的理解。您在ackermann.m
文件內有ackermann
功能,您可以從腳本bigScript.m
調用該功能。
文件ackermann.m
包含Ackermann-Péter功能(作爲一個例子):
function result = ackermann(m,n)
if m == 0
result = n + 1;
elseif m > 0
if n == 0
result = ackermann(m-1,1);
elseif n > 0
result = ackermann(m-1,ackermann(m,n-1));
else
error('n has to be positive');
end
else
error('m has to be positive');
end
end
從你的大腳本中,你可以調用函數ackermann
如下(如果你想M = 1和N = 1) :
A = ackermann(1,1)
就是這麼簡單,不需要加載任何東西。但是,您需要記住讓函數在路徑中可用,最簡單的方法就是將腳本和函數文件保存在同一個目錄中。無論如何,我感覺你是一個開始的MATLAB用戶:如果你不知道一個函數是做什麼的,只需鍵入help functionname
(代替函數名當然)到命令窗口。您會注意到函數load
用於加載數據文件,而不是用於m文件(因爲路徑中的m文件是自動使用的)。
密切相關:[是否可以在MATLAB中爲每個文件定義多個函數?](http://stackoverflow.com/q/3569933/52738) – gnovice 2011-06-11 18:30:55
@gnovice - 謝謝,但不幸的是,我沒有願望尚未在文件中定義多個函數。對不起,這個問題還不夠清楚。 – wrongusername 2011-06-11 20:32:42