コーシー・シュワルツの不等式と三角不等式

コーシー・シュワルツの不等式と三角不等式

 

【線型代数08】コーシー・シュワルツの不等式

 角度による内積の定義を再掲します。
 
\[\boldsymbol{v}\cdot\boldsymbol{w}=\parallel\boldsymbol{v}\parallel\parallel\boldsymbol{w}\parallel\cos\theta\tag{1}\]
 右辺の $\cos\theta$ は $-1$ から $1$ の値に制限されるので、内積の絶対値について次の不等式が成り立ちます。
 
\[|\boldsymbol{v}\cdot\boldsymbol{w}|\ \leq\ \parallel\boldsymbol{v}\parallel\parallel\boldsymbol{w}\parallel\tag{2}\]
 この式を コーシー・シュワルツの不等式 (Cauchy–Schwarz inequality) とよびます。等号は $\boldsymbol{v}$ と $\boldsymbol{w}$ が互いに平行のとき(互いに同じ方向または逆向きであるとき)に成立します(下図)。
 
コーシー・シュワルツの不等式 (Cauchy–Schwarz inequality)
 
 ベクトル $\boldsymbol{v}=\begin{bmatrix}2\\3\end{bmatrix}$ と $\boldsymbol{w}=\begin{bmatrix}2\\5\end{bmatrix}$ について、コーシー・シュワルツの不等式が成り立つことを確認してみます。

# python_cauchy_schwarz_inequality

# In[1]

import numpy as np
from scipy.linalg import norm

# ベクトルを定義
v = np.array([2, 3])
w = np.array([2, 5])

# |v・w|を計算
a = np.abs(np.dot(v, w))

# |v||w|を計算
b = norm(v) * norm(w)

# |v||w|-|v・w| 
print("|v||w|-|v・w| : {:.3f}".format(b - a))

# |v||w|-|v・w| : 0.416

 

【線型代数09】三角不等式

 内積の定義式 (1) とコーシー・シュワルツの不等式 (2) を使うと、2 つのベクトルの和についての評価式を得ることができます。
 
\[\parallel\boldsymbol{v}+\boldsymbol{w}\parallel\ \leq\ \parallel\boldsymbol{v}\parallel+\parallel\boldsymbol{w}\parallel\tag{3}\]
 これは 三角不等式 (triangle inequality) とよばれる有名な式で、三角形の 2 辺の長さの和が他の 1 辺の長さより大きいことを表しています(ほとんど自明の事実です)。
 
三角不等式 (triangle inequality)
 
 等号は $\boldsymbol{v}$ と $\boldsymbol{w}$ が平行のとき(つまり三角形がつぶれて直線になるとき)に成立します。三角不等式の証明は簡単です:
 
\[\begin{align*}\parallel\boldsymbol{v}+\boldsymbol{w}\parallel ^2&=\parallel\boldsymbol{v}\parallel ^2+2\boldsymbol{v}\cdot\boldsymbol{w}+\parallel\boldsymbol{w}\parallel^2\\[6pt]&\ \leq\ \parallel\boldsymbol{v}\parallel^2+2\parallel\boldsymbol{v}\parallel\parallel\boldsymbol{w}\parallel+\parallel\boldsymbol{w}\parallel^2\\[6pt]&\ =\ (\parallel\boldsymbol{v}\parallel+\parallel\boldsymbol{w}\parallel)^2\end{align*}\]
 先ほどと同じベクトル $\boldsymbol{v}=\begin{bmatrix}2\\3\end{bmatrix}$ と $\boldsymbol{w}=\begin{bmatrix}2\\5\end{bmatrix}$ について、三角不等式が成り立つことを確認しておきます。

# python_triangle_inequality

# In[1]

import numpy as np
from scipy.linalg import norm

# ベクトルを定義
v = np.array([2, 3])
w = np.array([2, 5])

# |v+w|を計算
a = norm(v + w)

# |v|+|w|を計算
b = norm(v) + norm(w)

# |v|+|w|-|v+w| 
print("|v|+|w|-|v+w| : {:.3f}".format(b - a))

# |v|+|w|-|v+w| : 0.046