
信号処理素人老人がScilabの「信号処理のデモ」からカテゴリ脱出。前回は何を今更の「単振り子」でちょっとイカした?モデリングでした。今回も過去回でやった記憶が残る「球面振り子」です。今更やるからにはSUNDIALSのソルバで解くだけでなく、2つの解法を比較しているみたい。拘束条件からのズレが白日の下に?
※「手習ひデジタル信号処理」投稿順 Indexはこちら
※Windows11上の Scilab2024.0.0を使用させていただいております。(Scilabについては御本家 Scilab 様へ)
SUNDIALS、Spherical pendulumデモ
今回「鑑賞」してみるSucilabから、定番の「ソルバスイート」SUNDIALSの呼び出しデモは Spherical pendulum です。そのデモンストレーション選択画面が以下に。
そういえば、何回か前の過去回で「球面振り子」鑑賞してます。そのときはSUNDIALS使ってないやつだったケド。
手習ひデジタル信号処理(191) Scilab、{Scilabデモ}、球面振り子
忘却力の老人はすっかり忘れとります。そのときはScilab標準の
微分代数方程式(DAE)ソルバ DASSL
を使って解いたのでした。
またもや「球面振り子」なの、何か違いがあるの? ということでお惚け老人は立ち眩みがしそうでしたが、冷静な生成AIは全てお見通しです。Googleの生成AI、Gemini 2.5 Flash様がおっしゃるのには以下の通り。
過去回でも登場した、ラグランジュ微分方程式+拘束条件の方程式のDAEモデルに対して、ODEモデル(ただし拘束条件を反映させるための「プロジェクション」あり)を比較しようとするみたい。
シミュレーション結果
さて、以下のデモ・スクリプト
pend3d1.dem.sce
では、2つの解法のため、2つのSUNDIALSのソルバが使われています。
-
- index 1、DAE model では ida ソルバ
idaソルバの解説ページが以下に。
SUNDIALS differential-algebraic equation solver
-
- ode model with constraintでは、cvodeソルバ
cvodeソルバの解説ページが以下に。
SUNDIALS ordinary differential equation solver
シミュレーションを開始すると、流石SUNDIALSです。目にも止まらぬ速さでシミュレーションが進み、グラフが描かれていきます。
その冒頭で止めたところが以下に。青枠、緑枠はお惚け老人が「拘束条件からのズレ」のところに勝手に書き加えたもの
こうしてみていくと、DAEソルバの方は、徐々に拘束条件からのズレが大きくなっているのに対して、「プロジェクション」しているODEソルバの方は、毎回、小出しに拘束条件からのズレを補正して「それらしく戻し」ているのでズレが見えないみたいです。あたりまえか。どうなんだ?