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

在matlab中创建不同操作之间的循环切换器?,matlab,loops,for-loop,nested-loops,Matlab,Loops,For Loop,Nested Loops,我有三个循环操作O1 O2 O3,每个循环操作都带有IF语句,并且具有最大标志=[F1 F2 F3]值的操作具有更高的运行优先级 如何根据标志的值在操作之间切换?每个操作的标志值随时间而变化 为简单起见,操作1将首先运行,在其循环结束时,标志值将是最低的,因此操作2或3应该下一步运行。所以对于这个例子,在t=0:F1=5,F2=3和F3=1时。 我试图实现的过于简化的伪代码: while 1 find largest flag value using [v index]=max(flag)

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

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

为简单起见,操作1将首先运行,在其循环结束时,标志值将是最低的,因此操作2或3应该下一步运行。所以对于这个例子,在t=0:F1=5,F2=3和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中首先编写的操作)。我想避免这种情况,而是根据
标志
值触发它们。

如果您的操作是函数(从问题中有点难以区分),那么创建一个函数句柄的单元格数组,其中
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

不,它们不是函数。这些操作都组合在一个matlab文件中,IF语句当前会按照键入的顺序触发每个操作。所以我想改变这一点,让它们根据
标志的值触发。只是让你的操作正常吗?使用上述样式可以使解决方案具有可扩展性,因此当操作数扩展时,您不需要一堆需要维护的
if
。嗯,那么切换器将是几行基本上使用函数句柄单元数组的matlab代码?虽然每个操作都有自己的matlab文件,但基本上正确吗?这是一种方法,是的。或者您可以使用一个
switch
语句,该语句可能比
if
语句的堆栈稍微整洁一点。我还必须将函数句柄与switch语句一起使用吗?我曾想过使用switch语句,但我不知道每个操作如何连续循环并由
标志
值触发。没有“答案”,因为这不是内置的标准技术。。。因此,无论你如何处理它,它都会得到处理。明确你的目标,要么你会想出一个解决方案,要么至少它会帮助那些试图帮助你的人。我猜@learnvst的答案相当准确。