0

入力がスカラー値か行列かを調べるには、simulink に if/else を実装する必要があります。以下の図を参照してください。

回路図

与えられた:

  • Block(1) - スカラー "1" または行列 "[[0 15];[5 10]]" の入力です。

  • Block(2) - 入力の信号次元を返す必要があります。例: スカラーの場合は 1、行列の場合は >1

要件は次のとおりです。

  • すべてが解釈またはコンパイルされて機能する必要があります (Simulink コーダー)
  • ブロック (4) と (5) の最終出力はスカラーです。
  • 私はCMexSFunctionsについて平均的に理解しています。したがって、問題を解決するために実装する必要がある場合は問題ありません

これまでのところ、次のような問題がありました。

  • 私がやろうとしていることが実現可能であれば、私はまったくしません
  • コンパイル済みモードで動作するように Block(2) を実装する方法がわかりません
  • if/else があっても、simulink は実行前に事前チェックを実行して、すべての信号の次元が正常かどうかを確認します。このチェック中に、例: Block(5) に行列の入力があるというエラーが表示されます。

手がかりはありますか?

4

1 に答える 1

2

ブロック (2) は、Simulink ライブラリの「プローブ」ブロックを使用して実装できる最も簡単な部分です。スカラーまたは行列を想定しているため、ポート 1 の入力は可変サイズの信号でなければなりません。

ブロック 4 と 5 に Input(1) を供給していると仮定します。モデルのコンパイル時に、Simulink は入力サイズに基づいてこれらのブロックのどれが実行されるかを認識していません。したがって、Simulink は、両方のブロックがスカラーまたは行列になる可能性があると想定する必要があります。ブロック 4 と 5 は、実行時に 1 つの型に対してのみ使用される場合でも、スカラーと行列の両方に対してエラーをスローしないようにする必要があります。

これができない場合、スカラーの場合の簡単な回避策は、常に最初のサンプルを選択するブロック 5 の前にセレクターを配置することです。これにより、ブロック 5 への入力が常にスカラーであることが Simulink に通知されます。

于 2015-10-15T15:53:57.737 に答える