手習ひデジタル信号処理(200) Scilab、{Scilabデモ}、スプライン振り子?

Joseph Halfmoon

信号処理素人老人がScilabの「信号処理のデモ」からカテゴリ脱出。前回は「再びの球面振り子」でした。今回も「振り子」のデモは続きます。今回のは支点がスプライン曲線上を移動できる「振り子」です。スプライン曲線はユーザーがマウスでクリクリやって決められます。計算自体は前々回と同じ関数つかって解いているみたい。

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

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

SUNDIALS、User Spline Sliging Pendulumデモ

SUNDIALSは、泣く子も黙る?ローレンス・リバモア研発の「ソルバスイート」です。このライブラリをScilabから呼び出すデモが シミュレーション>Sundialsカテゴリにつまってます。今回「鑑賞」させていただくのは、以下のデモ選択ウインドウから選択できる User spline sliding pendulum です。UserSplineSligingPendulum

上記から選択後、現れる初期画面が以下に。spline_pendulum0

プロットウインドウの下の方に、

Drag and drop curve and pendulum points then click Start button

と書かれているとおり、マウス使って初期状態を設定できます。

上の青の直線上の四角いポイントをマウス操作することで直線は移動させた四角のポイントを通過するスプライン曲線に変化します。この曲線上を振り子の支点が移動できるようになります。「束縛」条件っすね。

また赤の直線で表されている先端の丸のポイントが振り子の重りの初期位置みたいです。これもマウス操作できるので、高い位置におけば勢いよく振れるし、低い位置にすると揺れが小さくなります。

なお、このモデルにはRayleigh関数(散逸関数)も(比較的小さな係数値ではあるが)含まれているので、振動は徐々に小さくなります。

マウスで初期状態を設定した後、Startボタンを押すと、設定したスプライン曲線の上で支点が移動する振り子の振動が始まります。

テキトーにスプライン曲線を設定した後のStart時点の様子が以下に。

spline_pendulum1スクリプト内での設定が上限20秒となっているので、20秒振動した後、シミュレーションが停止したところが以下に。spline_pendulum2

なお、上記の状態で、Startボタンを押すと、上記の状態を初期値として再度シミュレーションされるので「次の20秒」を観察することがあります。エネルギーの散逸があるので、徐々に振動は衰えますが、かなり長いこと揺れてる様子を観察できます。

デモ本体は、以下のスクリプトファイルです。

demo_spline_pendulum.sce

実体のほとんどは、上記の画面でマウス操作を許すためのGUI処理です。シミュレーションの計算そのものは、第198回でも使用されている以下のファイル内のDAEソルバで解かれているみたいです。

lagrangian_DAE.sce

第198回でも散逸の計算もコードには含まれていたのだけれど、初期係数が0に設定されていたので「無限に」振動つづける設定でした。手動で書き替えてやると減衰しました。一方、今回は、最初から係数はノン・ゼロなので、ほっておいても減衰するようです。まあ、DAE(微分代数方程式)の計算自体は同じだあ、っと。GUIの処理、カッケーけどメンドイなあ。。。

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

コメントを残す

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