2015-06-11 49 views
2

我正在寫的MATLAB代碼將與我無法修改的其他MATLAB函數一起使用。其中一些現有功能從命令行輸入。有沒有一種方法可以在MATLAB中編寫測試腳本來調用這些函數,然後按照用戶的意願提供輸入? 即。如果我有一個功能:有沒有可能寫一個MATLAB腳本,可以給一個函數的命令行輸入?

function y = f(x) 
z = input('Enter number: '); 
y = x + z; 
end 

有沒有辦法讓腳本調用f並提供z?

回答

1

如果您正在尋找一個非優雅的解決方案。

如果您正在尋找潛在危險的解決方案。如下寫一個名爲「輸入」功能:

那麼你可以試試這個

function a=input(str) 
% THIS IS THE DUMMY VERSION OF THE 
% MATLAB BUILT-IN FUNCTION "input" 
global dummy_input 

disp('WARNING!!!') 
disp('MATLAB "input" built-in function overridded') 

disp(['Setting dummy_inpt']) 
a=dummy_input; 
end 

聲明一個global變量或者在你用它來測試功能的腳本,並在你的「虛擬」 input功能。

指定所需的值到global variable如下:

global dummy_input 

x=3; 

dummy_input=123; 

y=my_func(x) 

dummy_input=42.13; 

y=my_func(x) 

如果my_func是你的問題發送功能,您將獲得:

WARNING!!! 
MATLAB "input" built-in function overridded 
Setting dummy_inpt 

y = 

    126 

WARNING!!! 
MATLAB "input" built-in function overridded 
Setting dummy_inpt 

y = 

    45.1300 

我添加的打印「虛擬」輸入函數中的警告只能作爲餘數...

您不需要修改要測試的函數,何時調用input從用戶那裏得到一個號碼,它會調用你的「虛擬」輸入。

「虛擬」輸入功能

這個版本的「僞」輸入功能的版本2允許autonatically處理輸入值的多個請求。

它要求用戶事先知道「原始」input函數被調用的次數。

不需要額外的global counter

它是足夠的變化在腳本中global parameter的定義,聲明它作爲含有該組輸入的用戶想要指定的數組:

global input_list 
input_list=[27 30  5 31 21] 

在「虛擬」 input功能,該陣列的第一個元素被分配給輸出變量,那麼它被刪除:

a=input_list(1); 
input_list(1)=[]; 

的函數的更新的版本的代碼如下:

function a=input(str) 
% THIS IS THE DUMMY VERSION OF THE 
% MATLAB BUILT-IN FUNCTION "input" 
global input_list 

disp('WARNING!!!') 
disp('MATLAB "input" built-in function overridded') 

disp(' ') 
disp(' ') 
disp(' ') 
if(isempty(input_list)) 
    error('Error in DUMMY input: no more input data') 
else 
    disp(['Setting dummy_input ' num2str(input_list(1))]) 
    a=input_list(1); 
    disp(' ') 
    disp(' ') 
    disp(' ') 

    input_list(1)=[]; 
end 

end 

如果在腳本結束之前輸入數組變爲empty(通過在每次調用時刪除其元素),將生成一個error

我還添加了一些調用disp,以使命令窗口上的輸出更清晰。

此外,「虛擬」input函數在命令窗口上打印一條消息,告訴哪些輸入值已分配。

確保在年底將你的虛擬「輸入」

希望這有助於。

+0

有沒有一種簡單的方式來概括它,以便它在f有多個提示時工作,除了維護一個全局計數器呢? – mb7744

+0

我在上一個答案的最後添加了'dummy input'函數的更新版本。如果我正確理解了你的請求,它可以處理多個輸入值的分配,而不需要添加額外的'全局'變量(計數器)''。 –

+0

太好了。我最終使用了單元陣列,因爲我需要混合輸入。與一些大括號相同的解決方案。 – mb7744

相關問題