ブログ

【Julia入門】Juliaの基本事項② Juliaのプリミティブ型・任意精度演算

統計や機械学習に関するプログラミングではPythonRが用いられることが多いですが、近年Juliaも注目を集めています。そこで当シリーズではJuliaの基本構文からライブラリの用い方などについて取りまとめます。当記事ではJuliaのプリミティブ型と任意精度演算について取りまとめを行いました。

Julia入門
https://www.hello-statisticians.com/julia

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

プリミティブ型

プリミティブ型

Juliaの標準のプリミティブ型は下記があります。

Int8 UInt8Int16UInt16Int32UInt32Int64
UInt64 Int128UInt128BoolFloat16Float32Float64

基本的な理解にあたってはIntが符号付き整数型、UIntが符号なし整数型、Floatが浮動小数点型を表し、それぞれ続く数字がビット数を表すと抑えておくと良いです。

typeof関数

Juliaの全ての値には型が存在し、下記のようにtypeof関数を用いることで型の確認を行うことができます。

println(typeof(1))
println(typeof(0.5))

・実行結果

Int64
Float64

数値は基本的に上記のように整数を表すInt型や浮動小数を表すFloat型を元に表されますが、truefalseのような値は下記で確認できるようにBool型を元に表されます。

println(typeof(true))
println(typeof(false))

・実行結果

Bool
Bool

プレフィックス・サフィックス・任意精度演算

プレフィックス

サフィックス

任意精度演算

整数は基本的にInt8型〜Int128型で表されますが、下記で確認できるように桁の大きな場合はBigInt型を用いて表されます。

x1 = 12345678901234567890123456789
x2 = 12345678901234567890123456789012345
x3 = 1234567890123456789012345678901234567890

println(typeof(x1))
println(typeof(x2))
println(typeof(x3))

・実行結果

Int128
Int128
BigInt

参考

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

【Julia入門】Juliaの基本事項① Juliaにおける変数の使い方

統計や機械学習に関するプログラミングではPythonRが用いられることが多いですが、近年Juliaも注目を集めています。そこで当シリーズではJuliaの基本構文からライブラリの用い方などについて取りまとめます。当記事ではJuliaにおける変数の使い方について取りまとめを行いました。

Julia入門
https://www.hello-statisticians.com/julia

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

基本事項

print・println

Juliaの出力にあたってよく用いるのがprintprintln文です。どちらも出力を制御しますが、printが改行を含まないのに対し、printlnが改行を含むことに注意が必要です。下記のサンプルを実行すると理解しやすいです。

print("Hello World 1.")
println("Hello World 2.")
print("Hello World 3.")

・実行結果

Hello World 1.Hello World 2.
Hello World 3.

上記で得られるようにprintが改行を含まないのに対し、printlnが改行を含むことを抑えておくと良いです。

変数の数値の代入

変数への数値の代入にあたってはPythonなど多くの言語で用いられるように=を用いることで代入を行うことができます。

x = 1
y = 2.0

println(x)
println(y)

・実行結果

1
2.0

上記ではxには整数、yには小数を代入しましたが、それぞれ出力でも区別されていることも抑えておくと良いです。

Juliaの変数と数式

Juliaにおける乗算・累乗

Juliaでは変数の前に数値をつけると暗黙に掛け算が実行されます。たとえば$x=1$のとき$2x+1$は下記のように出力できます。

x = 1
println(2x+1)

・実行結果

3

上記では$2x+1$を計算するにあたって、2*xのように演算子を用いなくとも計算が行われたことに着目しておくと良いです。

また、累乗は下記のように^を用いて実行することができます。

x = 1
println(2(x-3)^2 - 3(x-2))

・実行結果

11

乗算と累乗についてはTeXの式表記に対応していることも合わせて抑えておくと良いかもしれません。

Juliaにおける三角関数

Juliaを用いて三角関数を表す場合、piを用いることで円周率の$\pi = 3.14 \cdots$を表すことができることを抑えておくと良いです。

theta = pi/4
println(theta)

・実行結果

0.7853981633974483

また、三角関数のcossinなどもそのまま用いることができることも抑えておくと良いと思います。

theta = pi/6
println(cos(theta))
println(sin(theta))

・実行結果

0.8660254037844387
0.49999999999999994

参考

Julia 1.8 Documentation
https://docs.julialang.org/en/v1/

Ch.3 「代表的な確率分布」の章末問題の解答例 〜現代数理統計学の基礎(共立出版)〜

当記事は「現代数理統計学の基礎(共立出版)」の読解サポートにあたってChapter.3の「代表的な確率分布」の章末問題の解説について行います。
基本的には書籍の購入者向けの解説なので、まだ入手されていない方は購入の上ご確認ください。また、解説はあくまでサイト運営者が独自に作成したものであり、書籍の公式ページではないことにご注意ください。

・解答まとめ
https://www.hello-statisticians.com/answer_textbook_math_stat#basic

章末の演習問題について

問題3.1の解答例

問題3.2の解答例

問題3.3の解答例

問題3.4の解答例

問題3.5の解答例

問題3.6の解答例

問題3.7の解答例

問題3.8の解答例

問題3.9の解答例

問題3.10の解答例

問題3.11の解答例

$$
\large
\begin{align}
f(x|\alpha,\beta) = \frac{\beta \alpha^{\beta}}{x^{\beta+1}}, \quad \alpha<x, \, \alpha>0, \, \beta>0
\end{align}
$$

$\beta > 1$のとき$E[X]$は下記のように計算することができる。
$$
\large
\begin{align}
E[X] &= \int_{\alpha}^{\infty} x f(x) dx \\
&= \int_{\alpha}^{\infty} x \cdot \frac{\beta \alpha^{\beta}}{x^{\beta+1}} dx \\
&= \int_{\alpha}^{\infty} \frac{\beta \alpha^{\beta}}{x^{\beta}} dx \\
&= \left[ -\frac{\beta \alpha^{\beta}}{\beta-1} \cdot \frac{1}{x^{\beta-1}} \right]_{\alpha}^{\infty} \\
&= \frac{\beta \alpha^{\beta}}{\beta-1} \cdot \frac{1}{\alpha^{\beta-1}} \\
&= \frac{\beta \alpha}{\beta-1}
\end{align}
$$

同様に$\beta > 2$のとき$E[X^2]$は下記のように計算できる。
$$
\large
\begin{align}
E[X^2] &= \int_{\alpha}^{\infty} x^2 f(x) dx \\
&= \int_{\alpha}^{\infty} \frac{\beta \alpha^{\beta}}{x^{\beta-1}} dx \\
&= \left[ -\frac{\beta \alpha^{\beta}}{\beta-2} \cdot \frac{1}{x^{\beta-2}} \right]_{\alpha}^{\infty} \\
&= \frac{\beta \alpha^{\beta}}{\beta-2} \cdot \frac{1}{\alpha^{\beta-2}} \\
&= \frac{\beta \alpha^2}{\beta-2}
\end{align}
$$

よって分散$V[X]$は$V[X]=E[X^2]-E[X]^2$を用いて下記のように得られる。
$$
\large
\begin{align}
V[X] &= E[X^2] – E[X]^2 \\
&= \frac{\beta \alpha^2}{\beta-2} – \frac{\beta^2 \alpha^2}{(\beta-1)^2} \\
&= \frac{\beta \alpha^2}{(\beta-1)^2(\beta-2)} [ (\beta-1)^2 – \beta(\beta-2) ] \\
&= \frac{\beta \alpha^2}{(\beta-1)^2(\beta-2)} [ (\beta^2 – 2\beta + 1) – (\beta^2 – 2\beta) ] \\
&= \frac{\beta \alpha^2}{(\beta-1)^2(\beta-2)}
\end{align}
$$

問題3.12の解答例

問題3.13の解答例

問題3.14の解答例

問題3.15の解答例

問題3.16の解答例

問題3.17の解答例

問題3.18の解答例

問題3.19の解答例

問題3.20の解答例

問題3.21の解答例

問題3.22の解答例

まとめ

制約付き問題の最適化とKKT(Karush Kuhn Tucker)条件

カルシュ・キューン・タッカー(KKT; Karush Kuhn Tucker)条件は制約付き問題の最適化の際に用いられる$1$次の必要条件で、様々な問題の最適化にあたって用いられます。当記事ではKKT条件など、制約付き問題の最適化における重要なトピックについて取りまとめを行いました。
「新版 数理計画入門(朝倉書店)」の$4.7$節の「制約付き問題の最適性条件」などの内容を参考に作成を行いました。

・用語/公式解説
https://www.hello-statisticians.com/explain-terms

制約付き問題とKKT条件

問題設定

目的関数$f(\mathbf{x})$の制約付き最適化は下記のように表すことができる。
$$
\large
\begin{align}
\mathrm{Objective} : \quad & f(\mathbf{x}) \, \rightarrow \, \mathrm{Minimize} \\
\mathrm{Constraint} : \quad & c_i(\mathbf{x}) = 0 \quad (i=1, 2, \cdots ,l) \\
& c_i(\mathbf{x}) \leq 0 \quad (i=l+1, l+2, \cdots ,m)
\end{align}
$$

