aw02m / autonomous_bif

Bifurcation analysis tool for autonomous dynamical systems
0 stars 0 forks source link

Bifurcation analysis tool for autonomous dynamical systems. Ask me if you need the English usage.

分岐理論の詳細についてはaw02m/bifurcation_theoryを参照してください.(加筆中)

autonomous_bif

自律系(微分方程式)の分岐解析ツールです. 本プログラムは3部に分かれています.

  1. cgen (c++ code generator; 系の方程式とその偏微分を出力)
  2. pp (Phase portrait; 相平面描画ツール)
  3. bif (Bifurcation; 分岐集合の計算)

cgen概要

Python上でSympyを用いて自動的に系のC++コードを出力します.

動作環境

cgenの設定

関数"func"内に系の方程式を記述します.状態変数は"x[i]", パラメタは"p[i]"です. 系の次元とパラメタの数を指定する"xdim, pdim"も指定してください.
"python cgen.py"を実行すると自動的にppとbifに系とその偏微分が出力されます.

pp概要

2次元相平面(phase-portrait)を描画します.

動作環境

pp入力ファイル概要

使用法

cd pp
mkdir build
cd build
cmake ../cmake-tree
make
./main ../input/<your_input_file>.json

環境によっては build/main_autogen/include/ui_mainwindow.h のヘッダでコンパイルエラーが発生します. その時は手動でそのファイルの18行目くらいを次のようにいじってください

#include "../../qcustomplot.h"
を
#include "qcustomplot.h"
に変更

bif概要

bifはppで取得した固定点/平衡点情報をもとに,パラメタを変化させながらNewton法にて精度の良い固定点計算および分岐計算を行います.

動作環境

bif入力ファイル概要

使用法

cd bif
mkdir build
cd build
cmake ../cmake-tree
make
./main ../input/<your_input_file>.json

Change Log

Aug/31/2021 : QT5-QCustomPlotを用いたppツールを追加しました.(pp_qt)
Nov/4/2021 : 一時的にPD計算しか利用できません.変分方程式の計算を高速化しました(1000倍くらい).
Nov/4/2021 : PD,NSに対応,fixが統合されました.
Nov/16/2021 : NSをBialternate積方式に変更,Gに対応,積分器にboostを選択可能.
Jun/22/2022 : Qmakeを廃止し,Cmakeに完全に移行.現在LinuxとMacOSでの動作を確認しています.PythonバージョンのPPはどう頑張ってもとろこいのでリストラしました.
Jul/26/2022 : C++の関数記述を自動で行えるようにしました.cgen.pyにベクトル場を記述すればsys_func.cppは自動で生成されます.また,ppプログラムに解軌道の最後の状態を表示させる機能を追加しました.Sキーで表示されます.bifプログラムでは変分方程式の記述を変更したことにより大幅にパフォーマンスが向上しました.さらに本バージョンから二階変分の数値微分による計算に対応します.また平衡点計算が新たにbifに統合されました.(mode=4,5,6)
Jul/30/2022 : また早くなりました.3次元系の周期解の分岐が10ms〜20msほどで求まります.PPプログラムのパラメタの変化量を-/+キーで調節できるようになりました.また,ポアンカレ断面上の固定点計算が条件によってスキップされるバグを修正しました.
Jul/31/2022 : もっとはやくなりました.3次元系の周期解の分岐が1〜5msほどで求まります.変分方程式の記述を変更しました.どうでもいいですが妹が18歳になりました.かわいいでちゅね.
Dec/12/2022 : 自律系の接線分岐の目的関数が不完全だった問題を解消しました.(自律系だと周期解計算ではμ=1が確定しているので,接線分岐条件が常に満たされてしまっていた.)具体的にはdchi/dmuを目的関数に用いる川上形式に変更.また,平衡点の接線分岐を実装するのを忘れていたので追加しました.
Dec/15/2022 : ppにjson出力機能を追加.また,ppとbifともに,jsonを出力した際にjsonオブジェクトが勝手にアルファベット順にソートされてしまう問題を修正しました.
Feb/24/2023 : ppの積分器で用いているイベント検出アルゴリズムをscipy/solve_ivpの方法に変更しました.また,ポアンカレ断面を柔軟に配置できるようにjsonインターフェースを変更しました.あたらしいjson入力に対応した例は,bif/input/ExtendedBVP/NS.jsonを確認してください.