for i in 1:5
println(i)
end1
2
3
4
5
October 1, 2025
October 27, 2025
数値計算をする上でプログラミング言語の選択はとても重要です. 経済学でよく使われるプログラミング言語は速度の意味で概ね以下のような関係があります.
\[ \text{C/C++, Fortran, Julia} \gg \text{Python, Matlab} > \text{R} \]
おおむね, C/C++, Fortran, Juliaは10-100倍ほどPython, Matlab, Rより速く計算が可能です. なおベクトル化というテクニックやPythonのNumbaを用いることで, Python, Matlab, Rでも同様の速度も出すことが可能ですが, C/C++, Fortran, Juliaなどの言語とはそもそも質的に異なるという事実は頭に入れておいた方が良いでしょう.
JuliaはC並の速さとPython, Matlab, Rの使いやすさを目指して開発された比較的新しい言語です (Bezanson et al. 2012). 私自身, 高速化のためにはある程度の前提知識が必要なものの, C/C++, Fortranよりもデバックが容易であるため, 数値計算においてはJuliaを使っています.
また, 無料かつオープンソースであるため, アカデミアを離れたとしても使い続けることができます.
Juliaupを用いたインストールを推奨します.
Windows
パワーシェルを開き, 以下のコマンドを実行します.
Mac, Linux
ターミナルを開き, 以下のコマンドを実行します.
なお, インストール後はパワーシェル/ターミナルで以下のコマンドを実行することで最新版のJuliaにアップデートすることができます.
functionとendで囲まれた部分が関数の定義です.()内に,で区切って列挙します.; 以降はキーワード引数と呼ばれ, 呼び出す際に引数名を用いる必要があります.一行関数
function-endを省略し, =によって関数を定義することができます.*は省略可能です.for-endで囲まれた部分がforループです.inの後にイテレータを指定します.for-endをネストするか,で区切って複数のイテレータを指定します.if-endで囲まれた部分がif文です.elseifやelseを用いて条件分岐を行います.Pythonやその他のプログラミング言語と異なり, Juliaでは文字列 (String) と文字 (Character) が厳密に区別されています.
" で囲みます.' で囲みます.そのため, 以下のようなコードで直感的でない結果が得られることがあります.
α, ÷, σ², x₁).\ + 文字列 + <tab>で入力することができます. (e.g., \alpha + <tab>で α が入力できます.)そのため, CRRA効用関数とその導関数を以下のようにUnicode文字を用いて簡単に書くことができます.
\[ \begin{aligned} u(c, \sigma) &= \begin{cases} \log c & \text{ if } \sigma = 1 \\ \frac{c^{1 - \sigma}}{1 - \sigma} & \text{ if } \sigma \ne 1 \end{cases}\\ u'(c, \sigma) &= c^{-\sigma} \end{aligned} \]
u′ の上付き文字は \prime + <tab> で入力できます.? : を用いることで, if-else文を簡潔に書くことができます. つまり上のコードは以下と等価です.I came here 6 years ago, when I was 20.
So I spent 23 % of my life in Madrid.
$ + 変数名 で変数を文字列内に埋め込むことができます.$(式) で式を文字列内に埋め込むことができます.()で囲まれた要素の集まりです.[]を用いてアクセスできます.=を用いて要素に名前をつけることができます..を用いてアクセスできます.(; )を用いて, 各要素に展開することができます[]で囲まれた,区切りの要素の集まりです.; 区切りは行列の中での改行を表します. 結果的にこの場合は縦ベクトルとして扱われます.;区切りの行ベクトルを[]で囲むことで作成できます.;の代わりに改行を入れることもできます.レンジ
start:step:stop でレンジを作成できます.start から stop まで step ずつ増加する数列を生成します.range(start, length = n, stop = end) で n 個の start から end までの数列を生成できます.Juliaにおけるレンジはベクトルではなく, イテレータです. データとしては, レンジはベクトルではなく, レンジの始点, 終点, ステップの情報を持っているだけです. そのため, 生成の際のメモリは節約できる一方, ベクトルの様に要素を参照しようとすると計算コストがかかります.
StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}
collect() 関数を用いることで, レンジをベクトルに変換することができます.
[ ]の中でforループを用いてベクトルや行列を生成する方法です.forループを1つ, 2次元の場合はforループを,で区切って2つ用います..を関数名の後につけることで各要素に適用することができます..* は要素ごとの積を計算します.* は行列の積を計算します. この例では縦ベクトルと縦ベクトルの積は定義できないため, エラーが発生します.'を用いて転置を行った後に行列の積を計算します.Plots.jlの使い方Plots.jlは, Juliaで図を描画するためのパッケージです. そのバックエンドとして以下の様なパッケージを統一的な文法で扱うことができます.
GR: デフォルトPlotly: JavaScriptを利用したインタラクティブなプロットPyPlot: Pythonのmatplotlibを利用PGFPlotsX: LaTeXのpgfplotsを利用この授業では基本的にGRを使用します. また, Plots.jl以外のパッケージとして, 近年はMakieも人気を集めています.
以下の様なフィボナッチ数列をプロットしてみましょう.
\[ F_n = \begin{cases} 1 & n = 1, 2 \\ F_{n-1} + F_{n-2} & n = 3, 4, \dots \end{cases} \]
scatter: 散布図を描画します.\[ B_n = \begin{cases} \frac{1}{n} & n \text{ odd} \\ 1 - \frac{1}{n} & n \text{ even} \end{cases} \]
scatter) の第2引数に関数を指定することで, 第一引数の値に対する関数の値をプロットできますplot: 折れ線グラフを描画します.!を付けることで, 既存のプロットに追加描画します.scatterを追加する場合は, scatter!を使用します.LaTeXStringsパッケージを使用し, L"..."で囲みます.contour: 等高線プロットを描画します.layout=(1, 2): レイアウトを指定します. この場合, 1行2列のプロットを描画します.レポートや論文を書く際に, Juliaのコードを実行した結果を表として出力したい場合, SummaryTables.jlを用いることができます. 最も簡単な方法は simple_table() 関数を用いることですが, より複雑な票を作成することも可能です. また, 出力形式としては, HTML, LaTeX, DOCX, Typst などがサポートされています.