上記は一般的な表記である一方で抽象的なので、以下では下記の具体例を元に確認を行う。
$$
\large
\begin{align}
\mathrm{Objective} : \quad & f(\mathbf{x}) = (x_1-1)^{2} + (x_2-2)^2 \, \rightarrow \, \mathrm{Minimize} \\
\mathrm{Constraint} : \quad & c_1(\mathbf{x}) = x_1^2+x_2^2-2 \leq 0 \\
& c_2(\mathbf{x}) = -x_1+x_2 \leq 0 \\
& c_3(\mathbf{x}) = -x_2 \leq 0
\end{align}
$$

図に基づく最適解の導出と有効制約

最適解の導出にあたってまず制約条件の$c_1(\mathbf{x})$〜$c_3(\mathbf{x})$の取る領域の図示を行う。$x_1^2+x_2^2 \leq 2, x_2 \leq x_1, x_2 \geq 0$が成立する領域は下記を実行することで図示できる。

import numpy as np
import matplotlib.pyplot as plt

r = np.sqrt(2)
theta = np.linspace(0,2*np.pi,100)

x = np.arange(-2., 2.01, 0.01)
x_r1 = np.linspace(0., 1., 100)
x_r2 = np.linspace(1., np.sqrt(2), 100)

plt.plot(r*np.cos(theta), r*np.sin(theta), "g--")
plt.plot(x, 0*x, "g--")
plt.plot(x, x, "g--")

plt.fill_between(x_r1, x_r1*0, x_r1, color="green")
plt.fill_between(x_r2, x_r2*0, np.sqrt(2-x_r2**2+0.0001), color="green")
plt.show()

・実行結果

$\sqrt{2-x_1^2}$の値が計算誤差により負の値になる場合があるのでnp.sqrt(2-x_r2**2+0.0001)のように0.0001を加算を行なった。さらに下記を実行することで制約条件の領域に目的関数$f(\mathbf{x}) = (x_1-1)^{2} + (x_2-2)^2$を描画できる。

import numpy as np
import matplotlib.pyplot as plt

r = np.sqrt(2)
theta = np.linspace(0,2*np.pi,100)

x_r1 = np.linspace(0., 1., 100)
x_r2 = np.linspace(1., np.sqrt(2), 100)

x_, y_ = np.arange(-2., 2.01, 0.01), np.arange(-1., 3.01, 0.01)
x, y = np.meshgrid(x_,y_)
z = (x-1)**2 + (y-2)**2

levs = np.arange(0.5,3.5,0.5)**2

plt.plot(r*np.cos(theta), r*np.sin(theta), "k--")

plt.fill_between(x_r1, x_r1*0, x_r1, color="green")
plt.fill_between(x_r2, x_r2*0, np.sqrt(2-x_r2**2+0.0001), color="green")
plt.contour(x,y,z,levels=levs,cmap="viridis")

plt.show()

・実行結果

上図の緑の領域の中で目的関数の等高線が中心の紫に近い$(x_1,x_2)=(1,1)$が最適解である。また、最適解の$(1,1)$で等号が成立する制約条件を有効制約というが、この例では$c_1(\mathbf{x}) = x_1^2+x_2^2-2 \leq 0$と$c_2(\mathbf{x}) = -x_1+x_2 \leq 0$が対応する。

KKT条件

制約付き最適化問題の最適解では基本的に下記で表すように目的関数と有効制約の勾配ベクトルが釣り合うような状態となる。

import numpy as np
import matplotlib.pyplot as plt

r = np.sqrt(2)
theta = np.linspace(0,2*np.pi,100)

x_r1 = np.linspace(0., 1., 100)
x_r2 = np.linspace(1., np.sqrt(2), 100)

x_, y_ = np.arange(-2., 2.01, 0.01), np.arange(-1., 3.01, 0.01)
x, y = np.meshgrid(x_,y_)
z = (x-1)**2 + (y-2)**2

levs = np.arange(0.5,3.5,0.5)**2

plt.plot(r*np.cos(theta), r*np.sin(theta), "k--")

plt.fill_between(x_r1, x_r1*0, x_r1, color="green")
plt.fill_between(x_r2, x_r2*0, np.sqrt(2-x_r2**2+0.0001), color="green")
plt.contour(x,y,z,levels=levs,cmap="viridis")

plt.quiver(1, 1, -1, 1, color="green", angles='xy', scale_units='xy', scale=1)
plt.quiver(1, 1, 1, 1, color="green", angles='xy', scale_units='xy', scale=1)
plt.quiver(1, 1, 0, -2, color="purple", angles='xy', scale_units='xy', scale=1)

plt.show()

・実行結果

上図では目的関数の勾配ベクトルを紫、有効制約の勾配ベクトルを緑で表した。このような勾配ベクトルの釣り合いを元にカルシュ・キューン・タッカー(KKT; Karush Kuhn Tucker)条件が定式化される。局所最適解$x^{*}$に関してKKT条件は一般的には下記の数式で表される。
$$
\large
\begin{align}
& \nabla f(\mathbf{x}^{*}) + \sum_{i=1}^{n} \lambda_i^{*} \nabla c_i(\mathbf{x}^{*}) = \mathbf{0} \quad (1) \\
& c_i(\mathbf{x}^{*}) = 0 \qquad (i=1, \cdots, l) \\
& c_i(\mathbf{x}^{*}) \leq 0, \lambda_i^{*} \geq 0 \qquad (i=l+1, \cdots, m) \\
& c_i(\mathbf{x}^{*}) < 0, \lambda_i^{*} = 0 \qquad (i=m+1, \cdots, n)
\end{align}
$$

当項で取り扱った図におけるベクトルの釣り合いは上記の$(1)$式に$x_1=1,x_2=1$を代入することで下記のように$\displaystyle \lambda_1=\frac{1}{2}, \lambda_2=1$を得た。
$$
\large
\begin{align}
\nabla f(\mathbf{x}) + \lambda_1 \nabla c_1(\mathbf{x}) + \lambda_2 \nabla c_2(\mathbf{x}) &= \mathbf{0} \\
\nabla [(x_1-1)^2+(x_2-2)^2] + \lambda_1 \nabla (x_1^2+x_2^2-2) + \lambda_2 \nabla (-x_1+x_2) &= \mathbf{0} \\
\left(\begin{array}{c} 2(x_1-1) \\ 2(x_2-2) \end{array} \right) + \lambda_1 \left(\begin{array}{c} 2x_1 \\ 2x_2 \end{array} \right) + \lambda_2 \left(\begin{array}{c} -1 \\ 1 \end{array} \right) &= \left(\begin{array}{c} 0 \\ 0 \end{array} \right) \\
\left(\begin{array}{c} 2(x_1-1) + 2\lambda_1 – \lambda_2 \\ 2(x_2-2) + 2\lambda_1 + \lambda_2 \end{array} \right) &= \left(\begin{array}{c} 0 \\ 0 \end{array} \right) \\
\left(\begin{array}{c} 2 \cdot (1-1) + 2\lambda_1 – \lambda_2 \\ 2 \cdot (1-2) + 2\lambda_1 + \lambda_2 \end{array} \right) &= \left(\begin{array}{c} 0 \\ 0 \end{array} \right) \\
\left(\begin{array}{c} 2\lambda_1 – \lambda_2 \\ 2\lambda_1 + \lambda_2 \end{array} \right) &= \left(\begin{array}{c} 0 \\ 2 \end{array} \right) \\
\lambda_1=\frac{1}{2}, \lambda_2=1 &
\end{align}
$$

当項で取り扱ったKKT条件は制約付き最適化における$1$次の必要条件であり、十分条件ではないことに注意が必要である。十分性については次節で確認を行う。

制約付き問題の最適解の十分条件

凸計画問題とKKT条件

① 目的関数が凸関数
② 等式制約関数$c_i$が$1$次関数
③ 不等式制約関数$c_i$が凸関数

上記が成立する問題を『凸計画問題』というが、凸計画問題でKKT条件が成立する場合の$\mathbf{x}^{*}$はその問題の『大域的最適解』であることが知られている。

ヘッセ行列と$2$次の十分条件

$$
\large
\begin{align}
\mathrm{Objective} : \quad & f(\mathbf{x}) \, \rightarrow \, \mathrm{Minimize} \\
\mathrm{Constraint} : \quad & c_i(\mathbf{x}) = 0 \quad (i=1, 2, \cdots ,l) \\
& c_i(\mathbf{x}) \leq 0 \quad (i=l+1, l+2, \cdots ,m)
\end{align}
$$

上記のように定義した制約付き最適化問題に対し、ラグランジュ関数$L(\mathbf{x},\boldsymbol{\lambda})$を下記のように定義する。
$$
\large
\begin{align}
L(\mathbf{x},\boldsymbol{\lambda}) = f(\mathbf{x}) + \sum_{i=1}^{m} \lambda_{i} c_{i}(\mathbf{x})
\end{align}
$$

