是否可以编写一个可以为函数提供命令行输入的MATLAB脚本?

时间:2015-06-11 17:07:38

标签: matlab testing input

我正在编写MATLAB代码,它将与我无法修改的其他MATLAB函数一起使用。其中一些现有函数从命令行获取输入。有没有办法在MATLAB中编写一个可以调用这些函数的测试脚本,然后按照用户的意愿提供输入? 即。如果我有一个功能:

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

有没有办法让脚本调用f并提供z?

1 个答案:

答案 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函数还在命令窗口打印一条消息,告知已分配了哪些输入值。

确保最后删除虚拟“输入”功能

希望这有帮助。