我正在寫的MATLAB代碼將與我無法修改的其他MATLAB函數一起使用。其中一些現有功能從命令行輸入。有沒有一種方法可以在MATLAB中編寫測試腳本來調用這些函數,然後按照用戶的意願提供輸入? 即。如果我有一個功能:有沒有可能寫一個MATLAB腳本,可以給一個函數的命令行輸入?
function y = f(x)
z = input('Enter number: ');
y = x + z;
end
有沒有辦法讓腳本調用f並提供z?
我正在寫的MATLAB代碼將與我無法修改的其他MATLAB函數一起使用。其中一些現有功能從命令行輸入。有沒有一種方法可以在MATLAB中編寫測試腳本來調用這些函數,然後按照用戶的意願提供輸入? 即。如果我有一個功能:有沒有可能寫一個MATLAB腳本,可以給一個函數的命令行輸入?
function y = f(x)
z = input('Enter number: ');
y = x + z;
end
有沒有辦法讓腳本調用f並提供z?
如果您正在尋找一個非優雅的解決方案。
如果您正在尋找潛在危險的解決方案。如下寫一個名爲「輸入」功能:
那麼你可以試試這個
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
函數在命令窗口上打印一條消息,告訴哪些輸入值已分配。
確保在年底將你的虛擬「輸入」
希望這有助於。
有沒有一種簡單的方式來概括它,以便它在f有多個提示時工作,除了維護一個全局計數器呢? – mb7744
我在上一個答案的最後添加了'dummy input'函數的更新版本。如果我正確理解了你的請求,它可以處理多個輸入值的分配,而不需要添加額外的'全局'變量(計數器)''。 –
太好了。我最終使用了單元陣列,因爲我需要混合輸入。與一些大括號相同的解決方案。 – mb7744