上記のラグランジュ関数$L$に対し、変数$\mathbf{x}$に関する勾配ベクトル$\nabla_{x} L(\mathbf{x},\boldsymbol{\lambda})$とヘッセ行列$\nabla_{x}^{2} L(\mathbf{x},\boldsymbol{\lambda})$を下記のように定義する。
$$
\large
\begin{align}
\nabla_{x} L(\mathbf{x},\boldsymbol{\lambda}) &= \nabla f(\mathbf{x}) + \sum_{i=1}^{m} \lambda_{i} \nabla c_{i}(\mathbf{x}) \\
\nabla_{x}^{2} L(\mathbf{x},\boldsymbol{\lambda}) &= \nabla^{2} f(\mathbf{x}) + \sum_{i=1}^{m} \lambda_{i} \nabla^{2} c_{i}(\mathbf{x})
\end{align}
$$

ここで全ての有効制約の勾配ベクトルと直交するベクトルの集合を$M^{*}$とおく。このとき任意のベクトル$\mathbf{y} \in M^{*}$に対して下記が成立することが最適性の$2$次の必要条件である。
$$
\large
\begin{align}
\mathbf{y}^{\mathrm{T}} \nabla_{x}^{2} L(\mathbf{x}^{*},\boldsymbol{\lambda}^{*}) \mathbf{y} \geq 0
\end{align}
$$

同様に任意のベクトル$\mathbf{y} \in M^{*}$に対して下記が成立することが最適性の$2$次の十分条件である。
$$
\large
\begin{align}
\mathbf{y}^{\mathrm{T}} \nabla_{x}^{2} L(\mathbf{x}^{*},\boldsymbol{\lambda}^{*}) \mathbf{y} > 0
\end{align}
$$

$2$次の十分条件の具体例

$$
\large
\begin{align}
\mathrm{Objective} : \quad & f(\mathbf{x}) = -2 x_1 x_2^2 \, \rightarrow \, \mathrm{Minimize} \\
\mathrm{Constraint} : \quad & c_1(\mathbf{x}) = \frac{1}{2} x_1^2 + x_2^2 – \frac{3}{2} \leq 0 \\
& c_2(\mathbf{x}) = -x_1 \leq 0 \\
& c_3(\mathbf{x}) = -x_2 \leq 0
\end{align}
$$

目的関数と制約条件は下記を実行することで図示することができる。

import numpy as np
import matplotlib.pyplot as plt

theta = np.linspace(0,2*np.pi,100)
x_r = np.linspace(0., np.sqrt(3), 100)

x_, y_ = np.arange(-3., 3.01, 0.01), np.arange(-3., 3.01, 0.01)
x, y = np.meshgrid(x_,y_)

z = -2*x*y**2

levs = np.arange(-6,6,2)

plt.plot(np.sqrt(3)*np.cos(theta), np.sqrt(1.5)*np.sin(theta), "k--")
plt.fill_between(x_r, x_r*0, np.sqrt(1.5-0.5*x_r**2), color="green")
plt.contour(x,y,z,levels=levs,cmap="viridis")

plt.colorbar()
plt.show()

・実行結果

上図より、$x_1=1, x_2=1$のとき目的関数が最小値$f(\mathbf{x}) = -2 \cdot 1 \cdot 1^2 = -2$を取ることや有効制約が$c_1(\mathbf{x})$であることが確認できる。

ここで目的関数$f(\mathbf{x})$の勾配ベクトル$\nabla f(\mathbf{x})$や有効制約$c_1(\mathbf{x})$の勾配ベクトル$\nabla c_1(\mathbf{x})$は下記のように表せる。
$$
\large
\begin{align}
\nabla f(\mathbf{x}) &= \left(\begin{array}{c} -2x_2^2 \\ -4x_1x_2 \end{array} \right) \\
\nabla c_1(\mathbf{x}) &= \left(\begin{array}{c} x_1 \\ 2x_2 \end{array} \right)
\end{align}
$$

上記に$\displaystyle \mathbf{x} = \left(\begin{array}{c} x_1^{*} \\ x_2^{*} \end{array} \right) = \left(\begin{array}{c} 1 \\ 1 \end{array} \right)$を代入すると下記が得られる。
$$
\large
\begin{align}
\nabla f(\mathbf{x}^{*}) &= \left(\begin{array}{c} -2 \\ -4 \end{array} \right) \\
\nabla c_1(\mathbf{x}^{*}) &= \left(\begin{array}{c} 1 \\ 2 \end{array} \right)
\end{align}
$$

上記を元に$\nabla f(\mathbf{x}^{*})$と$\lambda_1 \nabla c_1(\mathbf{x}^{*}) = 2 \nabla c_1(\mathbf{x}^{*})$は下記のように図示できる。

import numpy as np
import matplotlib.pyplot as plt

theta = np.linspace(0,2*np.pi,100)
x_r = np.linspace(0., np.sqrt(3), 100)

x_, y_ = np.arange(-3.5, 3.51, 0.01), np.arange(-3., 5.01, 0.01)
x, y = np.meshgrid(x_,y_)

z = -2*x*y**2

levs = np.arange(-6,6,2)

plt.plot(np.sqrt(3)*np.cos(theta), np.sqrt(1.5)*np.sin(theta), "k--")
plt.fill_between(x_r, x_r*0, np.sqrt(1.5-0.5*x_r**2), color="lightgreen")
plt.contour(x,y,z,levels=levs,cmap="viridis")

plt.quiver(1, 1, -2, -4, color="purple", angles='xy', scale_units='xy', scale=1)
plt.quiver(1, 1, 2, 4, color="green", angles='xy', scale_units='xy', scale=1)

plt.show()

・実行結果

また、ヘッセ行列$\nabla^{2} f(\mathbf{x})$と$\nabla^{2} c_1(\mathbf{x})$は下記のように得られる。
$$
\large
\begin{align}
\nabla^{2} f(\mathbf{x}) &= \left(\begin{array}{cc} 0 & -4x_2 \\ -4x_2 & -4x_1 \end{array} \right) \\
\nabla^{2} c_1(\mathbf{x}) &= \left(\begin{array}{cc} 1 & 0 \\ 0 & 2 \end{array} \right)
\end{align}
$$

上記より$\mathbf{x}^{*}$におけるラグランジュ関数のヘッセ行列$\nabla_{x}^{2} L(\mathbf{x}^{*},\boldsymbol{\lambda}^{*})$は下記のように得られる。
$$ \large \begin{align} \nabla_{x}^{2} L(\mathbf{x}^{*},\boldsymbol{\lambda}^{*}) &= \nabla^{2} f(\mathbf{x}^{*}) + \lambda_{1}^{*} \nabla^{2} c_1(\mathbf{x}^{*}) \\
&= \left(\begin{array}{cc} 0 & -4 \cdot 1 \\ -4 \cdot 1 & -4 \cdot 1 \end{array} \right) + 2 \left(\begin{array}{cc} 1 & 0 \\ 0 & 2 \end{array} \right) \\
&= \left(\begin{array}{cc} 2 & -4 \\ -4 & 0 \end{array} \right)
\end{align}
$$

ここで最適解$\mathbf{x}^{*}$における有効制約の勾配ベクトル$\displaystyle \nabla c_1(\mathbf{x}^{*}) = \left(\begin{array}{c} 1 \\ 2 \end{array} \right)$に垂直なベクトル$\mathbf{y}$は下記のように表せる。
$$
\large
\begin{align}
\mathbf{y} = \left(\begin{array}{c} 2t \\ -t \end{array} \right), \quad t \in \mathbb{R} \quad \mathrm{and} \quad t \neq 0
\end{align}
$$

上記に対し、$\mathbf{y}^{\mathrm{T}} \nabla_{x}^{2} L(\mathbf{x}^{*},\boldsymbol{\lambda}^{*}) \mathbf{y}$は下記のように表せる。
$$
\large
\begin{align}
\mathbf{y}^{\mathrm{T}} \nabla_{x}^{2} L(\mathbf{x}^{*},\boldsymbol{\lambda}^{*}) \mathbf{y} &= \left(\begin{array}{cc} 2t & -t \end{array} \right) \left(\begin{array}{cc} 2 & -4 \\ -4 & 0 \end{array} \right) \left(\begin{array}{c} 2t \\ -t \end{array} \right) \\
&= \left(\begin{array}{cc} 8t & -8t \end{array} \right) \left(\begin{array}{c} 2t \\ -t \end{array} \right) \\
&= 24t^2 > 0
\end{align}
$$

上記より$\mathbf{y}^{\mathrm{T}} \nabla_{x}^{2} L(\mathbf{x}^{*},\boldsymbol{\lambda}^{*}) \mathbf{y} > 0$が成立するので$2$次の十分条件が成立することが確認できる。

数学検定2級 解説 〜公式問題集 解説&解答 Ch.5「ベクトル」〜

数学検定$2$級は数ⅡBまで相当の数学の基本トピックに関して取り扱った検定であり、統計学に必要な数学を身につける際の指標に役に立ちます。当記事では「日本数学検定協会 監修」の「数学検定問題集 $2$級」より、第$5$章の「ベクトル」の解説と演習問題の解答例などを取り扱いました。

・数学検定$2$級まとめ
https://www.hello-statisticians.com/math_certificate_2

