メインコンテンツ

if

コンポーネント ファイルで条件付き方程式、代入、注釈、および条件セクションを指定する

親の節: component | equations | intermediates

構文

if Predicate1 
   Branch1
elseif Predicate2
   Branch2
else
   Branch3
end

説明

Simscape™ 言語では、さまざまなコンテキストで if ステートメントを使用できます。たとえば、if ステートメントを使用して以下を行うことができます。

  • 条件付き方程式を指定する

  • 中間項を宣言する際に条件付き代入を行う

  • コンポーネント ファイルで条件セクションを使用してコンポーネント バリアントを定義する

  • 注釈を使用してコンポーネント メンバーの条件付き表示を定義する

コンテキストに応じて、ルールや制限が異なる場合があります。

条件付き方程式

条件付き方程式を指定するには、equations セクション内で if ステートメントを使用します。if ステートメントは if キーワードで始まり、end キーワードで終わります。

すべての ifelse が必要です。elseif 分岐はオプションです。

if 分岐と elseif 分岐は、述語式で始まります。述語が true の場合、その分岐がアクティブになります。すべての述語が false の場合、else 分岐がアクティブになります。

各分岐の本文には、1 つ以上の方程式を含めることができます。等式の総数とその次元および順序は、if-elseif-else ステートメントのすべての分岐で同じでなければなりません。ただし、assert 式については、分岐の式のカウントに含まれないため、このルールは適用されません。

条件セクション

条件セクションは、if 句によって保護された最上位セクションです。条件セクションは、宣言セクションや equations セクションなど、コンポーネント ファイルの他の最上位セクションと並列して配置されます。

条件セクションは if キーワードで始まり、end キーワードで終わります。オプションの elseif および else 分岐を含めることができます。条件セクションの各分岐の本文には、宣言ブロック、方程式、構造セクションなどを含めることができます。

if 分岐と elseif 分岐は、述語式で始まります。述語が true の場合、その分岐がアクティブになります。すべての述語が false の場合、else 分岐があればその分岐がアクティブになります。コンパイル済みモデルには、アクティブな分岐の要素 (宣言、方程式など) のみが含まれます。

equations セクション内の if ステートメントとは異なり、条件セクションの異なる分岐では、異なる変数や異なる数の方程式などを含めることができます。

すべて展開する

xy が 1 対 1 の関係の変数として宣言されたコンポーネントについて、次の区分方程式を指定します。

y={xfor 1<= x<=1x2otherwise 

この方程式は、Simscape 言語で記述すると次のようになります。

equations
  if x >= -1 && x <= 1
    y == x;
  else
    y == x^2;
  end
end

この方程式を Simscape 言語で記述するもう 1 つの方法は次のとおりです。

equations
  y == if x>=-1 && x<=1, x else x^2 end
end

この例では、制御パラメーターの値に基づいて、適用できないパラメーターをブロック ダイアログ ボックスで非表示にします。

component MyPipe
  parameters
    circular  = true;             % Circular pipe?
    d_in      = { 0.01, 'm' };    % Pipe internal diameter
    area      = { 1e-4, 'm^2' };  % Noncircular pipe cross-sectional area
    D_h       = { 1.12e-2, 'm' }; % Noncircular pipe hydraulic diameter
  end
  if circular 
  % Hide inapplicable parameters
    annotations
       [area, D_h] : ExternalAccess=none;
    end
    equations
       % First set of equations, for circular pipe 
    end
  else
  % Hide inapplicable parameter
    annotations
       d_in : ExternalAccess=none;
    end
    equations
       % Second set of equations, for noncircular pipe 
    end
  end
  ... % Other parameters, variables, equations
end

この例では、2 つの抵抗を含むコンポーネントを示します。制御パラメーターの値に応じて、抵抗を直列または並列のいずれかで接続できます。

component TwoResistors
  nodes
     p = foundation.electrical.electrical; % +:left
     n = foundation.electrical.electrical; % -:right
  end
  parameters
    p1 = {1, 'Ohm'};   % Resistor 1
    p2 = {1, 'Ohm'};   % Resistor 2
    ct = 0;            % Connection type (0 - series, 1 - parallel)
  end
  components(ExternalAccess=observe)
    r1 = foundation.electrical.elements.resistor(R=p1);
    r2 = foundation.electrical.elements.resistor(R=p2);
  end
  if ct == 0      % linear connection
    connections
      connect(p, r1.p);
      connect(r1.n, r2.p);
      connect(r2.n, n);
    end
  else          % parallel connection
    connections
      connect(r1.p, r2.p, p);
      connect(r1.n, r2.n, n);
    end
  end
end

バージョン履歴

R2008b で導入