我有三个循环操作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
值触发它们。
答案 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