本章のまとめ

内積

位置ベクトル

演習

計算技能問題

問題.$1$

$[1]$
下記のように計算できる。
$$
\large
\begin{align}
|4\vec{a} + 3\vec{b}| &= \sqrt{(4 \cdot 1 + 3 \cdot (-3))^{2} + (4 \cdot (-2) + 3 \cdot 1)^{2}} \\
&= \sqrt{(-5)^2 + (-5)^2} \\
&= 5 \sqrt{2}
\end{align}
$$

$[2]$
なす角を$\theta$とおくと内積の定義より下記が成立する。
$$
\large
\begin{align}
\vec{a} \cdot \vec{b} &= |\vec{a}| |\vec{b}| \cos{\theta} \\
\left(\begin{array}{c} 1 \\ -2 \end{array} \right) \cdot \left(\begin{array}{c} -3 \\ 1 \end{array} \right) &= \sqrt{1^2+(-2)^2} \sqrt{(-3)^2+1^2} \cos{\theta} \\
-3 – 2 &= \sqrt{5} \cdot \sqrt{10} \cdot \cos{\theta} \\
-5 &= 5 \sqrt{2} \cos{\theta} \\
\cos{\theta} &= – \frac{1}{\sqrt{2}}
\end{align}
$$

上記より$\theta=135^{\circ}$である。

問題.$2$

$$
\large
\begin{align}
\vec{a} = \left(\begin{array}{c} 6 \\ -1 \end{array} \right), \quad \vec{b} = \left(\begin{array}{c} -3 \\ 2 \end{array} \right), \quad \vec{c} = \left(\begin{array}{c} 1 \\ -1 \end{array} \right)
\end{align}
$$

$[1]$
$\vec{a}+t\vec{b}$と$\vec{c}$が平行であるとき下記が成立する。
$$
\large
\begin{align}
\vec{a} + t\vec{b} &= k \vec{c} \\
\left(\begin{array}{c} 6 \\ -1 \end{array} \right) + t \left(\begin{array}{c} -3 \\ 2 \end{array} \right) &= k \left(\begin{array}{c} 1 \\ -1 \end{array} \right) \\
\left(\begin{array}{c} 6-3t \\ -1+2t \end{array} \right) &= \left(\begin{array}{c} k \\ -k \end{array} \right) \\
(6-3t) + (-1+2t) &= 0 \\
t &= 5
\end{align}
$$

$[2]$
$\vec{a}+t\vec{b}$と$\vec{c}$が垂直であるとき下記が成立する。
$$
\large
\begin{align}
(\vec{a}+t\vec{b}) \cdot \vec{c} &= 0 \\
\left(\begin{array}{c} 6-3t \\ -1+2t \end{array} \right) \cdot \left(\begin{array}{c} 1 \\ -1 \end{array} \right) &= 0 \\
(6-3t) – (-1+2t) &= 0 \\
5t &= 7 \\
t &= \frac{7}{5}
\end{align}
$$

問題.$3$

$[1]$
下記のように計算を行うことができる。
$$
\large
\begin{align}
|\vec{a}-\vec{b}| &= \sqrt{|\vec{a}-\vec{b}|^{2}} \\
&= \sqrt{|\vec{a}|^{2} + |\vec{b}|^{2} – 2 \vec{a} \cdot \vec{b}} \\
&= \sqrt{1^{2} + 9^{2} – 2 \cdot 5} \\
&= \sqrt{72} \\
&= 6 \sqrt{2}
\end{align}
$$

$[2]$
下記のように計算を行うことができる。
$$
\large
\begin{align}
|2\vec{a} – 3\vec{b}| &= \sqrt{|2 \vec{a} – 3 \vec{b}|^{2}} \\
&= \sqrt{4|\vec{a}|^{2} + 9|\vec{b}|^{2} – 12 \vec{a} \cdot \vec{b}} \\
&= \sqrt{4 \cdot 1^{2} + 9 \cdot 9^{2} – 12 \cdot 5} \\
&= \sqrt{4 + 729 – 60} \\
&= \sqrt{673}
\end{align}
$$

問題.$4$

$\overrightarrow{DC} = \overrightarrow{AB}$であるので下記が成立する。
$$
\large
\begin{align}
\overrightarrow{DC} &= \overrightarrow{AB} \\
\left(\begin{array}{c} -3 \\ 1 \end{array} \right) – \left(\begin{array}{c} x \\ y \end{array} \right) &= \left(\begin{array}{c} 2 \\ 3 \end{array} \right) – \left(\begin{array}{c} 1 \\ -5 \end{array} \right) \\
\left(\begin{array}{c} -3-x \\ 1-y \end{array} \right) &= \left(\begin{array}{c} 1 \\ 8 \end{array} \right) \\
\left(\begin{array}{c} x \\ y \end{array} \right) &= \left(\begin{array}{c} -3-1 \\ 1-8 \end{array} \right) \\
&= \left(\begin{array}{c} -4 \\ -7 \end{array} \right)
\end{align}
$$

問題.$5$

$[1]$
$AC:BC=OA:OB$が成立より下記が得られる。
$$
\large
\begin{align}
AC:BC &= OA:OB \\
&= \sqrt{2^2+1^2} : \sqrt{(-3)^2+6^2} \\
&= \sqrt{5} : \sqrt{45} \\
&= \sqrt{5} : 3 \sqrt{5} \\
&= 1 : 3
\end{align}
$$

上記より$\overrightarrow{OC}$は下記のように表せる。
$$
\large
\begin{align}
\overrightarrow{OC} &= \overrightarrow{OA} + \frac{1}{4} \overrightarrow{AB} \\
&= \left(\begin{array}{c} 2 \\ 1 \end{array} \right) + \frac{1}{4} \left(\begin{array}{c} -3-2 \\ 6-1 \end{array} \right) \\
&= \left(\begin{array}{c} 2 \\ 1 \end{array} \right) + \frac{1}{4} \left(\begin{array}{c} -5 \\ 5 \end{array} \right) \\
&= \frac{1}{4} \left(\begin{array}{c} 8-5 \\ 4+5 \end{array} \right) \\
&= \frac{1}{4} \left(\begin{array}{c} 3 \\ 9 \end{array} \right)
\end{align}
$$

$[2]$
$\overrightarrow{OC}$と同じ向きの単位ベクトルを$\vec{e}$とおくと、$\vec{e}$は下記のように得られる。
$$
\large
\begin{align}
\vec{e} &= \frac{\overrightarrow{OC}}{|\overrightarrow{OC}|} \\
&= \frac{1}{4} \left(\begin{array}{c} 3 \\ 9 \end{array} \right) \cdot \frac{1}{\sqrt{3^2+9^2}/4} \\
&= \frac{1}{4} \left(\begin{array}{c} 3 \\ 9 \end{array} \right) \cdot \frac{4}{3 \sqrt{10}} \\
&= \frac{1}{3 \sqrt{10}} \left(\begin{array}{c} 3 \\ 9 \end{array} \right) \\
&= \frac{1}{\sqrt{10}} \left(\begin{array}{c} 1 \\ 3 \end{array} \right)
\end{align}
$$

問題.$6$

$[1]$
$$
\large
\begin{align}
\vec{a} = \left(\begin{array}{c} 1 \\ 0 \\ -1 \end{array} \right), \quad \vec{b} = \left(\begin{array}{c} 2 \\ -2 \\ -1 \end{array} \right)
\end{align}
$$

$\vec{a}, \vec{b}$のなす角を$\theta$とおくと下記が成立する。
$$
\large
\begin{align}
\cos{\theta} &= \frac{\vec{a} \cdot \vec{b}}{|\vec{a}||\vec{b}|} \\
&= \frac{2+1}{\sqrt{2}\sqrt{9}} \\
&= \frac{1}{\sqrt{2}}
\end{align}
$$

上記より$\theta=45^{\circ}$が成り立つ。

$[2]$
$$
\large
\begin{align}
\vec{a} = \left(\begin{array}{c} -1 \\ 2 \\ 4 \end{array} \right), \quad \vec{b} = \left(\begin{array}{c} 2 \\ -3 \\ 2 \end{array} \right)
\end{align}
$$

$\vec{a}, \vec{b}$のなす角を$\theta$とおくと下記が成立する。
$$
\large
\begin{align}
\cos{\theta} &= \frac{\vec{a} \cdot \vec{b}}{|\vec{a}||\vec{b}|} \\
&= \frac{-2-6+8}{|\vec{a}||\vec{b}|} \\
&= 0
\end{align}
$$

上記より$\theta=90^{\circ}$が成り立つ。

数理技能問題

問題.$1$

問題.$2$

内積について成立する式などに基づいて下記のような変形を行うことで示すことができる。
$$
\large
\begin{align}
|m\vec{a} + n\vec{b}|^{2} &= (m\vec{a} + n\vec{b}) \cdot m\vec{a} + n\vec{b} \\
&= m^2 \vec{a} \cdot \vec{a} + mn \vec{a} \cdot \vec{b} + mn \vec{b} \cdot \vec{a} + n^{2} \vec{b} \cdot \vec{b} \\
&= m^2 |\vec{a}|^{2} + 2mn(\vec{a} \cdot \vec{b}) + n^2 |\vec{b}|^{2}
\end{align}
$$

