#数楽 #Julia言語 新学期の講義のためのC^∞級函数の例の準備で、

f(x) = if x > 0 exp(-1/x) else 0 end

のような函数を扱っている人もいるはず。

現時点で最もよく使われているFloat64型の浮動小数点数の精度では

exp(-1/0.001) == 0

は true になります❗️(笑)

こういうのもネタになりそう。
#Julia言語

f(x) = if x > 0 exp(-1/x) else zero(x) end

using ForwardDiff
f′(x) = ForwardDiff.derivative(f, x)

のグラフ。最近では自動微分が普通で、数値的に微分を求めるときにも、導函数の公式を入力せずに、「正確に」かつ「効率良く」微係数を計算できます。

gist.github.com/genkuroki/ce92…
#Julia言語

f(x) = if x > 0 exp(-1/x) else zero(x) end
g(x) = if x > 0 exp(-1/x)/x^2 else zero(x) end

using ForwardDiff
f′(x) = ForwardDiff.derivative(f, x)

のgとf′の値と計算速度の比較。

導函数の公式を私が入力したgとForward.derivativeで自動微分しているf′で計算速度はほぼ同じ。
#Julia言語 ForwardDiff.jl は実装が易しい場合の自動微分のパッケージ。

一般に函数の多段合成の微分の計算は本質的に行列の積になるのですが、行列のサイズによって、((AB)C)DとA(B(CD))で計算速度が大きく違う場合が出て来ます。そこも効率化可能だが実装は非常に面倒。専門的な話題になる。
#Julia言語 自動微分は、同一のコードを、値だけではなく、微係数も同時に計算できるようなnon-standardな解釈で実行する手続きです。そういう見方は明らかに自動微分以外に大幅に一般化可能。Julia界はそういう方向の技術を発展させようとしています。応援する価値有り。
stochasticlifestyle.com/generalizing-a…
#Julia言語

f(x) = if x > 0 exp(-1/x) else zero(x) end

はJuliaにおける合法的なコードです。Juliaを知らなくても、数学を知っていれば読めるはず。

zero(x)はxと同じ型の0です。Julia特有の「計算効率を上げたければ、型安定なコードを書け」という要求に従うためにそう書いています。
#Julia言語

f(x) = if x > 0 exp(-1/x) else zero(x) end

これは

f(x) = if x > 0
exp(-1/x)
else
zero(x)
end

のように改行を入れて書く方が普通かも。

改行を入れていないコードにセミコロン ; がないことにも注目。Juliaのパーサーはセミコロンの個数が必要最小限ですむような仕様。

• • •

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

2 Apr
#Julia言語 これも面白いです。

LispとJuliaの比較のような話になっている?

以下のリンク先はJuliaでの高速多項式評価が何をやっているかの解説。係数が格納された配列を読みながらの多項式評価より速いです。

discourse.julialang.org/t/cas-benchmar…
CAS benchmarks (Symbolics.jl and Maxima)
#Julia言語 【ネタ】重要情報(笑)

discourse.julialang.org/t/cas-benchmar…
【Maybe julia stands for “Jeff’s uncommon lisp is automated”?】とJeff Bezansonさんが言っていた!
#Julia言語 上で紹介したスレッドは以下に紹介するスレッドから派生したっぽい。

以下のリンク先はJuliaが何をやっているかの易しい解説になっている発言を選びました。

どういう人がやって来ても、技術的な事柄を易しく解説しようとすることはやはり大事なことだな。

discourse.julialang.org/t/cas-best-pra…
Read 7 tweets
2 Apr
#Julia言語

discourse.julialang.org/t/question-abo…

github.com/JuliaMath/Xsum…
Xsum: Exactly rounded floating-point sums in Julia
#Julia言語 Xsum.jl examples

Float128を使うと計算速度が数十倍~百倍以上遅くなったりする。

Xsum.jl の xsum を使えば、少し遅くなる程度のトレードオフで、Float64の精度での和を正確に計算できる。

