Main Content

シンボリック式からの Simscape 方程式の生成

Simscape™ ソフトウェアは、機械的部品、油圧部品、空気圧部品、伝熱部品、電機部品など、マルチドメインの物理システムのモデル化とシミュレーションのためのツールによって Simulink® 製品ラインの機能を拡張します。数学的操作を表したり信号を操作したりする他の Simulink ブロックと異なり、Simscape ブロックは物理的な部品や関係自体を直接表現します。Simscape ブロックを使用すると、物理的なシステムを組み立てるときと同様に、システムのモデルを作成できます。Simscape ソフトウェアの詳細は、Simscapeを参照してください。

Simscape モデリング環境は、カスタム コンポーネントを作成することで拡張できます。コンポーネントを定義する際、コンポーネント ファイルの [equation] セクションを使用して、コンポーネントの変数、パラメーター、入力、出力、時間、およびこれらの各エンティティの時間微分の数学的関係を設定します。Symbolic Math Toolbox™ および Simscape ソフトウェアを使うと、シンボリック計算を実行でき、その計算結果を [equation] セクションで使用できます。関数 simscapeEquation は、シンボリック計算の結果を Simscape 言語の方程式に変換します。

代数方程式および微分方程式の変換

次の常微分方程式の解から Simscape の方程式を生成することを考えます。最初のステップとして、関数 dsolve を使って方程式を解きます。

syms a y(t)
Dy = diff(y);
s = dsolve(diff(y, 2) == -a^2*y, y(0) == 1, Dy(pi/a) == 0);
s = simplify(s)

解は以下のようになります。

s =
cos(a*t)

次に、関数 simscapeEquation を使って、Simscape 言語で解を書き換えます。

simscapeEquation(s)

simscapeEquation は、次のコードを生成します。

ans =
    's == cos(a*time);'

変数 time は、t についての微分を除く、変数 t のすべてのインスタンスに取って代わります。生成された方程式を使用するには、方程式をコピーし、それを Simscape コンポーネント ファイルの [equation] セクションに貼り付けます。自動生成された変数 ans とその後の等号はコピーしてはなりません。

simscapeEquation は、変数 t についての任意の微分を、Simscape の表記、X.der に変換します。ここで、X は時間依存変数です。たとえば、次の微分方程式を Simscape 方程式に変換するとします。また、ここで、構文 simscapeEquation(LHS, RHS) を使って方程式の左辺と右辺を明示的に指定します。

syms a x(t)
simscapeEquation(diff(x), -a^2*x)
ans =
    'x.der == -a^2*x;'

また、simscapeEquation は、区分的式を Simscape 言語に変換します。たとえば、次のフーリエ変換の結果は区分的関数です。

syms v u x
assume(x, 'real')
f = exp(-x^2*abs(v))*sin(v)/v;
s = fourier(f, v, u)
s =
piecewise(x ~= 0, atan((u + 1)/x^2) - atan((u - 1)/x^2))

この区分的なシンボリック方程式から、simscapeEquation は、有効なコードを Simscape コンポーネント ファイルの [equation] セクションに生成します。

simscapeEquation(s)
ans =
    'if (x ~= 0.0)
         s == -atan(1.0/x^2*(u-1.0))+atan(1.0/x^2*(u+1.0));
       else
         s == NaN;
       end'

x が実数であるという仮定を、syms を使用して再作成することで消去します。

syms x

制限

Simscape コンポーネント ファイルの [equation] セクションでサポートされる関数の数には、制限があります。詳細とサポートされている関数の一覧については、Simscape のequations (Simscape)を参照してください。Simscape でサポートされない関数がシンボリック式に含まれる場合、simscapeEquation はシンボリック式を Simscape 方程式として表現できず、警告を表示します。変換結果を必ず検証してください。無限大を含む式は、変換が無効になる傾向があります。