問題.$3$

$|\vec{a}+\vec{b}|=|\vec{a}-\vec{b}|$であるとき下記が成立する。
$$
\large
\begin{align}
|\vec{a}+\vec{b}| &= |\vec{a}-\vec{b}| \\
|\vec{a}+\vec{b}|^{2} &= |\vec{a}-\vec{b}|^{2} \\
|\vec{a}|^{2} + |\vec{b}|^{2} + 2 \vec{a} \cdot \vec{b} &= |\vec{a}|^{2} + |\vec{b}|^{2} – 2 \vec{a} \cdot \vec{b} \\
4 \vec{a} \cdot \vec{b} &= 0 \\
\vec{a} \cdot \vec{b} &= 0
\end{align}
$$

$|\vec{a}| \neq 0, \, |\vec{b}| \neq 0$でない場合に$\vec{a} \cdot \vec{b} = 0$であれば$\vec{a}$と$\vec{b}$は垂直である。

問題.$4$

$[1]$
$\vec{a} \cdot \vec{b}$は下記のような変形を行うことによって得られる。
$$
\large
\begin{align}
|\vec{a}-\vec{b}|^{2} &= (3\sqrt{5})^{2} \\
|\vec{a}|^{2} + |\vec{b}|^{2} – 2 \vec{a} \cdot \vec{b} &= 45 \\
2 \vec{a} \cdot \vec{b} &= 5^{2} + 2^{2} – 45 \\
2 \vec{a} \cdot \vec{b} &= -16 \\
\vec{a} \cdot \vec{b} &= -8
\end{align}
$$

$[1]$
$|\vec{a}+\vec{b}|$は下記のように得られる。
$$
\large
\begin{align}
|\vec{a}+\vec{b}| &= \sqrt{|\vec{a}+\vec{b}|^{2}} \\
&= \sqrt{|\vec{a}|^{2} + |\vec{b}|^{2} + 2 \vec{a} \cdot \vec{b}} \\
&= \sqrt{5^{2} + 2^{2} – 16} \\
&= \sqrt{25 + 4 – 16} \\
&= \sqrt{13}
\end{align}
$$

問題.$5$

平行四辺形$ABCD$について$\overrightarrow{AC}, \overrightarrow{BD}$は下記のように表すことができる。
$$
\large
\begin{align}
\overrightarrow{AC} &= \overrightarrow{AB} + \overrightarrow{BC} \\
\overrightarrow{BD} &= -\overrightarrow{AB} + \overrightarrow{BC}
\end{align}
$$

よって$AC^{2}+BD^{2}$は下記のように計算することができる。
$$
\large
\begin{align}
AC^{2} + BD^{2} &= |\overrightarrow{AC}|^{2} + |\overrightarrow{BD}|^{2} \\
&= |\overrightarrow{AB} + \overrightarrow{BC}|^{2} + |-\overrightarrow{AB} + \overrightarrow{BC}|^{2} \\
&= |\overrightarrow{AB}|^{2} + |\overrightarrow{BC}|^{2} + \cancel{2 \overrightarrow{AB} \cdot \overrightarrow{BC}} + |\overrightarrow{AB}|^{2} + |\overrightarrow{BC}|^{2} – \cancel{2 \overrightarrow{AB} \cdot \overrightarrow{BC}} \\
&= 2|\overrightarrow{AB}|^{2} + 2|\overrightarrow{BC}|^{2} \\
&= 2(AB^{2}+BC^{2})
\end{align}
$$

問題.$6$

$$
\large
\begin{align}
\vec{a} = \left(\begin{array}{c} 2 \\ -2 \\ 1 \end{array} \right), \quad \vec{b} = \left(\begin{array}{c} 2 \\ 3 \\ -4 \end{array} \right)
\end{align}
$$

上記の$\vec{a}, \vec{b}$の両方に垂直なベクトルを$\displaystyle \vec{e} = \left(\begin{array}{c} x \\ y \\ z \end{array} \right)$とおくと下記が成立する。
$$
\large
\begin{align}
\vec{a} \cdot \vec{e} &= 0 \\
\left(\begin{array}{c} 2 \\ -2 \\ 1 \end{array} \right) \cdot \left(\begin{array}{c} x \\ y \\ z \end{array} \right) &= 0 \\
2x – 2y + z &= 0 \quad (1) \\
\vec{b} \cdot \vec{e} &= 0 \\
\left(\begin{array}{c} 2 \\ 3 \\ -4 \end{array} \right) \cdot \left(\begin{array}{c} x \\ y \\ z \end{array} \right) &= 0 \\
2x + 3y + -4z &= 0 \quad (2)
\end{align}
$$

$(1)-(2)$より$-5y+5z=0$であり、$y=z$が成立する。また、$y=z$を$(1)$に代入することで$\displaystyle x=\frac{1}{2}$が得られる。ここで$|\vec{e}|=1$より$x^2+y^2+z^2=1$が成立するので、下記のように$z$が得られる。
$$
\large
\begin{align}
x^2 + y^2 + z^2 &= 1 \\
\frac{1}{4}z^2 + z^2 + z^{2} &= 1 \\
\frac{9}{4}z^{2} &= 1 \\
z^{2} &= \frac{4}{9} \\
z &= \pm \frac{2}{3}
\end{align}
$$

よって、$\vec{e}$は下記のように表せる。
$$
\large
\begin{align}
\vec{e} &= \pm \frac{1}{3} \left(\begin{array}{c} 1 \\ 2 \\ 2 \end{array} \right)
\end{align}
$$

np.meshgridとmatplotlib.pyplotを用いた2変数関数の描画

$2$変数関数の描画を手動で行う場合はなかなか難しいのでPythonのようなプログラム言語を用いる描画法を抑えておくと様々な所で役に立ちます。当記事ではnumpy.meshgridmatplotlib.pyplotのいくつかのメソッドを用いた2変数関数の描画について取り扱いました。

・Pythonまとめ
https://www.hello-statisticians.com/python_basic

np.meshgridを用いた格子点の作成

NumPymeshgridメソッドは下記のように実行することができます。

import numpy as np

x_, y_ = np.arange(-2,2.01,0.01), np.arange(-2,2.01,0.01)

x, y = np.meshgrid(x_, y_)

print(x)
print("===")
print(y)

・実行結果

[[-2.   -1.99 -1.98 ...  1.98  1.99  2.  ]
 [-2.   -1.99 -1.98 ...  1.98  1.99  2.  ]
 [-2.   -1.99 -1.98 ...  1.98  1.99  2.  ]
 ...
 [-2.   -1.99 -1.98 ...  1.98  1.99  2.  ]
 [-2.   -1.99 -1.98 ...  1.98  1.99  2.  ]
 [-2.   -1.99 -1.98 ...  1.98  1.99  2.  ]]
===
[[-2.   -2.   -2.   ... -2.   -2.   -2.  ]
 [-1.99 -1.99 -1.99 ... -1.99 -1.99 -1.99]
 [-1.98 -1.98 -1.98 ... -1.98 -1.98 -1.98]
 ...
 [ 1.98  1.98  1.98 ...  1.98  1.98  1.98]
 [ 1.99  1.99  1.99 ...  1.99  1.99  1.99]
 [ 2.    2.    2.   ...  2.    2.    2.  ]]

計算結果より$-2 \leq x \leq 2, \, -2 \leq y \leq 2$の領域の点を$0.01$刻みで表されたことが確認できます。数学ではそれぞれの点に$(x,y)$の$2$つの値を対応させて表すことが多いですが、np.meshgridではそれぞれの点における$x$と$y$の値を分けて表すことに注意が必要です。

matplotlib.pyplotを用いた描画

以下では$2$変数関数$f(x,y) = x^2 + y^2$の描画を行います。

plt.contour

pyplot.contourを下記のように用いることで$2$変数関数の等高線の描画を行うことができます。

import numpy as np
import matplotlib.pyplot as plt

x_, y_ = np.arange(-2,2.01,0.01), np.arange(-2,2.01,0.01)
x, y = np.meshgrid(x_, y_)
z = x**2 + y**2

plt.contour(x,y,z,cmap="viridis")
plt.colorbar()
plt.show()

・実行結果

plt.pcolormesh

pyplot.pcolormeshを下記のように用いることで$2$変数関数のカラーマップの描画を行うことができます。

import numpy as np
import matplotlib.pyplot as plt

x_, y_ = np.arange(-2,2.01,0.01), np.arange(-2,2.01,0.01)
x, y = np.meshgrid(x_, y_)
z = x**2 + y**2

plt.pcolormesh(x,y,z,cmap="viridis")
plt.colorbar()
plt.show()

・実行結果

ローゼンブロック関数(Rosenbrock function)の数式とPythonを用いたグラフ化

ローゼンブロック関数(Rosenbrock function)は主に$2$変数で表される関数で、シンプルな数式である一方で等高線が複雑になることから最適化アルゴリズムのベンチマークなどに用いられます。当記事ではローゼンブロック関数の数式とPythonを用いたグラフ化を取り扱いました。

