NASAでは普通に #Julia言語 を使っているようですが、日本ではどうなっているんですかね?

Juliaの良い点をNASAがどのように活かしているか分かる動画


Modeling Spacecraft Separation Dynamics in Julia
Jonathan Diegelman
#Julia言語 あらためてNASA JuliaLangでググったら、こんな素敵な動画も見つかりました。


The Julia Language 1.0 Ephemeris and Physical Constants Reader for Solar System Bodies

github.com/JuliaAstro/JPL…
#Julia言語 NASA関連

Pluto.jl
DifferentialEquations.jl
Optim.jl
GlobalSensitivity.jl
MonteCarloMeaurements.jl
ComponentArrays.jl
Unitful.jl

などを使っているみたい。
#Julia言語 パラメータの値をMonteCarloMeasurements.jlを使って「幅を持つ数値」で与えると、DifferentialEquations.jlはその幅を持ったパラメータ値について微分方程式を数値的に解いてくれて、Plots.jlはそれを視覚化してくれる。

幅を持つパラメータ値を扱うためのコードを自分で書く必要がない!
#Julia言語 例えば微分方程式のソルバがCやFortranで書かれていて、単なる浮動小数点数にしか対応していない場合には、「幅を持つ数値」に対応するためのコード を自分で書く必要が生じる。
#Julia言語 しかし、JuliaのDifferentialEquations.jlは「幅を持つ数値」を含む浮動小数点数よりも圧倒的に広い数値の型に対応している。

だから、入力のパラメータを浮動小数点数ではなく、「幅を持った数値」にすれば「幅を持った数値」について自動的に微分方程式の数値解を計算してくれます。
#Julia言語 しかもその手の「魔法」は、特別に優れた人が開発したDifferentialEquations.jlのようなパッケージだけでがなく、私が書いた素朴な微分方程式の数値解を求める函数でも使えます!

Juliaが普及すれば「魔法」が大衆化されまくることになります。
#Julia言語 Juliaでforループを回す素朴なコードを書けば、gccと同じ速さで計算してくれることを確認できます。

だから、gccの側で時代遅れのライブラリを使った途端に、gccは新しい無難なライブラリをデフォルトで使ってくれるJuliaに計算速度で負ける。

コードを書くのはJuliaの方が圧倒的に楽。
#Julia言語

Juliaなら気楽に書けて、gccと同じ速さで計算してくれて、ライブラリの選択で失敗しがちな人はgccではなくJuliaを使った方が無難に速く計算できる可能性が高い。

しかもJuliaなら、自分で書いた微分方程式のソルバに「幅を持った数値」をパラメータとして与える「魔法」も使える。
#Julia言語 NASAがJuliaを使うようになったことは技術的な合理性の観点からは当たり前のことでしかないと思います。
#Julia言語 例えば、gccの側でデフォルトのrand()を使うとJuliaに計算速度で負けます。

gcc側でメルセンヌツイスターMT19937を使ってもその後継のdSFMTがデフォルトのJuliaに計算速度で負けることになります。

gcc側でライブラリを自分で選ぶと容易に失敗できます。
#Julia言語 添付画像のように、シンプレクティック法の1つであるYoshida6()法で微分方程式の数値解を求め、さらにパラメータに幅を持たせた場合の挙動を視覚化することを、空行を除いて9行で実行できています。

速いだけではなく、非常に楽ちん。
#Julia言語 JuliaでDifferentialEquations.jlとPlots.jlを使うと以下の仕事の仕方は時代遅れに感じられる:

❌gccやg++で微分方程式の数値解を求めるコードを書いて、計算結果はファイルに出力し、視覚化はそのファイル経由で行う。

パラメータを摂動した場合の挙動の視覚化は非常に面倒になる。
今の日本の大学教育では

❌gccやg++で微分方程式の数値解を求めるコードを書いて、計算結果はファイルに出力し、視覚化はそのファイル経由で行う。

という時代遅れな仕事の仕方が普通だと思ったまま学生を卒業させている場合が多いのではないか?

そういう学生は現代のNASAでは通用しなさそう。
以下のリンク先の動画との比較:


JuliaCon 2019 | The Julia Language Ephemeris and Physical Constants Reader for Solar System Bodies

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with 黒木玄 Gen Kuroki

黒木玄 Gen Kuroki Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @genkuroki

16 Mar
#Julia言語 Julia言語で10行

nbviewer.jupyter.org/gist/genkuroki…

(1/5) 二項分布モデル内の標本分布で測った95%信頼区間にモデルのパラメーター値が含まれる確率のプロット。95%以上になる。ほとんどのパラメーターで95%より真に大きい。 Image
#Julia言語

nbviewer.jupyter.org/gist/genkuroki…

(2/5) 二項分布モデルの95%信頼区間 [CI_min, CI_max] を平面上の座標 (CI_min, CI_max) にプロット。丸の大きさはモデル内でその信頼区間が生じる確率の大きさに比例。赤の十字の左上側の領域ではパラメータの真の値が信頼区間に含まれている。 Image
#Julia言語

