ブロックを積みながら(194) Scilab/Xcos、Xcosデモ、ローレンツ・バタフライ

Joseph Halfmoon

制御素人老人がScilab/Xcosのデモを動かして学んでます。制御のデモの筈なのですが、今回はローレンツ・バタフライです。「バタフライ効果」でお馴染みのカオスなアレです。ローレンツ方程式、ローレンツ・アトラクタなどで検索すれば大量にヒットしてくると思います。素人老人はグラフを描くときのテクにちょい感動しましたぞ。

※「ブロックを積みながら」投稿順 index はこちら

※動作確認にはWindows 11の パソコン(64bit)上にインストールしたScilabの以下バージョンを使用しています。

    Scilab 2024.0.0

ローレンツアトラクタ

忘却力の老人の朧げな記憶によれば、本サイトでもローレンツアトラクタの計算やってます。そのときの記事が以下に。

やっつけな日常(13) スマホでGo!じゃない。全てを引きこむローレンツアトラクタ

上記の過去記事では、Go言語をつかってローレンツ方程式の軌跡を描いています。

計算しやすいので、上記過去記事同様、Webなど漁ると計算例多数が見つかります。しかし、もともとは気象学のローレンツ先生が発見された方程式であるようです。どこかに気象学のお立場からローレンツ方程式について説明されている文書(日本語がよい)を調べてみたらありました。『公益社団法人 日本気象協会』様の以下のページです。吉崎先生という方が解説されています。

ローレンツ・カオスの理解の仕方

上記を読ませていただくとローレンツ先生の「単純化した設定の乾燥大気における熱対流」の研究から導きだされたみたいです。

通常は、レーリー数R、プラントル数Pなどに関係する p, r, b のような定数名で書かれる(上記のGo言語過去記事の中のコードもp, r, b式)みたいなのですが、今回のXcosデモは、pの代わりにa、rの代わりにb、bの代わりにcを使っているみたいです。そのときのローレンツ方程式が以下に。

    • \(\frac {dX} {dt} = aY – aX\)
    • \(\frac {dY} {dt} = -XZ + bX – Y\)
    • \(\frac {dZ} {dt} = XY – cZ\)
ローレンツ・バタフライのフロー

今回のデモは、以下のデモ選択画面から選択できます。selectLorenz
登場するフローが以下です。LorenzFlow

上記のフローに小さく x y z のコメントがありますが、それぞれ上記のローレンツ方程式のX、Y、Zに対応していることが分かります。明快?

なお、それぞれの積分ブロックには、以下のように初期値が設定されています。ci_initial

複数の値をベクトルで設定しているみたいです。

そこでコンテキストを確かめてみると以下のようでした。LorenzContext

x, y, zとも、4個の「近い値だけれども、微妙に異なる」値を初期値として与えて、並行に計算しているようです。「初期値の僅かな違いに鋭敏な」カオスであることを示すためのものかな。

また、表示は2次元軌跡、3次元軌跡以外に、2次元のグラフが含まれてます。その設定のところを見たら、チョイ、カッコよかったです。こんな感じ。LorenzCMSCOPE

ポートサイズを初期値ベクトルのサイズから求めているところ、そして表示色をvcolというベクトルから展開しているところなど、Scilabよく知っている人はこんな風に書くのだ、と目から鱗です。お惚け老人はひたすら定数で書いてましたもん。

さて結果です。3次元の軌跡が以下に。LorenzXYZwindow

なお、表示されているのはシミュレーションの最後の方だけです。途中、リフレッシュサイズ分だけが次々と表示されアニメーション的に変化していった末尾です。

2次元グラフが以下に。上からX、Y、Zのはず。それぞれ4色あるのは初期値が異なる軌跡です。確かに僅かな初期値の違いしかないのに、値が大きく異なった挙動であることが分かります。LorenzCMSCOPEwave

最後にXY2次元の軌跡が以下に。LorenzXYwindow

このような形からバタフライと言われるの?知らんけど。

ブロックを積みながら(193) Scilab/Xcos、Xcosデモ、倒立振り子に圧倒される へ戻る

コメントを残す

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