3年くらい前に一度 Julia で遊んだことがあったのだけど、 しばらく忘れていて、 先日某先生に「Julia はどうですか」みたいなことを聞かれて、 今日また別件で目にしたので、久しぶりにネットを見に行く。
SIAM Review (有名なジャーナルです) で紹介されたりしている?ほー。
J. Bezanson, A. Edelman, S. Karpinski, V. B. Shah, Julia: A fresh approach to numerical computing, SIAM Review, Vol. 59, pp. 65-98 (2017).(これは学内ネットワークからは読める。)
Juliaのインストール Homebrew では
brew update brew cask install julia |
MacPorts では
sudo port install julia |
でも、今回は、 Julialang から入手する。 今だと julia-1.2.0-mac64.dmg を保存して、ダブルクリックすると
これで、 アプリケーション ディレクトリィに、 Julia-1.2.app と言うディレクトリィが出来る。ダブル・クリックすると、 ターミナルが起動してその中で Julia が起動する。 CUI なのか。では、ターミナルや iTerm2 から呼び出すとして、 エイリアスの登録でもしておくか。
alias julia=/Applications/Julia-1.2.app/Contents/Resources/julia/bin/julia |
$ julia _ _ _ _(_)_ | Documentation: https://docs.julialang.org (_) | (_) (_) | _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help. | | | | | | |/ _` | | | | |_| | | | (_| | | Version 1.2.0 (2019-08-20) _/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release |__/ | julia> |
今回は「チュートリアル」で紹介されていたオープン・テキストの Giray Ökten, First Semester in Numerical Analysis with Julia, 2018 をパラパラしながら試す。
ベクトル ベクトルの文法は MATLAB ライクだけれど独特なところもある。
julia> x=[1,2,3,4] 4-element Array{Int64,1}: 1 2 3 4 julia> y=[1;2;3;4] 4-element Array{Int64,1}: 1 2 3 4 julia> z=[1.0;2;3;4] 4-element Array{Float64,1}: 1.0 2.0 3.0 4.0 |
ふと、多倍長はどうなるのかなあ?と気になった。
ちょっと脱線 | |
GNU MPFR が入っていて、任意精度演算と言うのが出来るんだ。
(調子に乗って) 区間演算はどうだろう? MATLAB は INTLAB のようなツールボックスを可能にする言語仕様だったのだけれど、 Julia はどうか? …すでに色々チャレンジしている人がいるんだ (https://swim2019.ensta-paris.fr/papers/vorontsova.pdf)。へー。 今度試してみよう。 |
MATLABのように ' で転置(正確には Hermite 共役)される。
julia> x'*x 30 |
こういうこともできる。
julia> x=[10*i for i=1:5] 5-element Array{Int64,1}: 10 20 30 40 50 |
julia> first(x) 10 julia> last(x) 50 julia> minimum(x) 10 julia> maximum(x) 50 julia> sum(x) 150 julia> append!(x,60) 6-element Array{Int64,1}: 10 20 30 40 50 60 julia> sin.(x) 6-element Array{Float64,1}: -0.5440211108893698 0.9129452507276277 -0.9880316240928618 0.7451131604793488 -0.26237485370392877 -0.3048106211022167 |
グラフ描き
julia> と言うプロンプトに対して、] と打つと、 package mode になる。add PyPlot とすると、 ネットから必要なファイルをダウンロードして、 インストーする。結構時間がかかるね。 package mode から元に戻るには backspace (control+H) を打つ。
julia> using PyPlot [ Info: : Precompiling PyPlot [d330b81b-6aea-500a-939a-2ce795aea3ee] むにゃむにゃ |
cycler pkgs/main/osx-64::cycler-0.10.0-py37_0 freetype pkgs/main/osx-64::freetype-2.9.1-hb4e5f40_0 kiwisolver pkgs/main/osx-64::kiwisolver-1.1.0-py37h0a44026_0 libpng pkgs/main/osx-64::libpng-1.6.37-ha441bb4_0 matplotlib pkgs/main/osx-64::matplotlib-3.1.1-py37h54f8f79_0 pyparsing pkgs/main/noarch::pyparsing-2.4.2-py_0 python-dateutil pkgs/main/osx-64::python-dateutil-2.8.0-py37_0 pytz pkgs/main/noarch::pytz-2019.3-py_0 tornado pkgs/main/osx-64::tornado-6.0.3-py37h1de35cc_0
あ、PyPlot って、Python の Plot ということか。
(Catalina では何も言われないが、High Sierra や El Capitan では
┌ Warning: PyPlot is using tkagg backend, which is known to cause crashes on MacOS (#410); use the MPLBACKEND environment variable to request a different backend. └ @ PyPlot ~/.julia/packages/PyPlot/4wzW1/src/init.jl:192 |
julia> というプロンプトに対して |
using PyPlot x = range(0,stop=2*pi,length=1000) y = sin.(3x); plot(x, y, color="red", linewidth=2.0, linestyle="--") title("The sine function"); |
(range() って何?
julia> range(0,stop=1,length=10) 0.0:0.1111111111111111:1.0 julia> range(0,stop=1,length=11) 0.0:0.1:1.0 |
ところでどうやって終了するのか? 当てずっぽうで quit, exit, bye を試したけれどダメ。 control+D で終了できたけれど、まさかねえ。 真面目に調べたら (「Julia練習帳」)、 exit() とか exit(1) とかするんだって。
プログラム
拡張子は .jl なんだ。
bisection.jl |
function bisection(f::Function,a,b,eps,N) n=1 p=0. # to ensure the value of p carries out of the while loop while n<=N p = a+(b-a)/2 if f(p)==0 || abs(a-b)<eps return println("p is $p and the iteration number is $n") end if f(a)f(p)<0 b=p else a=p end n=n+1 end y=f(p) println("Method did not converge. The last iteration gives $p with function value $y") end |
julia> include("bisection.jl") bisection (generic function with 1 method) julia> bisection(x->x^3-15x-4,2,6,10^(-15),20) p is 4.0 and the iteration number is 1 julia> bisection(x->x^3-15x-4,2,5,10^(-15),20) Method did not converge. The last iteration gives 4.000000953674316 with function value 3.147126335534267e-5 julia> bisection(x->x^3-15x-4,2,5,10^(-15),30) Method did not converge. The last iteration gives 4.000000000931323 with function value 3.073364496231079e-8 julia> bisection(x->x^3-15x-4,2,5,10^(-15),100) p is 4.0 and the iteration number is 52 julia> function g(x) return x^3-15x-4 end g (generic function with 1 method) julia> bisection(g,2,5,10^(-15),100) p is 4.0 and the iteration number is 52 |
文字列の引用符は、クォーテーション・マーク " なんだ。
ゼミで、とりあえず C 言語の実習を始めたけれど、 いつまでも C べったりでもないだろう、 Python でもやろうかな?と思っていたけれど、 案外 Julia も面白いかもしれないな。
多分続く。
(2019/11/6) アマゾンで書籍を検索してみて、 アダルト扱いになってしまう (苦笑)。 ヒットした和書は1つだけ。
Juliaプログラミングクックブック ―言語仕様からデータ分析, 機械学習、数値計算までアマゾンではレビューなし。Amazon では星3つ。 読者を選ぶ、みたいな微妙な評価だったけれど、 どちらかというと、自分は想定されている読者のような気がしたので買うことに。
翻訳者が書いた文章もついているけれど、 その部分は微妙な感じがした。
全体的に人に勧める感じの本ではないのかな。
(2019/11/18) これで数値解析入門のレクチャーをするとどうなるか? と考えて、サンプル・プログラムを書き始めた。 面白いのは、二分法のプログラムを書いて、 ふと「引数に BigFloat() を渡したら?」と思いついて実行したら、 多倍長計算をしてくれたこと。なるほど。
(2019/11/17) パッケージを加えるのに、次のようなやり方を指示された。 ] 打ってパッケージモードで作業するのと違いはあるのか?
using Pkg Pkg.add("DifferentialEquations") Pkg.add("Plots") using DifferentialEquations using Plots |
(2019/11/28) Julia で Plots のインストールの途中でひっかかると、後が面倒。
julia> using Plots [ Info: Precompiling Plots [91a5bcdd-55d7-5caf-9e0b-520d859cae80] ERROR: LoadError: UndefVarError: ffmpeg not defined Stacktrace: .... |
(v1.2) pkg> add FFMPEG#master; build FFMPEG; test FFMPEG
桂田 祐史