・Pythonまとめ
https://www.hello-statisticians.com/python_basic

ローゼンブロック関数の数式と解釈

ローゼンブロック関数の数式

$2$変数$x,y$に関するローゼンブロック関数を$f(x,y)$とおくと、$f(x,y)$は下記のように表すことができます。
$$
\large
\begin{align}
f(x,y) = a(x-1)^{2} + b(y-x^2)^2
\end{align}
$$

上記の$a$と$b$はローゼンブロック関数のパラメータですが、一般的には$a=1, b=100$が用いられることが多いので、下記の式では数値の代入を行いました。
$$
\large
\begin{align}
f(x,y) = (x-1)^{2} + 100(y-x^2)^2
\end{align}
$$

ローゼンブロック関数の解釈

ローゼンブロック関数のグラフについては次節で取り扱いますが、Pythonなどを用いなくても数式から概形を予測することが可能です。式の解釈にあたっては$(y-x^2)^2$の係数が$100$のように大きい場合は$(y-x^2)^2$の項に着目すると良いです。

ここで$(y-x^2)^2$の項は、$y=x^2$が成立する際に$(y-x^2)^2=0$が成立するので、$y=x^2$の関数に沿ってローゼンブロック関数$f(x,y)$の値が小さいだろうと考察できます。

また、$y=x^2$が成立するとき$(x-1)^{2}$を最小にする$x$は$x=1$であるので、$(x,y)=(1,1)$が$f(x,y)$を最小にする点であると考えられます。このとき最小値は$f(1,1)=0$を取ります。ローゼンブロック関数では関数の値の小さな点が$y=x^2$の$0 \leq x \leq 2$あたりに集中することから等高線がバナナのような形を取ります。このことからローゼンブロック関数はバナナ関数などと呼ばれる場合もあります。

ローゼンブロック関数のグラフ化と最小点の探索

ローゼンブロック関数のグラフ化

下記を実行することで等高線を描くことができます。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm

x_, y_ = np.arange(-2,2.01,0.01), np.arange(-2,2.01,0.01)
x, y = np.meshgrid(x_, y_)
z = (1-x)**2 + 100*(y-x**2)**2

levs = 10**np.arange(0., 3.5, 0.5)

plt.contour(x,y,z,norm=LogNorm(),levels=levs,cmap="viridis")
plt.colorbar()

plt.show()

・実行結果

上図では黄色に近づくとローゼンブロック関数$f(x,y)$の値が大きく、紫に近づくと$f(x,y)$の値が小さいです。前節で解釈したように$y=x^2, \, 0 \leq x \leq 2$の周辺に関数の値が小さい点があることが確認できます。

勾配法を用いた関数の最小点の探索

$$
\large
\begin{align}
\left(\begin{array}{c} x_{n+1} \\ y_{n+1} \end{array} \right) = \left(\begin{array}{c} x_{n} \\ y_{n} \end{array} \right) – \alpha \nabla f(x,y)|_{x=x_{n},y=y_{n}}
\end{align}
$$

勾配降下法では上記のような数式を用いて関数の最小値の探索を行います。ここでローゼンブロック関数$f(x,y)$の勾配ベクトル$\nabla f(x,y)$は下記のように得られます。
$$
\large
\begin{align}
\nabla f(x,y) &= \left(\begin{array}{c} \displaystyle \frac{\partial f}{\partial x} \\ \displaystyle \frac{\partial f}{\partial y} \end{array} \right) \\
&= \left(\begin{array}{c} 2(x-1)-400x(y-x^2) \\ 200(y-x^2) \end{array} \right)
\end{align}
$$

上記の勾配ベクトルを元に下記を実行することで$(x,y)=(0,2)$から$\alpha=0.005$で勾配降下法の繰り返し計算を行うことができます。

alpha = 0.005
x_n, y_n = 0., 2.

for i in range(500):
    x_n = x_n - alpha*(2*(x_n-1) - 400*x_n*(y_n-x_n**2))
    y_n = y_n - alpha*200*(y_n-x_n**2)
    
    if (i+1)%100==0:
        print("n:{}, x_n:{:.5f}, y_n:{:.5f}".format(i+1,x_n,y_n))

・実行結果

n:100, x_n:0.63397, y_n:0.40191
n:200, x_n:0.86602, y_n:0.74999
n:300, x_n:0.95096, y_n:0.90432
n:400, x_n:0.98205, y_n:0.96442
n:500, x_n:0.99343, y_n:0.98690

上記よりx_ny_nが$(1,1)$に収束することが確認できます。計算過程は次のように図で表すことも可能です。

alpha = 0.002
x_n, y_n = 0., 2.
x_n_, y_n_ = np.zeros(10), np.zeros(10)

display_n, display_idx = [1, 2, 5, 10, 20, 50, 100, 200, 500, 1000], 0

for i in range(1000):
    x_n = x_n - alpha*(2*(x_n-1) - 400*x_n*(y_n-x_n**2))
    y_n = y_n - alpha*200*(y_n-x_n**2)
    
    if (i+1) in display_n:
        x_n_[display_idx], y_n_[display_idx] = x_n, y_n
        display_idx += 1

plt.plot(x_n_,y_n_,"ro")
plt.contour(x,y,z,norm=LogNorm(),levels=levs,cmap="viridis")
plt.colorbar()

plt.show()

・実行結果

可視化の都合上学習率や表示する繰り返し演算のインデックスは調整を行いましたのでご注意ください。図より$(0,2)$から$(1,1)$に近づく流れが確認できます。

当項での計算では$\alpha$に定数を設定しましたが、下記のように直線探索を行うこともできます。

勾配法の計算過程のアニメーション

参考

・ローゼンブロック関数:Wikipedia
・ベンチマーク関数:Wikipedia

数学検定2級 解説 〜公式問題集 解説&解答 Ch.4「微分・積分」〜

数学検定$2$級は数ⅡBまで相当の数学の基本トピックに関して取り扱った検定であり、統計学に必要な数学を身につける際の指標に役に立ちます。当記事では「日本数学検定協会 監修」の「数学検定問題集 $2$級」より、第$4$章の「微分・積分」の解説と演習問題の解答例などを取り扱いました。

・数学検定$2$級まとめ
https://www.hello-statisticians.com/math_certificate_2

本章のまとめ

微分

積分

演習

計算技能問題

問題.$1$

$[1]$
下記のように計算できる。
$$
\large
\begin{align}
y &= 5x^2 – 6x + 4 \\
y’ &= 10x – 6
\end{align}
$$

$[2]$
下記のように計算できる。
$$
\large
\begin{align}
y &= x^3 – 3x + 1 \\
y’ &= 3x^2 – 3
\end{align}
$$

$[3]$
下記のように計算できる。
$$
\large
\begin{align}
y &= (2x-5)^2 \\
&= 4x^2 – 20x + 25 \\
y’ &= 8x – 20
\end{align}
$$

$[4]$
下記のように計算できる。
$$
\large
\begin{align}
y &= x(x+1)^{2} \\
&= x^3 + 2x^2 + x \\
y’ &= 3x^2 + 4x + 1
\end{align}
$$

問題.$2$

$[1]$
$f(x)=2x^2$とおくと$f'(x)$は下記のように得られる。
$$
\large
\begin{align}
f'(x) = 4x
\end{align}
$$

よって$x=1$における接線の方程式は下記のように表される。
$$
\large
\begin{align}
y – f(1) &= f'(1)(x-1) \\
y &= 4(x-1) + 2 \\
&= 4x – 2
\end{align}
$$

$[2]$
$f(x)=x^2-3x$とおくと$f'(x)$は下記のように得られる。
$$
\large
\begin{align}
f'(x) = 2x-3
\end{align}
$$

よって$x=1$における接線の方程式は下記のように表せる。
$$
\large
\begin{align}
y – f(1) &= f'(1)(x-1) \\
y &= -(x-1) – 2 \\
&= -x – 1
\end{align}
$$

$[3]$
$f(x)=x^2+x$とおくと$f'(x)$は下記のように得られる。
$$
\large
\begin{align}
f'(x) = 2x+1
\end{align}
$$

上記が$3$であるので$2x+1=3$より$x=1$である。$x=1$における接線の方程式は下記のように表せる。
$$
\large
\begin{align}
y – f(1) &= f'(1)(x-1) \\
y &= 3(x-1) + 2 \\
&= 3x – 1
\end{align}
$$

問題.$3$

$[1]$
定積分の値は下記のように計算できる。
$$
\large
\begin{align}
\int_{-2}^{3} (6x^2-4x+1) dx &= \left[ 2x^3-2x^2+x \right]_{-2}^{3} \\
&= (2 \cdot 3^3 – 2 \cdot 3^2 + 3) – (2 \cdot (-2)^3 – 2 \cdot (-2)^2 + (-2)) \\
&= 54 – 18 + 3 -(-16 – 8 – 2) = 65
\end{align}
$$

