gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:11:23 24 4
gpt4 key购买 nike

我有三个循环操作 O1 O2 O3每个都有一个 如果 语句和最大的操作flag=[F1 F2 F3] value 具有更高的运行优先级。

如何根据 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 触发它们取而代之的值(value)。

最佳答案

如果您的操作是函数(从问题中有点难以判断),则创建一个函数句柄元胞数组,即 fun1是您的实际功能之一的名称。

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

然后你就可以使用从 max 返回的索引term 从数组中获取正确的函数。您可以使用以下语法将任何参数传递给函数。
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 - 在matlab中的不同操作之间创建一个循环切换器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14886611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com