Reference: Spline

Model ElementReference_Splineは、2つまたは3つの独立変数を使用してスプラインを定義します。

説明

スプラインデータは次の2つの方法で指定できます:1)Spline_Readユーザー定義サブルーチンを記述して、ファイルからデータを読み取る。2)XML入力ファイルに直接データポイントを組み込む。最初のアプローチは、データポイントの数が非常に多いか、データがバイナリファイルに格納される場合に推奨されます。2番目のアプローチは、小規模から中規模のサイズの曲線(1000ポイント未満)に推奨されます。

スプラインにはMotionSolveで多様な用途があります。その一部を以下にリストします。

  • 力:これらは力の非線形特性を定義するために使用されます。スプラインは、スプリング力対変形の特性、または減衰力対変形速度の特性を表します。このデータは、実験的に頻繁に測定されます。
  • モーション:これらは、変位対時間、速度対時間、加速度対時間のデータを定義するために使用されます。力の場合と同様、このデータは、実験的に頻繁に測定されます。
  • ソルバー変数、微分方程式:スプラインは、解析的に表すのが困難な関係を定義するために使用できます。

Reference_Splineデータの補間は、AKIMA(AKISPL)またはCUBIC(CUBSPL)補間方法を使用して行うことができます。これらの関数は、MotionSolve式言語でサポートされています。AKIMAとCUBICはどちらも、3次多項式を使用して補間を行いますが、さまざまな重要な点で異なります。

AKIMAフィッティングアルゴリズムは、局所的な手法を使用してスプライン係数を計算します。マトリックスが反転することはありません。このため、参照スプラインに多くのデータポイントがある場合には、これが推奨されます。この方法の主な欠点は、特にデータポイントの間隔が均等でない場合、滑らかでない導関数が存在することです。そのため、AKIMA手法は、モーションデータの補間には決して使用しないでください。

CUBICフィッティングアルゴリズムは、自然なスプラインを使用してはるかに滑らかなフィットを保証します。そのため、生成されるスプラインの導関数の計算は、はるかに適切なものになります。ただし、データ内の尖った角のモデル化は得意ではありません。

2つの独立変数によるスプライン(3Dスプライン)では、2番目の独立変数に沿った補間は、最初の独立変数に沿った補間の選択に関係なく、常に線形です。

フォーマット

  
<Reference_Spline
     id                  = "integer"     
   [ label               = "string" ]
   [ linear_extrap       = { "TRUE" | "FALSE" } ]
  {       
     usrsub_dll_name     = "valid_path_name"       
     usrsub_fnc_name     = "custom_fnc_name" >
   |       
     script_name         = valid_path_name
     interpreter         = "PYTHON" | "MATLAB"
     usrsub_fnc_name     = "custom_fnc_name" >

     file_name           = "valid_file_name"     
   [ block_name          = "valid_block_name" ]     
 
   | num_x               = "integer"      
   [ num_z               = "integer" ] >
    < !-- X      Y for Z1      Y for Z2      Y for ZNUM_Z -->
       x1         y1,1     y1,2     ...        y1,NUM_Z
       x2         y2,1     y2,2     ...        y2,NUM_Z
       ...
       XNUM_X     yNUM_X,1  yNUM_X,2  ...        yNUM_X,NUM_Z
 
    
  } 
    <!-- Z values -->
      Z1   Z2  …   ZNUM_Z
</Reference_Spline>

属性

id
要素識別番号(整数 > 0)。これは、すべてのReference_Spline要素の中で一意の番号です。
label
Reference_Spline要素の名前。
linear_extrap

独立座標が指定されたデータの範囲を越えた場合にMotionSolveがどのように処理するかを指定する論理フラグ。

TRUEの値は、MotionSolveが線形補間を使用してスプライン値を推定することを示します。

FALSEの値は、MotionSolveが外挿せずにエラーを返す必要があることを示します。

num_x
スプライン内のXポイントの数を指定します。このオプションは、データがXMLファイルに直接組み込まれている場合にのみ使用します。
num_z
スプライン内のZポイントの数を指定します。このオプションは、データがXMLファイルに直接組み込まれている場合にのみ使用します。このパラメータは3Dスプラインのみで必要となります。
usrsub_dll_name
ユーザーサブルーチンSpline_Readを含むDLLまたは共有ライブラリのパスと名前を指定します。データを読み取った後、Spline_Readは、Put_Splineを呼び出してデータをMotionSolveに転送します。MotionSolveはこの情報を使用して、実行時にDLL内のユーザーサブルーチンSpline_Readを読み込みます。データが外部ファイルに含まれている場合にのみ使用します。
usrsub_fnc_name
ユーザーサブルーチンSpline_Readの代替名を指定します。
script_name
usrsub_fnc_nameで指定されたルーチンを含むユーザー作成スクリプトのパスと名前を指定します。
interpreter
ユーザースクリプトが記述されたインタープリタ型言語を指定します。有効な選択肢は、MATLABまたはPYTHONです。
file_name
スプラインデータを含むファイルのパスと名前を指定します。データが外部ファイルに含まれている場合にのみ使用します。
block_name
スプラインデータを含むブロック名を指定します。1つのファイルに複数のデータのブロックを含めることができます。このパラメータは省略可能です。データが外部ファイルに含まれている場合にのみ使用します。

