0

我需要在 simulink 中实现 if/else 来确定输入是标量值还是矩阵。请看,下图:

原理图

鉴于:

  • Block(1) - 输入可以是标量“1”或矩阵“[[0 15];[5 10]]”

  • Block(2) - 必须返回输入的信号维度。例如:标量为 1,矩阵为 >1

要求是:

  • 一切都必须解释或编译(Simulink 编码器)
  • 块 (4) 和 (5) 的最终输出是标量
  • 我对 CMexSFunctions 的理解一般。因此,如果我需要实施一个来解决问题,那没关系

到目前为止,我遇到了以下问题:

  • 如果我打算做的事情是可行的,我一点也不
  • 我不知道如何实现 Block(2) 以在编译模式下工作
  • 即使存在 if/else,simulink 在运行前也会执行预检查,以验证所有信号维度是否正常。在此检查期间,它给出了一个错误说 ex: that Block(5) has a input of matrix

任何线索?

4

1 回答 1

2

Block(2) 是最简单的部分,可以使用 Simulink 库中的“Probe”块来实现。您在端口 1 的输入必须是可变大小的信号,因为您需要一个标量或矩阵。

我假设您将 Input(1) 提供给块 4 和 5。在模型编译时,Simulink 不知道根据输入大小将运行这些块中的哪一个。因此 Simulink 需要假设两个模块都可能是标量或矩阵。您需要使块 4 和 5 不会对标量和矩阵都抛出错误,即使它们在运行时仅用于一种类型。

如果你不能这样做,对于标量情况,一个简单的解决方法是在块 5 之前放置一个选择器,它总是选择第一个样本。这将使 Simulink 知道模块 5 的输入始终是标量。

于 2015-10-15T15:53:57.737 回答