WOLFRAM

モデルの初期化のトラブルシューティング

予期しない初期値劣決定の初期化を削除する

以下は,モデルの初期化を行う際によく遭遇する問題をどのように解決するかについての短いデモンストレーションである.関連する概念についての背景については,モデルの初期化を参照されたい.

このチュートリアルに使用されているモデル
Initialize_s_rel | Initialize_s_rel_fixed | Initialize_mass | TwoCylinders | TwoCylindersFixed

予期しない初期値

モデルが問題なく初期化されるが,希望する初期の系状態ではないという場合がある.その場合,初期化過程のどこで,モデルの初期化が予期する経路から逸れたのかを調べる必要がある.このことを以下の簡単なバネ質量系DocumentationExamples.Tutorial.SpringInitialization.Initialize_s_relで説明する.spring.s_relを5に初期化することが目標である.

1.gif

並進運動のバネ質量系のダイアグラム.

希望する初期化を得る最初の(うまくいかない)試みでは,単にspringコンポーネントを選んで,初期値s_relに設定する.

2.gif

spring.s_relの初期値をto 5に設定する.

このモデルのシミュレーションを行うと,初期化が何の効果もないことが分かる.

3.gif

spring.s_relが0に初期化されたことをしめすシミュレーション結果.

これを修正する前に問題を真に理解するためには,方程式ブラウザを使ってspring.r_relの初期値の出所を辿ることができる.まず,エクスペリメントブラウザプロットタブでこの変数についてのコンテキストメニューを使うことができる.

4.gif

エクスペリメントブラウザプロットタブにおけるspring.s_relのコンテキストメニュー.

方程式ブラウザで'spring.s_rel' in Equation Browser を表示(初期化)を選ぶ.方程式ブラウザに以下が表示される.

5.gif

spring.s_relの初期化を示す方程式ブラウザ

spring.s_relstart属性からではなく,spring.flange_b.sに依存する方程式から初期化されたことが分かる.パラメータ fixed.s0をプロットすると,その値が0である,つまり,希望する値spring.flange_b.sは5であることを示す. spring.flange_b.sがどのように初期化されるかを知るためには,方程式を左クリックし,表示されるメニューで初期化Tabの'spring.flange_b.s'に移動を選ぶ.

6.gif

左クリックのコンテキストメニューを使って,spring.flange_b.sの初期化に進む.

すると方程式ブラウザに以下のシステムが表示される.

7.gif

spring.flange_b.sの初期化を示す方程式ブラウザ

パラメータmass.Lをプロットすると,値が0である,つまりmass.sの希望する値がis 5.であることが分かる.mass.sの左クリックメニューで,初期化Tabの'mass.s'に移動からやっと以下のシステムに行き着くことができる.

8.gif

mass.sの初期化を示す方程式ブラウザ

これで,start属性から初期化されるのは0.0の値を持つmass.sであることが分かる.他の一連の変数を通して,属性がspring.s_relの初期化を決定し,希望する値である5を上書きしていることが分かった.

方程式ブラウザで変数の初期化を辿る一般的な方法を通してこの問題を解く方法をここまで見てきたが,この特定の問題については,「ビルドログ」の通知を読み取るだけで十分であることを付け加えておく.

9.gif

劣決定の初期化についてのものも含む,「ビルドログ」の通知.

バネ質量系について限られた直観的な理解しかなくても,mass.sがその開始値がら初期化されるということは,spring.s_relについて与えられたstart属性が同時に使われることはあり得ず,無視されることを意味することが分かる.

希望の初期化が得られるようにモデルを修正する方法はいろいろある.そのうちの2つの方法がDocumentationExamples.Tutorial.SpringInitialization.Initialize_s_rel_fixedDocumentationExamples.Tutorial.SpringInitialization.Initialize_massに示されているので,これらのシミュレーションを実際に行い,方程式ブラウザを使ってどちらの方法でspring.s_relが希望する値を得られるかを見てみるとよい.

劣決定の初期化を削除する

DocumentationExamples.Tutorial.MultiBody.TwoCylindersは,非常に簡単なマルチボディモデルであるが,うまく初期化しない.

10.gif

2つの接続されたシリンダを含むモデルのダイアグラム.

「シミュレーションログ」によると,非線形方程式系に問題があることが分かる.

11.gif

初期化中に非線形系を解くことに失敗したことを示す「シミュレーションログ」.

一般には方程式ブラウザで方程式系のリンクを辿ることはよいアイデアであるが,この場合は非線形系に解が存在するかどうかすらも分かりにくい.しかし,この系の未知のものはbodyCylinder1の方向を示す単位四元数コンポーネントであることが分かる.

12.gif

失敗した非線形方程式系の 方程式ブラウザビュー.

上級のユーザは,このような非線形方程式系を方向について解くことが,2つの繋がれたシリンダについて解く場合に思った以上に複雑であることに気付かれるかもしれない.モデルのシミュレーションを実際に行い,「ビルドログ」をチェックすると,以下のような通知に気付く.

13.gif

劣決定の初期化についてのものを含む「ビルドログ」の通知.

特に,通知は劣決定の初期化についてのものであり,それがこのモデルの初期化を修正するための鍵となるものである.bodycylinder1.r_0bodycylinder2.r_0が空間内のシリンダの位置であることを理解すると,これらをstart属性から個々に初期化してから,合致する方向を求めようとしてもうまくいかないことが明らかになる.

問題を解くためには,初期化を完全に制御して,劣決定される部分がないようにする.Model Centerではこれは,例えば,DocumentationExamples.Tutorial.MultiBody.TwoCylindersFixedで行われるように,bodycylinder1について固定された位置,速度,方向,角速度すべての初期化を行うことで可能になる.

14.gif

Model Centerでbodycylinder1の初期化を編集する.

これで劣決定の初期化についての「ビルドログ」の通知はなくなったので,シミュレーションは「シミュレーションログ」で警告を発することなく成功し,方程式ブラウザで初期化問題での複雑な非線形方程式系がより簡単なものに置き換えられたことが分かる.