次の例は、モーション定義に使用される、実験的に測定されたステアリングホイール角対時間プロファイルを示します。データは直接XML入力ファイルに組み込まれます。横軸(x値)はシミュレーション時間を表し、縦軸(y値)はステアリングホイール角を表します。

<Reference_Spline
   id            = "301001"
   num_x         = "11">
     0.00E+00   1.09E+00
     1.00E-01   6.88E+00
     2.00E-01   2.52E+00
     3.00E-01   3.02E+00
     4.00E-01   3.30E+00
     5.00E-01   3.23E+00
     6.00E-01  -8.91E-02
     7.00E-01  -4.20E+00
     8.00E-01  -3.00E+00
     9.00E-01   2.05E+00
     1.00E+00   0.04E+00
</ Reference_Spline>


図 1.

2番目の例は、前の例の代替実装を示します。主な違いは、データが外部ファイル内にカプセル化されている点です。データの読み取りには、ユーザー定義のサブルーチンSpline_Readが使用されています。Spline_ReadPut_Splineを呼び出して、MotionSolveデータベースにスプラインデータを入力します。

/staff/gates/curveData/wheel.soは、スプラインデータを読み取るユーザー定義のSpline_Readを含むDLLです。データを読み取ったら、ソルバーユーティリティ関数Put_Splineを呼び出し、参照スプラインデータをソルバーメモリに入れます。

/staff/gates/curveData/springs/wheel_1.datにはスプラインデータが含まれます。このファイルには複数のデータのブロックが含まれます。注目するデータは、wheel_angleと呼ばれるブロックに格納されています。

<Reference_Spline     
   id                  = "301001"
   usrsub_dll_name     = "/staff/gates/curveData/wheel.so"
   file_name           = "/staff/gates/curveData/springs/wheel_1.dat"
   block_name          = "wheel_angle">
</ Reference_Spline>

次の例は、3Dスプラインを示します。

<Reference_Spline
   id                 = "301001"
   num_x              = "5"
   num_z              = "3">
   <!--    X            Y for Z1      Y for Z2      Y for Z3 -->        
     0.0000000E+00   0.0000000E+00  0.0000000E+00  0.0000000E+00
     2.5000000E-01   5.0000000E-01  7.0000000E-01  9.0000000E-01
     5.0000000E-01   0.0000000E+00  0.0000000E+00  0.0000000E+00
     7.5000000E-01   5.0000000E-01  7.0000000E-01  9.0000000E-01
     1.0000000E+00   0.0000000E+00  0.0000000E+00  0.0000000E+00
   <!-- Z values -->
        0.0 1.0 20.0
</Reference_Spline>

コメント

  1. MotionSolve内の多くのアルゴリズムは非線形で、反復解析方式がよく使用されます。反復計算中にスプラインの独立座標が指定されたデータの範囲を越えることは可能です。特に収束解が指定の範囲内にあれば、このことは重大な問題ではありません。このようにするには、linear_extra = TRUEを使用します。
  2. 収束した解の値がスプラインデータの外挿を必要とする場合には、その解析の質についての配慮が必要です。これは、Reference_Spline内に必要なデータ範囲がなかったことを意味します。このような場合には、Reference_Splineにデータポイントを追加するのが最適です。
  3. スプラインのフィッティングアルゴリズムは、一般に、スプラインデータ内の尖った角の処理があまり得意ではありません。補間データ内で現実的でない形状を最小限に抑えるためには、スプラインがその勾配を急激に変化させることがわかっている場所で、ポイントの密度を高くします。
  4. 実験データの格納には、多くの場合Reference_Splinesが使用されます。実験データはノイズが多く、高周波成分が多くなる傾向があります。このようなデータは、MotionSolve(またはその他任意のソルバー)のパフォーマンスを大幅に低下させる可能性があります。ローパスフィルタやその他の信号処理メカニズムを使用し、測定した信号からノイズを除去してから、これをMotionSolveに入力します。ローパスフィルタは、Math Referenceにあります。
  5. Reference_SplineReference_ParamCurveと同じではありません。前者は、基盤となるパラメータ化を前提とせず、単にデータをフィットさせます。後者は、3D空間内のパラメータ化された曲線形状の定義に使用されます。