我正在编写MATLAB代码,它将与我无法修改的其他MATLAB函数一起使用。其中一些现有函数从命令行获取输入。有没有办法在MATLAB中编写一个可以调用这些函数的测试脚本,然后按照用户的意愿提供输入? 即。如果我有一个功能:
function y = f(x)
z = input('Enter number: ');
y = x + z;
end
有没有办法让脚本调用f并提供z?
答案 0 :(得分:3)
如果您正在寻找一种不优雅的解决方案。
如果您正在寻找有潜在危险的解决方案。
然后你可以试试这个:编写一个名为“input”的函数,如下所示:
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版
此版本的“虚拟”输入功能允许自动处理多个输入值请求。
它要求用户事先知道调用“原始”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
如果输入数组在脚本结束之前变为error
(通过在每次调用时删除其元素),则会生成empty
。
我还添加了一些对disp
的调用,以便在命令窗口中更加“清楚”输出。
“虚拟”input
函数还在命令窗口打印一条消息,告知已分配了哪些输入值。
确保最后删除虚拟“输入”功能
希望这有帮助。