ringoさん
VIEW
二重振り子をシミュレートした動画が話題「ある時突然分岐する」
Haskellで二重振り子のシミュレーションを書いた。実はこの振り子50本あって初期値を1兆分の1ぐらいずらしてあるので途中からめちゃくちゃ分岐する t.co/3dh4Metcpj
Haskellで二重振り子のシミュレーションを書いた。実はこの振り子50本あって初期値を1兆分の1ぐらいずらしてあるので途中からめちゃくちゃ分岐する
— lotz (@lotz84_) 2017年5月22日
先日のカオス振り子動画を見て極端な場合を試してみたくなったので、3重振り子で高精度物理演算してみた。初期の振り子の角度を10の100乗(グーゴル)分の1ずつだけずらしたものを100個同時に再生。完全に一致してるように見えるけど、1分20秒くらいから「それ」がやってくる。 t.co/a7E2OASIDe
先日のカオス振り子動画を見て極端な場合を試してみたくなったので、3重振り子で高精度物理演算してみた。初期の振り子の角度を10の100乗(グーゴル)分の1ずつだけずらしたものを100個同時に再生。完全に一致してるように見えるけど、1分20秒くらいから「それ」がやってくる。
— So Takamoto@MIT (@tkmtSo) 2017年5月25日
ちょっと前に流行った二重振り子、4次のルンゲクッタ法(刻み幅2^(-7))とkvライブラリの精度保証付きODEソルバーで解き比べてみた。赤が精度保証付き。t=8くらいから別の軌道になっていることが分かる。 t.co/XVYb53naKv
ちょっと前に流行った二重振り子、4次のルンゲクッタ法(刻み幅2^(-7))とkvライブラリの精度保証付きODEソルバーで解き比べてみた。赤が精度保証付き。t=8くらいから別の軌道になっていることが分かる。
— kashi (@mkashi) 2017年8月2日
中で何が起きてるかの図。角度のずれの時刻歴をLogスケールでプロットしたものだけど、時間とともにずれが指数関数的に爆発していってるのがわかる。見た目だとわからないけど変化は内部で着実に進行していた。 https://t.co/jDZY1ufpXa
振り子の形と計算手法を手直しして再計算。カオス的な系では先の例のように未来が"爆発"するけど、条件をうまく選べばこのように無数の現在を物理演算を行った先の未来で収束させることができる。 t.co/YxPKs1j2eo
振り子の形と計算手法を手直しして再計算。カオス的な系では先の例のように未来が"爆発"するけど、条件をうまく選べばこのように無数の現在を物理演算を行った先の未来で収束させることができる。
— So Takamoto@MIT (@tkmtSo) 2017年5月27日
@tkmtSo このカオス振り子?って最後はまた1本に見えるようになったりするんでしょうか?物理とかそういうのよくわかってないんですけどバラバラのまんま動き続けるのか気になったので…
@r18_aoi_2525 「ポアンカレの回帰定理」というものがあるので、十分長い時間が経てばまた何度でも一致する状態に戻ることがわかっています。ただそれが宇宙の年齢より短いかどうかはわかりません。
@tkmtSo 大変面白い計算ですが、桁落ちの影響などの計算過程の誤差による影響はどのくらいあるのでしょうか?
@koujiohnishi 正確に桁落ちの影響を見積もるには注意深く考察しないといけないと思うのですが、内部の数値は512bit(10進で約150桁)の精度で演算していまして、10^-100の差に対してあと50桁の余裕を持たせているので、今回の結果にはあまり影響はないのではと考えています。
@tkmtSo これ、べつに1分20秒あたりに何らかの閾値があるわけではなくて、ズレは着々と進行していて、「たまたま」1分20秒あたりから人間の目に見えるようになった、という理解でよろしいでしょうか?
@Ryotaro3110 はい。ずれの増え方はある程度決まっていますので1分20秒後にこうなることは最初から運命づけられていますが、1分20秒後に特別な何かが起きたということではないです。
@tkmtSo 気になったんですけれど
この振り子をしばらく動かしていたら
再び
全ての振り子が重なっているように見える
状態になりますか?
それとも、ずっとバラバラのままですか?
@mirage122116 「ポアンカレの回帰定理」というものがあるので、十分長い時間が経てばほとんど一致する状態にまた戻ることはわかっているのですが、それが宇宙の年齢より短いかどうかはわかりません。
@tkmtSo お返事ありがとうございます😊
そうなんですね〜
ふと、思い出したんですが、どんなに複雑でも
量子コンピューターで計算したら、回帰の周期がすぐに分かるんですよね?
@tkmtSo @gojira_ku 10の100乗分の1まで扱える精度をを持つプログラミングや環境はどのように設定しましたか?
例えばC言語の倍精度でも10の16乗分の1までしか扱えなかったと思いますが
@KU_kotanaka GNU Multiple Precision Arithmetic Library (GMP)という任意精度演算ライブラリを使っています。倍精度のようにCPUの専用回路を使うことができないので計算コストはかかりますが、特別な環境は用意しなくて大丈夫です。
@tkmtSo ネットで少し調べてみました。
どうやら、自分で小数第何位まで計算するというように設定できる便利なものみたいですね。
ありがとうございました。
@tkmtSo すみません。
「初期の振り子の角度を10の100乗(グーゴル)分の1ずつだけずらした」とありますが、この角度は「°」単位でしょうか?または一周を1としたときの比でしょうか?もしくはそれ以外の表現でしょうか?
ご教示頂けると幸いです。
@sho1_oba 単位を書くのを失念していました。単位はラジアンなので1周を約6.28としたときの値です。より直感的には「棒の長さを1としたときに先っちょを10の100乗分の1ずらした」ということになっています。
@tkmtSo ラジアンでしたか。
ご回答ありがとうございました。