部分空間の共通部分 (intersection of two subspaces)
ベクトル空間 ℝn 上の部分空間 A = 〈 a1, ..., ap 〉, B = 〈 b1, ..., bq 〉 を考える。 A と B の共通部分 C := A ∩ B は一般に部分空間である。 x ∈ C である場合、つまり x ∈ A かつ x ∈ B の場合、それぞれの部分空間を張る基底の座標で、それぞれ xA := A⊤x, xB := B⊤x とかける。ここで、 A := [ a1, ..., ap ], B := [ b1, ..., bq ] という基底を列として並べた行列である。
x = AxA = BxB ∈ ℝn ならば、 x ∈ C である。
拘束条件 AxA−BxB = [ A | −B ]x' = 0 より、 x' = [xA⊤, xB⊤ ]⊤ が満たすべき条件は、 D := [ A | −B ] の零空間 (null space) に含まれることである。*1 D の零空間 N の基底を集めた行列を N とすると DN = O である。 N の上下 p 行、 q 行づつに分割した行列 NA, NB を考えると、 ANA = BNB が成り立つ。 C := ANA とすると、これが C の基底を並べた行列となる。
A と B が重ならない場合、つまり C = { 0 } の場合、 N = { 0 } となるので、基底は求まらない。したがって、 SVD などで零空間の基底を計算する際には、このチェックが必要となる。
*1:基底だから、負号には特に意味ないので、なくてもいい。