2013-02-28 35 views
0

我有我的代碼的matlab文件,我想在這個文件中定義一個新的函數,我不想爲這個函數添加新文件,因爲這個文件是我的代碼, Webots中的控制代理和控制器文件必須是單個文件。 函數必須先定義文件中的第一個代碼或最後一個代碼或...?在matlab中定義函數而不使用新函數

+0

該文件是腳本還是函數? – 2013-02-28 08:30:47

+1

見http://www.mathworks.de/de/help/matlab/matlab_prog/local-functions.html – 2013-02-28 08:31:05

+0

這個文件是一個腳本文件 – 2013-02-28 08:31:29

回答

2

如果你的功能是非常小的,你可以將其定義爲anonymous function

+0

或內聯函數也可能工作... – bla 2013-02-28 08:41:25

+0

不,我的功能不是很小 – 2013-02-28 08:41:36

-2

我想使用eval是你的情況的解決方案

把你的功能在一個字符串變量。

% script 
subfun = 'do something with input parameter param, and assign to output variable' 
param = xxx; 
output = 0; 
eval(subfun); 
% Then access the output here 

下面是一個例子

% Script 
subfun = 'output=param^2;output=output^2;' 
param = 5; 
output = 0; 
eval(subfun); 
disp(output); 
+0

我不要以爲這是一個非常好的建議,根據問題和評論來看,這是一個初學Matlab的人。'eval'有它的地方,但那個地方不是試圖編寫包含本地函數定義的腳本文件。按照@ H.Muster的評論的主旨,OP會更好。 – 2013-02-28 10:05:46

+0

@HighPerformanceMark如果所需的功能非常大,並且需要多行,即使使用匿名函數,也需要eval的幫助。據我所知,matlab沒有lambda。甚至內聯函數只是eval的一個包裝。 – 2013-02-28 10:54:55

3

不能定義腳本中的一個函數,但你可以定義一個函數m文件中的局部功能......因此,假設你的腳本看起來是這樣的:

blah blah   %// This is your main code 

%// Here you want to add another function, for example: 
function y = foo(x) 
    y = x + 2; 

如果你試圖做的是如上圖所示,你會得到以下錯誤:

Function definitions are not permitted at the prompt or in scripts.

但是,如果簡單地改變你的主要腳本轉換功能,你就可以定義局部函數:

function mainfunc %// Main function name to your choosing 
blah blah   %// This is your main code 

function y = foo(x) 
    y = x + 2; 

因爲你mainfunc不接受也不返回任何參數,可以像普通的腳本一樣運行它。另外請注意,建議主函數和m文件共享相同的名稱。

編輯:Shai在評論中提到,儘管這裏有一個警告:雖然腳本可以訪問主工作區中的變量,但函數有自己的範圍。記住這一點。儘管如此,仍然可以使用命令loadsaveevalinassignin命令來操作工作空間變量。

+0

另一個評論 - 如果您將腳本封裝在一個函數中,那麼當您運行腳本時,腳本中創建的結果變量將不會保留在工作環境中。而且,如果腳本使用已經在工作區中定義的變量,那麼在函數運行時這些變量將不可用。 **腳本和函數使用不同的作用域**。 – Shai 2013-02-28 14:35:22

+0

@Shai好點,但這可以通過使用'save'和'load'來回避。有點麻煩,但它的工作原理。 – 2013-02-28 14:43:58

+0

當你在它的時候,它可以使用'evalin'和'assignin'來回避...更少的磁盤訪問...... – Shai 2013-02-28 14:47:11