$[2]$
定積分の値は下記のように計算できる。
$$
\large
\begin{align}
\int_{2}^{3} (x^2+3x-4) dx &= \left[ \frac{1}{3}x^3 + \frac{3}{2}x^2 – 4x \right]_{2}^{3} \\
&= \left( 9 + \frac{27}{2} – 12 \right) – \left( \frac{8}{3} + 6 – 8 \right) \\
&= \frac{59}{6}
\end{align}
$$

$[3]$
定積分の値は下記のように計算できる。
$$
\large
\begin{align}
\int_{-1}^{2} (x+3)^{2} dx &= \left[ \frac{1}{3}(x+3)^{3} \right]_{-1}^{2} \\
&= \frac{1}{3}(5^3 – 2^3) \\
&= 39
\end{align}
$$

$[4]$
定積分の値は下記のように計算できる。
$$
\large
\begin{align}
\int_{-1}^{1} x(2x-1)^2 dx &= \int_{-1}^{1} (4x^3 – 4x^2 + x) dx \\
&= -2 \int_{0}^{1} 4x^2 dx \\
&= -2 \left[ \frac{4}{3}x^3 \right]_{0}^{1} \\
&= -\frac{8}{3}(1^3-0^3) \\
&= -\frac{8}{3}
\end{align}
$$

問題.$4$

$[1]$
面積は下記のように得られる。
$$
\large
\begin{align}
\int_{0}^{2} -(x^2-2x) dx &= -\left[ \frac{1}{3}x^{3} – x^2 \right]_{0}^{2} \\
&= – \left( \frac{8}{3} – 2^2 \right) \\
&= \frac{4}{3}
\end{align}
$$

$[2]$
面積は下記のように得られる。
$$
\large
\begin{align}
\int_{0}^{1} (x-x^2) dx &= \left[ \frac{1}{2}x^{2} – \frac{1}{3}x^3 \right]_{0}^{1} \\
&= \frac{1}{2} – \frac{1}{3} \\
&= \frac{1}{6}
\end{align}
$$

$[3]$
面積は下記のように得られる。
$$
\large
\begin{align}
\int_{0}^{1} x^2 dx + \int_{1}^{2} (x^2-4x+4) dx &= 2 \int_{0}^{1} x^2 dx \\
&= 2 \left[ \frac{1}{3}x^{3} \right]_{0}^{1} \\
&= \frac{2}{3}
\end{align}
$$

$[4]$
面積は下記のように得られる。
$$
\large
\begin{align}
\int_{-2}^{0} (-x^2-(x^2+4x)) dx &= -2 \int_{-2}^{0} (x^2+2x) dx \\
&= 2 \left[ \frac{1}{3}x^{3} + x^{2} \right]_{-2}^{0} \\
&= \frac{8}{3}
\end{align}
$$

数理技能問題

問題.$1$

放物線を$f(x)=ax^2$、点$P$に関して$x=x_p$、点$Q$に関して$x=x_q$のように表す。このとき直線$PQ$の傾きは下記のように表せる。
$$
\large
\begin{align}
\frac{f(x_q)-f(x_p)}{x_q-x_p} &= \frac{ax_q^2 – ax_p^2}{x_q-x_p} \\
&= \frac{a \cancel{(x_q-x_p)} (x_q+x_p)}{\cancel{(x_q-x_p)}} \\
&= a(x_p+x_q) \quad (1)
\end{align}
$$

また、$P$と$Q$の中点が$\displaystyle x=\frac{x_p+x_q}{2}$であるかつ、$f'(x)=2ax$であるので、$P$と$Q$の中点における傾きは下記のように表せる。
$$
\large
\begin{align}
f’ \left( \frac{x_p+x_q}{2} \right) &= 2a \cdot \frac{x_p+x_q}{2} \\
&= a(x_p+x_q) \quad (2)
\end{align}
$$

$(1)$と$(2)$が等しいことから、線分$PQ$と中点における接線の傾きは一致することが示される。

問題.$2$

$f(x)=x^{2}-2x$とおくと、$f'(x)=2x-2$である。ここで点$(a,f(a))$における接線の方程式は下記のように得られる。
$$
\large
\begin{align}
y – f(a) &= f'(a)(x-a) \\
y &= 2(a-1)(x-a) + a^2 – 2a
\end{align}
$$

ここで接線が$(3,-1)$を通るとき下記が成立する。
$$
\large
\begin{align}
-1 &= 2(a-1)(3-a) + a^2 – 2a \\
a^2 – 6a + 5 &= 0 \\
(a-1)(a-5) &= 0
\end{align}
$$

・$a=1$のとき
接線は下記のように得られる。
$$
\large
\begin{align}
y &= 2(a-1)(x-a) + a^2 – 2a \\
&= 2(1-1)(x-1) + 1^2 – 2 \cdot 1 \\
&= -1
\end{align}
$$

・$a=5$のとき
接線は下記のように得られる。
$$
\large
\begin{align}
y &= 2(a-1)(x-a) + a^2 – 2a \\
&= 2(5-1)(x-5) + 5^2 – 2 \cdot 5 \\
&= 8x – 25
\end{align}
$$

問題.$3$

球の中心を$O$、「球の中心から直円錐の底面への垂線」と「底面」の交点を$H$、直円錐の底面の円周上の$1$点を$P$とおく。このとき$\angle POH = \theta$、体積を$V$とおくと、直円錐の体積の公式より$V$は下記のように得られる。
$$
\large
\begin{align}
V &= \frac{1}{3} \pi (R \sin{\theta})^{2} (R + R\cos{\theta}) \\
&= \frac{\pi R^{3}}{3} \sin^{2}{\theta} (1+\cos{\theta}) \\
&= \frac{\pi R^{3}}{3} (1-\cos^{2}{\theta}) (1+\cos{\theta})
\end{align}
$$

上記に対し、$x=\cos{\theta}$とおくと、$V$は下記のように表せる。
$$
\large
\begin{align}
V &= \frac{\pi R^{3}}{3} (1-\cos^{2}{\theta}) (1+\cos{\theta}) \\
&= \frac{\pi R^{3}}{3} (-\cos^{3}{\theta} – \cos^{2}{\theta} + \cos{\theta} + 1) \\
&= \frac{\pi R^{3}}{3} (-x^3-x^2+x+1) \quad (1)
\end{align}
$$

ここで$\displaystyle 0 < \theta < \frac{\pi}{2}$より$0 < x < 1$である。よって、区間$0 < x < 1$における$f(x) = -x^3-x^2+x+1$を最大にする$x$を$(1)$式に代入すれば良い。$f'(x)$は下記のように計算できる。
$$
\large
\begin{align}
f'(x) &= -3x^2 – 2x + 1 \\
&= -(3x^2 + 2x -1) \\
&= -(3x-1)(x+1)
\end{align}
$$

上記より区間$0 < x < 1$における$f(x)$の増減表は下記のように表せる。
$$
\large
\begin{array}{|c|*5{c|}}\hline x & 0 & \cdots & \displaystyle \frac{1}{3} & \cdots & 1 \\
\hline f'(x) & & + & 0 & – & \\
\hline f(x) & & \nearrow & \displaystyle \max & \searrow & \\
\hline
\end{array}
$$

よって$(1)$式に$\displaystyle x = \frac{1}{3}$を代入することで$V$の最大値が下記のように得られる。
$$
\large
\begin{align}
V &= \frac{\pi R^{3}}{3} \left( -\frac{1}{3^3} – \frac{1}{3^2} + \frac{1}{3} + 1 \right) \\
&= \frac{32 \pi R^{3}}{81}
\end{align}
$$

問題.$4$

$[1]$
$$
\large
\begin{align}
\left( \frac{1}{3}(x-\alpha)^{3} \right)’ &= \left( \frac{1}{3}(x^{3} – 3x^{2}\alpha + 3x\alpha^{2} – \alpha^{3}) \right)’ \\
&= x^{2} – 2x \alpha + \alpha^{2} \\
&= (x-\alpha)^{2}
\end{align}
$$

上記より下記が成立する。
$$
\large
\begin{align}
\int (x-\alpha)^{2} dx = \frac{1}{3}(x-\alpha)^{3} + C
\end{align}
$$

$[2]$
下記のように式変形を行うことができる。
$$
\large
\begin{align}
\int_{\alpha}^{\beta} (x-\alpha)(x-\beta) dx &= \int_{\alpha}^{\beta} (x-\alpha)^{2} dx – \int_{\alpha}^{\beta} (\beta-\alpha)(x-\alpha) dx \\
&= \left[ \frac{1}{3}(x-\alpha)^{3} \right]_{\alpha}^{\beta} – \left[ \frac{1}{2}(\beta-\alpha)(x-\alpha)^{2} \right]_{\alpha}^{\beta} \\
&= \frac{1}{3} (\beta-\alpha)^3 – \frac{1}{2} (\beta-\alpha)^3 \\
&= \frac{2-3}{6} (\beta-\alpha)^3 \\
&= -\frac{1}{6} (\beta-\alpha)^3
\end{align}
$$

問題.$5$

$f(x)=x^2-2x+2$とおくと、$f'(x)=2x-2$より、点$(2,2)$における接線の方程式は下記のように表せる。
$$
\large
\begin{align}
y-2 &= f'(2)(x-2) \\
y &= 2(x-2) + 2 \\
&= 2x – 2
\end{align}
$$

