手習ひデジタル信号処理(199) Scilab、{Scilabデモ}、球面振り子、再び

Joseph Halfmoon

信号処理素人老人がScilabの「信号処理のデモ」からカテゴリ脱出。前回は何を今更の「単振り子」でちょっとイカした?モデリングでした。今回も過去回でやった記憶が残る「球面振り子」です。今更やるからにはSUNDIALSのソルバで解くだけでなく、2つの解法を比較しているみたい。拘束条件からのズレが白日の下に?

※「手習ひデジタル信号処理」投稿順 Indexはこちら

※Windows11上の    Scilab2024.0.0を使用させていただいております。(Scilabについては御本家 Scilab 様へ)

SUNDIALS、Spherical pendulumデモ

今回「鑑賞」してみるSucilabから、定番の「ソルバスイート」SUNDIALSの呼び出しデモは Spherical pendulum です。そのデモンストレーション選択画面が以下に。selectSphericalPendulum

そういえば、何回か前の過去回で「球面振り子」鑑賞してます。そのときはSUNDIALS使ってないやつだったケド。

手習ひデジタル信号処理(191) Scilab、{Scilabデモ}、球面振り子

忘却力の老人はすっかり忘れとります。そのときはScilab標準の

微分代数方程式(DAE)ソルバ DASSL

を使って解いたのでした。

またもや「球面振り子」なの、何か違いがあるの? ということでお惚け老人は立ち眩みがしそうでしたが、冷静な生成AIは全てお見通しです。Googleの生成AI、Gemini 2.5 Flash様がおっしゃるのには以下の通り。geminiSP_SRC1

過去回でも登場した、ラグランジュ微分方程式+拘束条件の方程式のDAEモデルに対して、ODEモデル(ただし拘束条件を反映させるための「プロジェクション」あり)を比較しようとするみたい。geminiSP_SRC2

そして、拘束条件については以下の記述もあり。geminiSP_SRC3

シミュレーション結果

さて、以下のデモ・スクリプト

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です。目にも止まらぬ速さでシミュレーションが進み、グラフが描かれていきます。

その冒頭で止めたところが以下に。青枠、緑枠はお惚け老人が「拘束条件からのズレ」のところに勝手に書き加えたものSphericalPendulum0

もうちょと走らせたところ。SphericalPendulum1

シミュレーションの末尾。SphericalPendulum

こうしてみていくと、DAEソルバの方は、徐々に拘束条件からのズレが大きくなっているのに対して、「プロジェクション」しているODEソルバの方は、毎回、小出しに拘束条件からのズレを補正して「それらしく戻し」ているのでズレが見えないみたいです。あたりまえか。どうなんだ?

手習ひデジタル信号処理(198) Scilab、{Scilabデモ}、なにをいまさら単振り子 へ戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です