nbviewer.jupyter.org/gist/genkuroki…

(3/5) 3次元のランダムウォーク Image
Read 50 tweets
16 Mar
#Julia言語

using Statistics, StatsBase
f(x) = (mean(x), geomean(x), median(x))
[∘(fill(f, n)...)((1, 1, 2, 3, 5)) for n in 30:35]

6-element Vector{~}:

(2.0890579497368598, 2.0890579497368598, 2.0890579497368598)


gist.github.com/genkuroki/e69a…

xkcd.com/2435/
#Julia言語

∘(fill(f, 4)...)((1, 1, 2, 3, 5))



f∘f∘f∘f(1, 1, 2, 3, 5)

と同じで、∘は函数の合成なので、

f(f(f(f(1, 1, 2, 3, 5))))

と同じ意味になる。

函数fのn個の合成は

∘(fill(f, n)...)

と書ける。Juliaを超高級電卓として使うときにはこれを知っているとちょっと便利。
#Julia言語 による解答例のスクショ

もとの問題文の数学的内容がほとんどそのままJuliaのコードに翻訳されていることがわかる。

難しいのはn個の函数fの合成が ∘(fill(f, n)...) と書けること。

φ(fill(f, 3)...)はφ(f, f, f) と同じ意味に、∘(f, g, h)(x,y)はf(g(h(x,y)))と同じ意味になる。
Read 6 tweets
15 Mar
#数楽 ランダムウォークの話なので、ランダムウォークの数え上げの図をシンプルに描けば簡単です。

(1)は二項係数の問題。

(2)はCを通らない経路を数えて二項係数から引けばよい。

続く Image
#数楽 「Cにいる状態から出発して云々」という発想で最後までやり切るのは苦しいです。

Cを通る経路の個数を数え上げた青の数字をじっと眺めれば色々複雑なことになっていることが分かります。

添付画像の緑の部分はCを経由してAに達する経路の本数(全部で8本になる)の正しい数え方の例。

続く Image
#数楽 移動禁止点があるランダムウォークの経路の数え方に習熟すれば、公平なギャンブルを繰り返すと、勝ちまたは負けに偏っている時間の割合が長くなる確率が高くなることを意味する逆正弦法則を証明できます。以下のリンク先を参照。

この話題は「大学入試問題」という枠で見ない方がお得です。
Read 5 tweets
14 Mar

NASAでどのようにJuliaを使っているか
宇宙船の分離のJuliaによるシミュレーション

多分 #Julia言語 ユーザーはNASAでどのようなパッケージを使っているのか気になると思います。動画のスクショを見て下さい。 ImageImageImageImage
#Julia言語 NASAでの宇宙船の分離シミュレーションで使っているパッケージ続き

添付が画像③によればMATLABでやっていた場合よりも15000倍高速化されたらしい。

DifferentialEquations.jl で微分方程式を解いて、Optim.jl で最適化を実行しているらしい。

Pluto.jlを使っていることもわかる。 ImageImageImage
#Julia言語 NASA では Pluto.jl 上で宇宙船の分離のシミュレーションを行っているらしいのですが、スライダーを設置したり、MonteCarloMeasurements.jl で摂動をかけた場合の結果の違いをシミュレーションのコードを変更せずに表示させているようです。 Image
Read 27 tweets
13 Mar
#Julia言語

JupyterとPluto.jlの違い

Jupyterを使うにはPythonが必要。
Pluto.jlはJuliaだけで動く。

Jupyterではセル単位で実行される。
Pluto.jlでは任意のセルの実行が他のセルにも自動的に反映される。さらにスライダーなどの設置がJupyterよりも楽。

github.com/fonsp/Pluto.jl
#Julia言語 続き

Jupyter notebookをダウンロードすると計算結果の情報もそこに含まれている。
Pluto.jlのノートブックをダウンロードしても計算結果の情報は含まれない。

以上のようにJupyterとPluto.jlでは長所と欠点が違うので使い分けるとよいと思います。

github.com/fonsp/Pluto.jl
#Julia言語 仮に私が中高生に初めてJuliaを使わせる仕事が割り振られたとしたら、

①Juliaの公式バイナリをダウンロードしてインストール
②Plots.jlやPluto.jlなどのパッケージのインストール
③using Pluto; Pluto. run() → ブラウザでPlutoが使用可能に!

のようにしたいです。
Read 13 tweets
12 Mar
#Julia言語 で @ distributed を使ってモンテカルロシミュレーションの足し上げを行うときに、forループの内側で rand() を使うと遅くなります。固定された rng について rand(rng) の形式で実行する必要がある。

解決策:@ my_distributed マクロを自作して使う!

gist.github.com/genkuroki/a6dc…
#Julia言語 例の e のモンテカルロ計算については

gist.github.com/genkuroki/5212…

を参照。色々試してみたが、私の環境では @ my_distributed 版がシンプルでかつ一番速かったです。
#Julia言語

@ my_threads - threads version of @ my_distributed

gist.github.com/genkuroki/1efd…
Read 12 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!