在matlab中的不同操作之间创建一个循环切换器?

时间:2013-02-15 00:35:56

标签: matlab loops for-loop nested-loops

我有三个循环操作O1 O2 O3,每个操作都带有 IF 语句,具有最大flag=[F1 F2 F3]值的操作具有更高的优先级来运行。

如何根据flag的值切换操作?每个操作的标志值随时间变化。

为简单起见,操作1将首先运行,并且在其循环结束时,标志值将是最低的,因此操作2或3应该在下一次运行。因此,对于此示例,请t=0 : F1=5 F2=3 and F3=1.

我想要实现的过度简化的伪代码:

while 1
  find largest flag value using [v index]=max(flag)
  Run operation with highest flag value
   ..loop back..
end

我不确定如何在操作之间比较flag的值,因此我希望有人能在这里阐明这个问题。

修改

目前,所有操作都写在一个matlab文件中,每个操作都用IF语句触发。这些操作一个接一个地系统运行(取决于首先在matlab中编写哪一个)。我希望避免这种情况,并根据flag值触发它们。

1 个答案:

答案 0 :(得分:3)

如果你的操作是函数(从问题中有点难以辨别),那么创建一个函数句柄的单元格数组,fun1是你实际函数之一的名称。

handles = {@fun1, @fun2, @fun3}

然后,您可以使用从max术语返回的索引从阵列中获取正确的函数。您可以使用以下语法将任何参数传递给函数。

handles{index}(args)

使用上面的样式使解决方案可扩展,因此当操作数量扩展时,您不需要一堆需要维护的if语句。如果函数非常简单,你可以随时使用lambdas(或Matlab中的匿名函数)。

但是,如果您有可能无法扩展的有限数量的简单操作,则可以选择在while循环中使用switch语句。它比一堆if语句更能传达你的意图。

while 1
  [~, index]=max(flag);
  switch index
      case 1
          operation1
          flag = [x y z]
      case 2
          operation2
          flag = [x y z]
      otherwise
          operation3
          flag = [x y z]
    end
end