1週間で学べる! Julia数値計算プログラミング(KS情報科学専門書)

Julia本表紙

1週間で学べる! Julia数値計算プログラミング(KS情報科学専門書)

更新履歴

  • 2022年7月19日 サイトを公開しました
  • 2022年8月3日 動作確認したコードの公開を始めました(2章から順番にアップロードしていきます)
  • 2023年5月21日 Julia 1.9での動作確認を行いました。

動作確認したコード

コメントなどは省いたJupyterノートブックとコードです。コードの方は開いて該当箇所をREPLにコピーペーストすることで動かすことができます。動作確認にはJulia 1.7.3および1.9.0を用いています。

誤植について

もし誤植や間違いと思われる箇所を発見した方はこちらに記入していただければチェックして反映したいと思います。

第1刷の誤植

  • p.17 下部

\[f(x) = \cos(x) + 2 \sin(3 x^2)\]

はコードとずれていますので、

\[f(x) = \cos(x) + 2 \sin(2 x^2)\]

が正しいです。

  • p.19 上部

\[f(x,y) = \cos(x) + 2 \sin(3 y^2)\]

はコードとずれていますので、

\[f(x,y) = \cos(x) + 2 \sin(2 y^2)\]

が正しいです。

  • p.95

正$(8N)角形の場合正$(N)角形の場合が正しいです。本文の出力を全て8で割って読み替えてください。

  • p.102 最後のplot
markershape = [:circle,:star5]

->

markershape = [:circle :star5]
  • p.105の最後
n = 10000

->

N = 10000
  • p.111 反発係数の定義式

\[e = \frac{v'- V'}{v-V}\]

->

\[e = -\frac{v'- V'}{v-V}\]

  • p.111 $V'$の表式

\[V' = \frac{2v(r-1)V}{1+r}\]

->

\[V' = \frac{2v+(r-1)V}{1+r}\]

コードに変更はありません。

  • p.117のコード
x,v = get_xv(small,ith)
X,V = get_xv(large,ith)

の部分の2変数関数get_xv(small,ith)は本では定義されていませんでした。 関数の終わり(25行目の後)に

function get_xv(ball::Ball, ith)  
    return ball.x_history[ith], ball.v_history[ith]  
end

を定義してください。報告ありがとうございます。

  • p.123 中央付近

\[d_{ij} = -(\delta_{i,i+1} + \delta_{i,i-1}-2\delta_{ij})/(\Delta x)^2\]

->

\[d_{ij} = -(\delta_{i,j+1} + \delta_{i,j-1}-2\delta_{ij})/(\Delta x)^2\]

コードの修正はありません。

  • p.129 V(q)の式

\[e^{-eqx}\]

->

\[e^{-iqx}\]

  • p130のmake_Hk
v += Ukkp

->

v += Vkkp
  • p130のcalc_psi
nmax = length(bn)

->

nmax = length(cn)

です。

  • p133の変数変換は$r = r' \sqrt{R}$ではなく$r' = r \sqrt{R}$でした。
  • p133 5行目の式、左辺第三項

\[(r'-n^2) \rightarrow (r'^2 -n^2)\]

  • p133 5行目の式、左辺第四項

\[V(r) \rightarrow V(r')\]

です。

  • p138のcalc_Vij

正しくは、

function calc_Vij(n,i,j,R,V)
    αi = besselj_zero(n,i)
    αj = besselj_zero(n,j)
    f(r) = r*V(R*r)*besselj(n,αi*r)*besselj(n,αj*r)
    v,err  = quadgk(f,0,1)
    Vij =v*2/besselj(n+1,αi)^2 
    return Vij
end

です(申し訳ありません。なぜこんな間違いになっているか、謎です)。

  • p138の式

\[(R/20) \rightarrow (R/20)^2\]

でした(コード内の訂正はありません)。

  • p141のtimedep_simple()
H = zeros(Float64,N,N)
make_H!(H,N,L,V)

->

H = make_H(N,L,V)

make_H!はp143で定義されていますので、この修正をしなくてもそちらを先に定義してからなら動きます(登場順番が逆になっています)。報告ありがとうございます。

  • p.146 上部

\[\exp(i {\cal H} \Delta t) \exp(-i {\cal H} \Delta t) \sim (1- i {\cal H} \Delta t)(1- i {\cal H} \Delta t)\]

->

\[\exp(i {\cal H} \Delta t) \exp(-i {\cal H} \Delta t) \sim (1+ i {\cal H} \Delta t)(1- i {\cal H} \Delta t)\]

最右辺の結果は変わりません。

  • p160のtest6

コードの定義の前に、

using Plots
using Measures

を追加。add Measuresでパッケージを追加しておく必要があります。

  • p170のコード
return mz_data,accept_count/(num_total*Lx*Ly)

->

return mz_data,accept_count/(num_total*Lx*Ly),absmz_meanvalue/measure_count

です。p173のコードを動かすためには引数が一つ足りませんでした。関連して、p171のコードはp173と同様に

@time mz_data,acceptance_ratio

->

@time mz_data,acceptance_ratio,absmz

と修正してください。

  • p170のコード

引数が${\rm measure_{i}nterval}$となっているものを

measure_interval

と修正。

  • p210のOptim
optimize(f, [0.0, 0.0])

->

a1 = optimize(f, [0.0, 0.0])

と修正。

  • p232のコード

14行目と15行目の間に

n = 10000

を挿入。

謝辞

Twitterやメールなどを通じて誤植の指摘をしていただいた方々に深く感謝いたします。