ラズベリー・パイを使って、Mathematica で遊ぼう!



  • @ソム さん
    こちらを連想しました
    ショートバージョン
    https://www.youtube.com/watch?v=PT0ekOMvtak
    ロングバージョン
    https://www.youtube.com/watch?v=rMsLGSSiSPw
    NHKETV朝の番組0655で有名になりました(ごく一部で?(;'∀'))


  • Global Moderator

    @riffraff さん

    ちょっと似てますね。波の発生装置、どこにあるんでしょうか!? あ、2つめの動画のタイトルに「海上技術安全研究所」とありました。深さ5+30=35m、波を消すこともできる!文字造波!

    こういう装置を見ると、仕組みや制御方法が気になります。音を聞いていても造波装置の動作音がほとんどしませんね。速く力強いので、油圧かなんかでしょうか。文字を作るには、128個の造波装置をどのように動かすとよいのか?は面白い問題です。波の重ね合わせと時間の対称性が基本原理でしょうか。



  • @ソム さん
    日本の海上波研究の原点に、哀しい事件があります。貧乏国の無理のつけですす。
    https://ja.wikipedia.org/wiki/友鶴事件
    https://ja.wikipedia.org/wiki/第四艦隊事件
    海事史・造船史・溶接史に残る事件です。


  • Global Moderator

     ...あ、あんたたち。聞いてるかしら?
    ...じゅる
    ディスプレイ
    0_1555154991784_RD_A13.gif
     涎!? ま、いいわ。勝手に見ちゃうから(チラシの横にあった冊子を手に取る)。
    反応拡散方程式
    0_1555155230249_reaction-diffusion-eq.png
     ...ふむふむ、なるほどなるほど U と V の2つの物質があるわけね。その濃度が u と v で表される...。左辺がその濃度の時間変化で、右辺がちょっと複雑な式になってる。なになに、f と g は反応によって u と v がそれぞれ増える速度を表す、と。f と g の関数の中身は、反応の種類によって、いろいろ変る。Du と Dv は U と V それぞれの拡散係数で、▽の記号と合わせて、拡散による変化を表す、と。空間や平面の中での2つの物質の濃度変化を記述している。つまりこういうことね...

    ある場所の U の増える速度 = (その場所で U が反応によって増える速度)+(その場所の U が拡散によって増える速度)
    ある場所の V の増える速度 = (その場所で V が反応によって増える速度)+(その場所の V が拡散によって増える速度)

    ...あばばば
    ディスプレイ
    0_1555155953335_RD_A11.gif
    ......でも、この式から、何か面白いことが起こるのかしらね。UもVも増えるか減るかして、拡散で均一な濃度になるだけじゃないのかしら。
    ...!
    ディスプレイ
    0_1555156067427_RD_A12.gif
    ...それとも、反応の中身に工夫があるのかしら?(手元の冊子をじっとにらむ)



  • @ソム さん
    ふむ(;'∀') むむむ、更に(;'∀')


  • Global Moderator

    ...それとも、反応の中身に工夫があるのかしら?(手元の冊子をじっとにらむ)
    化学反応の例(1)
    0_1555198933748_Gray-Scott-reaction.png

    0_1555198918267_Gray-Scott-eq.png
    Fとkは定数。

    例がいくつか載ってるわね。
    化学反応の例(2)
    0_1555199130490_Brusselator-reaction.png

    0_1555200969619_Brusselator-eq.png
    αとβとγは定数。

    ...化学反応式を速度論でモデル化すると、fとかgのような反応速度を表す式が出てくる。これは、学校で芥子先生が言ってたっけ(何の授業だったかしら?)。

     にょろにょろ~
    ディスプレイ
    0_1555199737084_RD_A14.gif

    ...2つの反応には似ているところもある。でも、特別なことがあるの?


  • Global Moderator

    ...2つの反応には似ているところもある。でも、特別なことがあるの?

     1つめの例が簡単そうなので見てみましょう。
    U + 2V → 3V
    Vが2つ集まってUをVに変換する反応ね。速度式を見ると、この反応だけでは説明のつかない項がある。Fという定数。これは、一定の速度Fで U が系中に増えていることを意味してる。つまり、Uは、反応液の中に一定速度で常に足されているエサと考えると良いわね。そして、Vは酵素みたいなもので、2量体として働いて、エサのUから自分自身Vを作り出すと言う感じかしら。

    V → P
    VがPに変化する反応。速度式を見ると、-k V となっているので、放射性元素の崩壊のように、一定の確率でPに変化するということね。Vが酵素だとすると、酵素が一定の割合で不活化してPになると理解できる。

    ここまでで、反応速度式のだいたいが理解できた。でも、この冊子は不親切ね。これだけではまだ全てに説明が付かない。それは、f(u,v)とg(u,v)のそれぞれにある、-F u、-F v という項。これらは、U, V の両方が同じ確率で反応液から消えていき、その率はUが増える一定速度Fに等しいことを示す。。。つまり、この反応液には、常に一定速度でUを含む液が追加されながら、全体から同量が排出される、一種の連続反応槽をモデル化していることになるわ。

    もともとの反応拡散方程式では、拡散を考慮しているけど、移流項(流れによる移動を表す項)はない。だから、攪拌されているわけではない。反応液全体から均一に排出することは難しいと思うけど、何か反応装置に工夫するのかしらね。まあ、うちのおじちゃんあたりなら、何とかしそうだわ、ぶつぶつ...

     ウェンズディちゃんもこっちに来たらいいのに...

     まあいいわ。速度式を正しいものとして見ましょう。何が起こるかしら?


  • Global Moderator

    ラズベリー・パイを使って、Mathematica で遊ぼう!@ソム が発言 :

    文字を作るには、128個の造波装置をどのように動かすとよいのか?

    海上技術安全研究所のページに研究紹介がありました。
    波の芸術
    https://www.nmri.go.jp/news/toics/wave_art.html

    規則的な波でなく、三角波(一発大波)の時間制御を行うようです。

    ついでに、文末に382台の造波機を並べた長方形の実海域再現水槽に言及があります。ここで用いられる造波機は、元の動画の深海水槽の造波機と見た目はにています。
    https://www.jstage.jst.go.jp/article/jime/48/6/48_776/_pdf
    ↑の記事によると、造波機はフラップ式(板を傾けて動かして波を作る方式)で、ACサーボモーター、ボールネジ駆動であるそうです。

    深海水槽のほうも駆動方法が同じなら、油圧でなく、電動であったということになります。ACサーボーモーター+ボールネジ駆動は、NC工作機(フライス盤など)でよく用いられる方法です。ボールネジとは、ネジとベアリングを合成したような優れもので、摩擦が小さく、精密で、剛性の高い駆動ができます。油圧ピストン・油圧ジャッキ的なもので駆動していると予想していたので、意外です。


  • Global Moderator

     まあいいわ。速度式を正しいものとして見ましょう。何が起こるかしら?

     ややこしいものに取り組むときは、一歩一歩よ。まず地図作りからね。UとVの濃度がある値のときに、反応によってどう変化するか? 知るためには、そのときの g と f それぞれの符号が分かればよい。

    f < 0 f = 0 0 < f
    g < 0 UもVも減る Uは変らず、Vは減る Uは増えるが、Vは減る
    g = 0 Uは減り、Vは変らず UもVも変らず Uは増え、Vは変らず
    0 < g Uは減るが、Vは増える Uは変らず、Vは増える UもVも増える

    特に、f = 0 や g = 0 になる濃度は、特徴的と言えるわ。その中でも特に同時に f = g = 0 となる濃度があれば、もう反応による変化起こらないということだから、安定濃度になる。パラメータを1つに決めて f と g のプロットをしてみましょう。1つのプロットは、f = 0, g = 0の濃度、もう一つのプロットは、標高のようにして、f と g を表してみる。
    0_1555243545458_nullcline-F003-k0063.png
    左:f =0, g=0(2つある)となる濃度(u, v)。f = g = 0 となる交点を黒丸で示す。
    右:濃度 (u, v)のときの f (黄)、g(青)の大きさを高さで表す。緑は、高さ = 0 の面。

     さて何がわかるかしらね。

    Mathematica
    Solve[-u v^2 + feed (1 - u) == 0, v]
    
    Solve[u v^2 - (feed + kill) v == 0, v]
    
    Module[{feed = 0.03, kill = 0.063},
     {Plot[{Sqrt[feed - feed u]/Sqrt[u], (feed + kill)/u, 0}, {u, 0, 1.5},
       AxesLabel -> {"u", "v"}, BaseStyle -> {FontSize -> 16}, 
       ImageSize -> 300,
       PlotLegends -> {"f=0", "g=0", "g=0"}, 
       PlotStyle -> (ColorData[97, "ColorList"][[#]] & /@ {2, 1, 
           3})(*Plot3Dと色を合わせる*),
       Epilog -> {Text["F=" <> ToString@feed <> "\nk=" <> ToString[kill], 
          Scaled[{0.75, 0.75}], Alignment -> Left],
         PointSize[Medium], Point[{1, 0}]},
       PlotRange -> {{-0.1, 1.2}, {-0.1, 1.2}}, AspectRatio -> 1],
      Plot3D[{-u v^2 + feed (1 - u), u v^2 - (feed + kill) v, 0}, {u, 0, 
        1.2}, {v, 0, 1.2},
       AxesLabel -> {"u", "v", ""}, PlotPoints -> 20,
       ViewPoint -> {0.5556550603030389, -1.7001159452008137`, 
         2.8724298471561607`}, ViewVertical -> {0., 0., 1.}, 
       ImageSize -> 350]
      }
     ]
    

    訂正:色の対応が違っていたのを修正しました。


  • Global Moderator

     さて何がわかるかしらね。

     地図を見ながら、それぞれの濃度 (u,v) の領域で、濃度が変化する方向を矢印で書いてみる。変化の方向は先に作った表を見ながらね。

    0_1555245811201_nullcline-arrows.png

    こうなるかしら。線の上からスタートしたときどちらに変化するかも書いてみる。

     ①の領域にある濃度の組合わせから反応を始めたとしましょう。すると左上のほうに変化していく。そして、青線にぶつかるわね。すると左に動き、②の領域に入る。②の領域では左下に動くので、場所によるけど、黄色の線にぶつかるわ。そこでは下に動くので、③の領域に入る。③の領域では、右下へ動く。すると緑線にぶつかって、緑線では右に動くので、(u, v) = (1, 0) の黒点にぶつかるまで動くはずね。この点は安定点なので、来たらもう濃度は変化しなくなる。②の領域の、右下で始めると、ちょっと違うわね。まず左下に動いて、緑線にぶつかる、そして左へ動いて、やっぱり (u, v) = (1, 0)で止っちゃうわ。これ以外のケースはなさそうね。つまり、どこから始めても、最終的に (1, 0)になって、反応は終りってことか。

     本当かどうか、ちょっと試しに濃度変化の軌跡を見てみましょう。例えば、(u, v) = (0.5, 0.5) から始めて、f, g を計算しながら、ちょっとずつ濃度を更新していく。その濃度変化を点列として結ぶと軌跡が得られるはずよ。
    0_1555246072121_nullcline-F003-k0063-trace05_05.png
    赤線が軌跡。

    Mathematica
    Module[{feed = 0.03, kill = 0.063, start = {0.5, 0.5},
      f, g, next, trace},
     f[u_, v_] := u + dt (-u v^2 + feed (1 - u));
     g[u_, v_] := v + dt (u v^2 - (feed + kill) v);
     next[{u1_, v1_}, 
       dt1_] := {f[u, v], g[u, v]} /. {u -> u1, v -> v1, dt -> dt1};
     
     trace = NestList[next[#, 0.5] &, start, 500];
     Plot[{Sqrt[feed - feed u]/Sqrt[u], (feed + kill)/u, 0}, {u, 0, 1.5},
      AxesLabel -> {"u", "v"}, BaseStyle -> {FontSize -> 16}, 
      ImageSize -> 300,
      PlotLegends -> {"f=0", "g=0", "g=0"}, 
      PlotStyle -> (ColorData[97, "ColorList"][[#]] & /@ {2, 1, 
          3})(*Plot3Dと色を合わせる*),
      Epilog -> {Text["F=" <> ToString@feed <> "\nk=" <> ToString[kill], 
         Scaled[{0.75, 0.75}], Alignment -> Left],
        PointSize[Medium], Point[{1, 0}], Red, Point@start, Line@trace},
      PlotRange -> {{-0.1, 1.2}, {-0.1, 1.2}}, AspectRatio -> 1
      ]
     ]
    

     やっぱりそうね、ぐるっと動いて、最後は黒丸デッドエンド。ふふふ。
     ちょっとちょっと、サーズディちゃん、サンディちゃん!
     どおしたの、さっきからぶつぶつと独り言。
     試して欲しいことがあるの。ここにあるパラメータの値を入れて、2人の見ている反応を動かしてみて欲しいの。Uの濃度が0にちかいときは青、1に近いときは赤で、間の濃度は白っぽくね。最後は全体が真っ赤になって終わるはずよ。初期値は適当に入れといて。
     (かちゃかちゃ←コンピューターに打ち込む音)ほいさ。
    ディスプレイ (F = 0.03, k = 0.063)

     !



  • 0_1555254251870_a72f9b09-f957-4c02-9aad-250d2589c25a-image.png ちゃん

    あらあら!(^^)!



Looks like your connection to パズルハウス was lost, please wait while we try to reconnect.