MATLAB - 如果循环条件为真,则计数

时间:2013-03-05 05:11:27

标签: matlab loops for-loop timer count

我有一个关于在使用计时器对象时计算for循环中条件为真的次数的问题。所以我设置我的计时器对象每隔60秒调用一次这个函数,如果X和Z等于1,它将在数据库中检查我的状态,然后它会做一些事情。问题是我希望每次X和Z都等于1时计数,因为我有另一个程序每秒改变X和Z的值。如果计数等于1,2和3,它将采用不同的方式。当我运行它时,即使X和Z多次等于1,它也不会超过1。以下是我的代码

a = timer('ExecutionMode', 'fixedRate','TimerFcn', 'func(1)', 'Period', 60);
start(a);


function [x] = func(y)
count = 0;
if x == y && z == y
count = count +1;
if count == 1
    disp('1')
elseif count == 2
    disp('2')
elseif count == 3
    disp('3')  
end
else
disp('same')
end

3 个答案:

答案 0 :(得分:2)

您的主要问题是count变量具有函数局部范围,因此每次调用函数时都会创建它,并在函数结束时销毁它。你需要它在调用函数之间保持不变。一种可能性是使count变量成为全局变量:

global count;
count = 0;

a = timer('ExecutionMode', 'fixedRate','TimerFcn', 'func(1)', 'Period', 60);
start(a);

function func(y)
global count;
if x == y && z == y
    count = count + 1;
    disp(num2str(count));
else
    disp('same');
end

此代码还会通过一次调用[{1}}来替换发出各种if调用的disp结构。如果您打算打印计数,这是一种更好的方法。

答案 1 :(得分:1)

您没有关闭带有结尾的第一个if语句。因此,如果count == 1,则后面的所有内容仅在x == y&& z == y

关闭你的第一个if语句,你的代码应该有效:

if x == y && z == y
  count = count +1;
end
if count == 1
...

另请注意,在编写代码时,每次输入函数时都会将count重置为0,这意味着count = count + 1;将始终为count = 0 + 1 = 1;

答案 2 :(得分:0)

如果要计算进入函数的次数,必须使计数器变量持久化,否则在每次调用时都将其设置为零。