精度が気になる和をgeneratorのsumで計算してはいけない。

gist.github.com/genkuroki/97c4… ImageImageImage
#Julia言語 builtin sum も sum(f, iter) の形式で使えば精度的に結構悪くなさそう?
Read 5 tweets
2 Apr
ツツカナ vs. 森下卓 電王戦リベンジマッチ shogidb2.com/games/07219818… #将棋 #将棋DB2 @backflip1801より
電王戦公式統一パソコン「GALLERIA電王戦」森下卓九段インタビュー - ヒューマンエラー対策 森下新ルールなら技術で勝てる (1) | マイナビニュース news.mynavi.jp/kikaku/2014120…
指掛けの電王戦リベンジマッチは指継がず、森下卓九段の判定勝ちと発表。ニコ生アンケート結果は良かった85% shogi1.com/denousen-reven…
Read 5 tweets
2 Apr
#数楽 大学1年生向けの線形代数の講義では、与えられた a_{ij}とb_iが定めるx_j達に関する連立一次方程式

a_{11}x_1 + … + a_{1n}x_n = b_1
  ………
a_{m1}x_1 + … + a_{mn}x_n = b_m

をa_{ij}, b_iに関する場合分けで解く話をやったりします。

ax=bはこれのm=n=1の特別な場合。
#数楽 そのm=n=1の特別な場合の方程式

ax=b

は以下の3種に分けされる。

(0) a≠0の場合の ax=b
(1) a=0, b≠0の場合の 0=b
(2) a=0, b=0の場合の 0=0

(0), (2)の場合に解空間の次元はそれぞれ0, 1になり、(1)の場合に解空間は空集合になる。

これの一般化をやる。
#数楽 m=n=2の場合の方程式の中には

x + ay = p
0x + 0y = q

のようなものも含まれる、q≠0の場合は解なしになり、q=0の場合には

x = p - ay
yは任意

の形ですべての解を表せる。

こういう講義をしている人達はそれなりにいるはず。
Read 5 tweets
2 Apr
#Julia言語 マクロは難しいです。Symbol型とExpr型がどう使われているかのイメージがないとつらい。そこでイメージを得るためのパッケージを作って以下の場所で公開しています。

github.com/genkuroki/Meta…

github.com/genkuroki/Meta…

AbstractTrees.jlが神。それを使ってExprをツリー表示。
#Julia言語 イメージを得るためには、

e = :(x = 1 + 2)
dump(e)

とかしてみるとよいです。dumpの結果は見難いですが、情報がフルに入っている。見易く気軽に表示したければ、MetaUtils.jl を使えばよい。
#Julia言語 自分でMetaUtils.jlを書くまで、Juliaのマクロを自分で書くことをできませんでした。

まるで「鶏と卵」。数学的な複雑さがある程度以上のものの理解ではほぼ常に「鶏と卵」状態になる。

親子丼が実は大好物。
Read 5 tweets
1 Apr
#Julia言語 小ネタ

isless と < の違い。

それぞれの公式解説を見れば違いは明らかなのですが、違いに気付いていないユーザーは多いと思う。

< は isless にfallbackするので違いは小さいのですが、isless は sort で使用可能な全順序。

docs.julialang.org/en/v1/base/bas…
docs.julialang.org/en/v1/base/mat… ImageImage
#Julia言語 自分で定義した型に Base.isless を定義するときには、sort で使える全順序となるように定義するべき。

それに対して、Base.:< は全順序である必要はない。もちろん、islessにフォールバックするので、別に定義する必要が無ければ、全順序の Base.isless だけを定義しておけば足りる。
#Julia言語 全順序のislessとは別に、全順序ではない < が必要なケースは、浮動小数点数の大小関係。

浮動小数点数は NaN を含んでおり、例えば、0.0 < NaN や NaN < 0.0 は false になって欲しく、実際にそうなるように定義されている。

全順序の isless で isless(Inf, NaN) は true になる。
Read 9 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!