
信号処理素人老人がScilabの「信号処理のデモ」脱出。長らく続いたSUNDIALSのソルバによるシミュレーションの鑑賞でしたが今回で〆であります。今回は放物線を描くボールです。自由な運動に見えるので単なるODEかと思いきや、そうは問屋が卸しませぬ。地面に激突して跳ね返ります。そのためODEではなくDAEソルバね。
※「手習ひデジタル信号処理」投稿順 Indexはこちら
※Windows11上の Scilab2024.0.0を使用させていただいております。(Scilabについては御本家 Scilab 様へ)
Springboardデモ
今回のデモのタイトルはSpringboardです。そのものズバリの意味で、体操競技で使われる踏切版の意味だと思います。バネでモノを跳ね上げる動きね。今回のデモに登場する地面に持たせている特性が「バネ」的な特性なのだと思います。
今回のデモは以下のデモ選択ウインドウから選択できる
SUNDIALS>Springboard
デモのプログラムは、以下のファイルです。
springboard.dem.sce
上記デモでは、泣く子も黙るローレンスリバモア研ご謹製のSUNDIALSのソルバを使って微分代数方程式を解いています。まあ、単純な放物線運動であればODEソルバで良いのでしょうが、今回目玉は地面での反発なので、そこにDAEソルバ御登場の意味があります。過去回では、デモの本体プログラムからはソルバを直接呼び出さず、lagrangian_DAE.sceファイル内の関数を介して呼び出してました。しかし、今回はidaソルバをモロ直接呼び出してます。DAE(微分代数方程式)ソルバっす。
SUNDIALS differential-algebraic equation solver
デモの動作を素人老人が拙く説明すると以下のようかと。
-
- 横方向X軸と、縦方向Y軸からなる2次元のシミュレーション
- 重力加速度 g が作用している空間。物体はY軸下方向に「落ちる」
- 左端にある斜面(曲線)をボールが転がり落ち、斜面の先端に設けられた「ジャンプ台」によって斜め上に放たれる
- ボールは放物線を描いて飛行
- Y軸下側には平らな地面あり。落ちてきたボールが地面に接触すると跳ね返り、再び放物線を描いて飛ぶ
- なお、地面との接触により変化する乗数は、λ。 空中では0、地面からの反力は g * λで表される
シミュレーション結果
SUNDIALSの御利益あらたか、計算速いです。Scilab上でも実時間?でアニメーション表示が行われます。その一瞬を撮ったところが以下に。
赤字、赤矢印はお惚け老人が書き加えた説明です。3秒分のシミュレーションですが、あっという間でボールは右端に達します。ボールの反発の感じがなんともいえず自然。流石だ。