目次
KerAとCoimgAの基底が直交することの確認
以下のような行列Aについて、
$$\begin {pmatrix}1&-1&2&-2\\0&1&-2&1\\1&0&0&-1\end{pmatrix}$$
後退代入を行うと、
$(x_1,x_2,x_3,x_4)^\mathrm{T} = (x_4,2x_3-x_4,x_3,x_4)^\mathrm{T} $
よって、
$KerA = span \{(0,2,1,0)^\mathrm{T} ,(1,-1,0,1)^\mathrm{T}\} $
$CoimgA = span\{(1,-1,2,-2)^\mathrm{T} ,(0,1,-2,1)^\mathrm{T} \}$
この時、カーネルとコイメージの基底はいかなる組合せでも直交する。
カーネルの基底について、
$\bar{\mathbf{v_1}}=(0,2,1,0)^\mathrm{T}$とすると、
$\begin{align} \bar{\mathbf{v_2}}&=(1,-1,0,1)^\mathrm{T}-\frac{(1,-1,0,1)^\mathrm{T}\cdot \bar{\mathbf{v_1}}}{\|\bar{\mathbf{v_1}}\|^2}\bar{\mathbf{v_1}}\\&=(1,-\frac{1}{5},\frac{2}{5},1)^\mathrm{T}\end{align} $
よって、
$\bar{\mathbf{v_1}}=(0,2,1,0)^\mathrm{T},\bar{\mathbf{v_2}}=(1,-\frac{1}{5},\frac{2}{5},1)^\mathrm{T}$
同様に、Coimageの基底について、
$\bar{\mathbf{v_3}}=(1,-1,2,-2)^\mathrm{T}$
とすると、
$\begin{align} \bar{\mathbf{v_4}}&=(0,1,-2,1)^\mathrm{T}-\frac{(0,1,-2,1)^\mathrm{T}\cdot \bar{\mathbf{v_3}}}{\|\bar{\mathbf{v_3}}\|^2}\bar{\mathbf{v_3}}\\&=(\frac{7}{10},\frac{3}{10},-\frac{3}{5},-\frac{2}{5})^\mathrm{T}\end{align}$
よって、
$\bar{\mathbf{v_3}}=(1,-1,2,-2)^\mathrm{T},\bar{\mathbf{v_4}}=(\frac{7}{10},\frac{3}{10},-\frac{3}{5},-\frac{2}{5})^\mathrm{T}$
KerAとCoimgAのコンポーネントと線型結合
$\bar{w} =(2,1,1,0)^\mathrm{T} $とすると、$\mathbb{R}^4$空間の直交基底は、
$$\bar{\mathbf{q_i}}=\frac{\bar{\mathbf{v_i}}}{\|\bar{\mathbf{v_i}}\|}$$
この時、$\bar{w} $は$\bar{q_i} $の線型結合で表せるので、
$\mathbf{\bar{w}} = c_1\bar{\mathbf{q_1}}+ c_2\bar{\mathbf{q_2}}+ c_3\bar{\mathbf{q_3}}+ c_4\bar{\mathbf{q_4}}\:\: where \:\:\:c_i=\mathbf{\bar{q_i}} \cdot \mathbf{\bar{w}} \in \mathbb{R}^4$
上記の式をKerAとCoimgAに分解すると、
$\begin{align}\mathbf{\bar{w}}&=Comp.(KerA) + Comp.(CoimgA) \\&=(c_1\mathbf{\bar{q_1}}+c_2\mathbf{\bar{q_2}})+(c_3\mathbf{\bar{q_3}}+c_4\mathbf{\bar{q_4}})\end{align}$
Pythonで確認
数値計算はめんどくさいので、Pythonで確認します。
import numpy as np
w = np.array([2,1,1,0])
v1 = np.array([0,2,1,0])
v2 = np.array([1,-1/5,2/5,1])
v3 = np.array([1,-1,2,-2])
v4 = np.array([7/10,3/10,-3/5,-2/5])
q1 = 1/np.linalg.norm(v1)*v1
q2 = 1/np.linalg.norm(v2)*v2
q3 = 1/np.linalg.norm(v3)*v3
q4 = 1/np.linalg.norm(v4)*v4
c1 = q1@w
c2 = q2@w
c3 = q3@w
c4 = q4@w
print(c1)
print(3/np.sqrt(5))
print(c2)
print(np.sqrt(55)/5)
print(c3)
print(3/np.sqrt(10))
print(c4)
print(np.sqrt(10/11)*11/10)
kerA_component = q1*c1+q2*c2
coimgA_component = q3*c3+q4*c4
print(kerA_component+coimgA_component)
w_r = kerA_component+coimgA_component
for i in range(len(w)):
if abs(w[i]-w_r[i])<0.000001:
print(True)
print(int(kerA_component@coimgA_component))
>>>
1.3416407864998738
1.3416407864998738
1.4832396974191326
1.4832396974191326
0.9486832980505138
0.9486832980505138
1.0488088481701512
1.0488088481701516
[2.00000000e+00 1.00000000e+00 1.00000000e+00 2.22044605e-16]
True
True
True
True
0

