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で微分したコサイン波を得ることができました。


本記事の操作動画です。