2

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

如何根据 that 的值在操作之间切换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我想避免这种情况,而是根据值触发它们。

4

1 回答 1

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
于 2013-02-15T00:49:25.260 回答