MotionSolve内で微分・積分を行う方法
MotionSolve内で微分・積分を行う方法を紹介します。伝達関数要素のControl_SISOと微分方程式のControl_Diffを使う方法があります。
本記事で使用したサンプルモデルはこちらです。
問題設定
サイン波を積分、微分する手順を紹介します。
元波形のサイン波をSolver Variablesで作成しました。
Expressionで
`sin(2*pi*time)`
としています。振幅1、周波数1Hzのサイン波です。
旧GUIの場合はこちらから作成します。
Control_SISO
ラプラス変換表現の伝達関数を定義する要素です。1/sで積分、sで微分となります。
新GUIの場合の作成アイコンはこちらです。
旧GUIの場合の作成アイコンはこちらです。
積分
積分の場合は1/sです。分子:Numeratorsが1で、分母:Denominatorsがsとなるよう係数を入れてください。
伝達関数への入力はサイン波を定義したSolver Variablesを.VARVALで参照します。
その他ボディの変位、速度、加速度、ジョイントの反力など様々な値を参照できます。
`{sv_original.VARVAL}`
微分
微分の場合はsです。分子:Numeratorsがsで、分母:Denominatorsが1となるよう係数を入れてください。
一般に微分作用は数値的に不安定です。使用にはご注意ください。分子の次数<分母の次数が推奨されます。
出力
.OUTPUTでcontrol_SISOの出力値を参照できます。
`{siso_int.OUTPUT}` `{siso_diff.OUTPUT}`
結果、元波形のサイン波に対し、control_SISOの1/sで積分したコサイン波、sで微分したコサイン波が得られることが確認できました。
Control_Diff
微分方程式を定義する要素です。Explicit(ydot = ##)とImplicit(F = 0)の二通りの定義が可能です。これを用いることで、積分、微分が可能です。
新GUIのアイコンはこちらです。
旧GUIのアイコンはこちらです。
積分
Explicit(デフォルト)表記を用いるのが簡単です。
微分方程式の右辺に対し、サイン波を定義したSolver Variablesを.VARVALで参照します。
`{sv_original.VARVAL}`
DIF1で右辺の生値 、DIFで右辺の積分量を取得できます。
DIF1で元のサイン波、DIFで積分したコサイン波を得ることができました。
微分
Implicit表記を用います。
Implicitでは左辺=0の微分方程式となります。左辺に対し、積分量DIFとサイン波を定義したSolver Variablesを含む以下の式を入力します。
この式は積分した量-元のサイン波=0という式です。
すなわち積分量がサイン波であることを示しています。
`DIF({diff_diff.id})-{sv_original.VARVAL}`
DIFで等式の通り元の値を取得できます。DIF1で元の値の積分前の値である微分値を取得できます。
DIFで元のサイン波、DIF1で微分したコサイン波を得ることができました。
本記事の操作動画です。