我在 matlab 中有一个书面代码和一个程序,但我想在 simulink 中做同样的思考。我陷入了程序的 if-then 部分,无法弄清楚。
我尝试使用“If” block ,但后来我不知道如何说“then alfa=0”。在尝试研究之后,我看到了许多不同的方法来执行条件语句,现在我很困惑。
if(vb-y(2))*y(3)<0
alfa=0
end
if y(3)<zba && (vb-y(2))*y(3)>=0
alfa=0
end
if zba<y(3) && y(3)<zmax && (vb-y(2))*y(3)>=0
alfa=0.5*(sin(pi*(y(3)-(zmax+zba)/2)/(zmax-zba))+1)
end
if zmax<y(3) && (vb-y(2))*y(3)>=0
alfa=1
end
我基本上需要用 simulink 制作这个。如果有人可以为我开始或解释执行此操作的正确方法,我将非常感激。
最佳答案
我相信这可以通过以下方式完成:选择 if-block
来实现您的条件,并选择 then
和 else
>-block,您选择一个 if-action-block
。 if block 决定在每个时间步将评估这两个 if-action block 中的哪一个,并且以下 merge-block
将两个单独的输出集成为一个组合信号(您的中的 alfa
情况)再次。该图显示了代码的第一个 if-then
(假设 else alfa=1
)。如果没有 else,则可以在 block 属性中禁用 else-output )。
由于 if-block
支持 elseif 表达式作为逗号分隔列表,因此我建议您将其用于第二个、第三个和第四个 if,这意味着您很可能需要额外的 if-action block ,并且合并 block 的更多输入。另外,对于 elseif 表达式,您需要将 &&
更改为 &
,这应该没问题。 a && b
仅在 a 为 true 时才计算 b,a & b
始终计算两者。
关于matlab - 如何在 simulink 中创建 if-then 逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57637318/