自动输入Matlab

时间:2011-08-11 12:18:25

标签: matlab input

我今年夏天在Matlab课程中帮助评分,其中一项任务包括构建一个简单的用户界面来绘制功能和改变它们的外观。所有输入都在命令行中完成,因此菜单类似于:

=====================
1. New function
2. Change line-width
3. Change line-style
=====================

在评分测试基本功能时,我总是开始以相同的方式进行测试:

1,2,sin(x)(在窗口2中创建sin(x)图)

1,3,exp(x)(在窗口3中创建exp(x)的图表)

2,3,2(将图3的行宽改为2)

3,2, - (将第2号地块的线型更改为虚线)

由于大多数插件遵循相同的建议菜单结构,如果有一种方法可以使用脚本自动执行这些输入而不是一遍又一遍地重复相同的数字和字母序列,那么这将使我的生活更轻松。脚本本身不必在Matlab中,虽然我猜它是实用的,因为我需要手动检查结果图(即我需要将输入输入Matlab命令行)。

基本上我希望Matlab在运行另一个Matlab脚本时读取键盘“1 [enter] 2 [enter] sin(x)[enter] ...”到命令行。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

一种可能性是创建private版本的input函数,该函数会隐藏内置函数。每次调用它时,它都会从预定的一组值中返回一个值。您可以使用global / persistent变量维护状态(计数器用于跟踪调用函数的次数)。

基本上你会创建一个method stubmock真实函数的行为。


这是一个更好地解释我的想法的例子:

/somepath/private/input.m

function ret = input(prompt, varargin)
    %# counter
    persistent count
    if isempty(count), count = 1; end

    %# hard-coded values to return
    values = {
        1 2 'sin(x)' ...
        1 3 'exp(x)' ...
        2 3 2 ...
        3 2 '--' ...
    };

    %# display the prompt message
    disp([prompt '[SIMULATED INPUT #' num2str(count) ']'])

    %# return value
    ret = values{count};

    %# increment counter
    count = count + 1;
    if count>12
        count = 1;
    end
end

/somepath/hw1.m

function hw1
    %# image this is a sample homework file, 
    %# using the standard INPUT function to ask for input from the user
    %# and do something useful with it :)

    num1 = input('enter a number: ');
    num2 = input('enter a second number: ');
    str = input('enter a string: ', 's');
    fprintf('You entered: %d %d %s\n',num1,num2,str);

    num1 = input('enter a number: ');
    num2 = input('enter a second number: ');
    str = input('enter a string: ', 's');
    fprintf('You entered: %d %d %s\n',num1,num2,str);

    num1 = input('enter a number: ');
    num2 = input('enter a second number: ');
    num3 = input('enter a third number: ');
    fprintf('You entered: %d %d %d\n',num1,num2,num3);

    num1 = input('enter a number: ');
    num2 = input('enter a second number: ');
    str = input('enter a string: ', 's');
    fprintf('You entered: %d %d %s\n',num1,num2,str);
end

这是你得到的输出:

enter a number: [SIMULATED INPUT #1]
enter a second number: [SIMULATED INPUT #2]
enter a string: [SIMULATED INPUT #3]
You entered: 1 2 sin(x)
enter a number: [SIMULATED INPUT #4]
enter a second number: [SIMULATED INPUT #5]
enter a string: [SIMULATED INPUT #6]
You entered: 1 3 exp(x)
enter a number: [SIMULATED INPUT #7]
enter a second number: [SIMULATED INPUT #8]
enter a third number: [SIMULATED INPUT #9]
You entered: 2 3 2
enter a number: [SIMULATED INPUT #10]
enter a second number: [SIMULATED INPUT #11]
enter a string: [SIMULATED INPUT #12]
You entered: 3 2 --

答案 1 :(得分:-1)

查看AutoIt并查看它是否符合您的需求:

http://www.autoitscript.com/site/autoit/

欢呼声