よって面積は下記のように計算できる。
$$
\large
\begin{align}
\int_{0}^{2} [(x^2-2x+2) – (2x-2)] dx &= \int_{0}^{2} (x^2-4x+4) dx \\
&= \int_{0}^{2} (x-2)^{2} dx \\
&= \frac{1}{3} \left[ (x-2)^{3} \right]_{0}^{2} \\
&= \frac{1}{3}(0^{3} – (-2)^3) \\
&= \frac{8}{3}
\end{align}
$$

統計検定準1級 問題解説 ~2016年6月実施 選択問題及び部分記述問題 問2~

過去問

過去問題は統計検定公式が問題と解答例を公開しています。こちらを参照してください。

解説

$P(X=1) = P(X=3) = p_1$,$P(X=2) = P(X=4) = p_2$とおく.$E[X] = \dfrac{8}{3}$なので,$p_1\cdot 1 + p_2 \cdot 2 + p_1 \cdot 3 + p_2 \cdot 4 = \dfrac{8}{3}$.また,$2p_1 + 2p_2 = 1$である.これらを解いて,$p_1 = \dfrac{1}{6}$,$p_2 = \dfrac{1}{3}$を得る.

[1] 解答

$\boxed{ \ \mathsf{記述3}\ }$ : $\dfrac{11}{9}$
$V[X] = E[X^2] – E[X]^2$ を利用する.
$$
E[X^2] = \dfrac{1}{6}\cdot1^2 + \dfrac{1}{3} \cdot 2^2+ \dfrac{1}{6}\cdot 3^2 + \dfrac{1}{3} \cdot 4^2= \dfrac{25}{3}
$$
したがって,
$$
V[X] = \dfrac{25}{3} – \left( \dfrac{8}{3}\right)^2 = \dfrac{11}{9}
$$
である.

[2] 解答

$\boxed{ \ \mathsf{記述4}\ }$ : $\dfrac{7}{36}$
$1$ 回目に出た目を $x$,$2$ 回目に出た目を $y$ とすると,$Y=3$ となるのは,$(1,3)$,$(2,3)$,$(3,3)$,$(3,1)$,$(3,2)$ の $5$ 通りのみ.それぞれが起こる確率は $\left(\dfrac{1}{6}\right)^2$,$\dfrac{1}{3}\cdot \dfrac{1}{6}$,$\left(\dfrac{1}{6}\right)^2$,$\left(\dfrac{1}{6}\right)^2$,$\dfrac{1}{3}\cdot \dfrac{1}{6}$ であるから,
$$
P(Y=3) = \left(\dfrac{1}{6}\right)^2\cdot 2 + \dfrac{1}{3}\cdot \dfrac{1}{6}\cdot 2 + \left(\dfrac{1}{6}\right)^2 = \dfrac{7}{36}
$$
である.

Ch.6 「代表的な連続確率分布」の章末問題の解答例 〜数理統計学(共立出版)〜

当記事は「数理統計学(共立出版)」の読解サポートにあたってChapter.$6$の「代表的な連続確率分布」の章末問題の解答の作成を行いました。
基本的には書籍の購入者向けの解説なので、まだ入手されていない方は購入の上ご確認ください。また、解説はあくまでサイト運営者が独自に作成したものであり、書籍の公式ページではないことにご注意ください。

・解答まとめ
https://www.hello-statisticians.com/answer_textbook_math_stat#green

章末の演習問題について

問題6.1の解答例

コーシー分布の確率密度関数を$f(x)$とおくと下記のように表せる。
$$
\large
\begin{align}
f(x) = \frac{1}{\pi(1+x^2)}
\end{align}
$$

「特定の区間の期待値が発散$\, \implies \,$有限の期待値・分散を持たない」であるので、以下では$[0,\infty)$における$xf(x)$の積分が発散することを示す。
$$
\large
\begin{align}
\int_{0}^{\infty} xf(x) dx &= \frac{1}{\pi} \int_{0}^{\infty} \frac{x}{1+x^2} dx \\
&= \frac{1}{2 \pi} \int_{0}^{\infty} \frac{(1+x^2)’}{1+x^2} dx \\
&= \frac{1}{2 \pi} \left[ \log{(1+x^2)} \right]_{0}^{\infty} = \infty
\end{align}
$$

$\displaystyle \int_{0}^{\infty} xf(x) dx = \infty$であるのでコーシー分布は期待値を持たないことが示される。

・類題
現代数理統計学 問$4.10$

問題6.2の解答例

問題6.3の解答例

問題6.4の解答例

確率変数$X$に関して$X \sim F(n_1,n_2)$より、以下が成立する。
$$
\large
\begin{align}
f_{X}(x) = \frac{x^{\frac{n_1}{2}-1}}{B \left( \frac{n_1}{2}, \frac{n_2}{2} \right)} \left( \frac{n_1}{n_2} \right)^{\frac{n_1}{2}} \left( 1+\frac{n_1}{n_2}x \right)^{-\frac{n_1+n_2}{2}}, \quad x > 0
\end{align}
$$

上記に対し、下記のような変数変換を考える。
$$
\large
\begin{align}
Y = \frac{\frac{n_1}{n_2}X}{1+\frac{n_1}{n_2}X}
\end{align}
$$

$\displaystyle y = \frac{\frac{n_1}{n_2}y}{1+\frac{n_1}{n_2}x}$は下記のように$x$に関して解くことができる。
$$
\large
\begin{align}
y &= \frac{\frac{n_1}{n_2}x}{1+\frac{n_1}{n_2}x} \\
y \left( 1+\frac{n_1}{n_2}x \right) &= \frac{n_1}{n_2}x \\
y + y \cdot \frac{n_1}{n_2}x &= \frac{n_1}{n_2}x \\
y &= (1-y) \frac{n_1}{n_2}x \\
x &= \frac{y}{\frac{n_1}{n_2} (1-y)}
\end{align}
$$

上記より$\displaystyle \frac{dx}{dy}$は下記のように計算できる。
$$
\large
\begin{align}
\frac{dx}{dy} &= \frac{\frac{n_1}{n_2} (1-y) – y\frac{n_1}{n_2} \cdot (-1)}{\left( \frac{n_1}{n_2} \right)^{2} (1-y)^2} \\
&= \frac{\frac{n_1}{n_2}}{\left( \frac{n_1}{n_2} \right)^{2} (1-y)^2} \\
&= \frac{1}{\frac{n_1}{n_2} (1-y)^2}
\end{align}
$$

ここで確率変数$Y$に関する確率密度関数を$g_Y(y)$とおくと、変数変換の公式より$g_Y(y)$は下記のように得ることができる。
$$
\large
\begin{align}
g_Y(y) &= f_X(x) \left| \frac{dx}{dy} \right| \\
&= f_X \left( \frac{y}{\frac{n_1}{n_2} (1-y)} \right) \times \frac{1}{\frac{n_1}{n_2} (1-y)^2} \\
&= \frac{\left(\frac{y}{\cancel{\frac{n_1}{n_2}} (1-y)}\right)^{\frac{n_1}{2}-1}}{B \left( \frac{n_1}{2}, \frac{n_2}{2} \right)} \cancel{\left( \frac{n_1}{n_2} \right)^{\frac{n_1}{2}}} \left( 1+\cancel{\frac{n_1}{n_2}} \cdot \frac{y}{\cancel{\frac{n_1}{n_2}} (1-y)} \right)^{-\frac{n_1+n_2}{2}} \times \frac{1}{\cancel{\frac{n_1}{n_2}} (1-y)^2} \\
&= \frac{1}{B \left( \frac{n_1}{2}, \frac{n_2}{2} \right)} \cdot \left(\frac{y}{1-y}\right)^{\frac{n_1}{2}-1} \cdot \left( \frac{1-y+y}{1-y} \right)^{-\frac{n_1+n_2}{2}} \cdot \frac{1}{(1-y)^2} \\
&= \frac{1}{B \left( \frac{n_1}{2}, \frac{n_2}{2} \right)} \cdot \left(\frac{y}{1-y}\right)^{\frac{n_1}{2}-1} \cdot (1-y)^{\frac{n_1+n_2}{2}} \cdot \frac{1}{(1-y)^2} \\
&= \frac{1}{B \left( \frac{n_1}{2}, \frac{n_2}{2} \right)} y^{\frac{n_1}{2}-1} (1-y)^{\frac{n_1+n_2}{2} – \left( \frac{n_1}{2}-1 \right) – 2} \\
&= \frac{1}{B \left( \frac{n_1}{2}, \frac{n_2}{2} \right)} y^{\frac{n_1}{2}-1} (1-y)^{\frac{n_2}{2} – 1}
\end{align}
$$

上記がベータ分布$\displaystyle \mathrm{Be} \left( \frac{n_1}{2}, \frac{n_2}{2} \right)$の確率密度関数に一致する。よって、$\displaystyle Y \sim \mathrm{Be} \left( \frac{n_1}{2}, \frac{n_2}{2} \right)$である。