直交補空間と直交分解定理|定義から正射影・最小二乗法までわかりやすく解説
のベクトル を と書きます。前半が 平面の成分、後半が 軸の成分です。
誰でも自然にやっている操作ですが、ここには 2 つの事実が隠れています。 平面と 軸は互いに直交していること、そしてこの分け方がただ 1 通りしかないことです。
この 2 つを一般の部分空間について述べたものが、直交補空間と直交分解定理です。
内積と直交
の 2 つのベクトル と に対して、内積を次で定めます。
のとき と は直交するといい、 と書きます。
ノルムは です。 となるのは のときだけ、という性質があとで何度も効いてきます。
以下では を念頭に置きますが、内積が定まっているベクトル空間なら議論はそのまま通用します。関数の空間や行列の空間でも同じです。
直交補空間の定義
を内積の定まったベクトル空間、 をその部分空間とします。
の直交補空間 を次で定めます。
は「W パープ」または「W の直交補空間」と読みます。記号 は垂直記号です。
言葉にすれば、 のベクトルすべてと直交するベクトルを全部集めたもの、ということになります。
「すべて」がついている点が大事です。 のあるベクトルと直交するだけでは足りません。
は部分空間になる
定義からは集合としか言えませんが、実は もまた の部分空間です。
まず です。 がどの でも成り立つからです。
次に とスカラー を取ります。任意の に対して内積の線型性から
となるので です。部分空間の条件を満たしました。
つまり を考えることは、部分空間からまた部分空間を作る操作になっています。
と が共有するのは だけ
が必ず成り立ちます。これは内積の性質から自動的に出てきます。
としましょう。 なので のすべてのベクトルと直交します。ところが 自身が に属しています。
したがって となり、 です。
証明が 3 行で終わるところがポイントです。あとで直和を扱うとき、2 つ確かめるべき条件のうち片方はこれで済んでしまいます。
生成元だけ調べればよい
定義には「すべての について」と書いてありますが、実際に確かめるのは有限個で足ります。
のとき、 であることと が で成り立つことは同値です。
理由は簡単で、 の任意の元は と書けるので、内積の線型性から となるからです。
おかげで を求める作業は連立 1 次方程式を解くことに帰着します。以下の例はすべてこの方法で計算できます。
極端な例
両端の場合を見ておくと感覚がつかめます。
です。 とはどんなベクトルも直交するので、条件が何も課されません。
逆に です。 のすべてのベクトルと直交するなら自分自身とも直交するので、 しかありえません。
大きい部分空間の直交補空間は小さく、小さい部分空間の直交補空間は大きくなります。 が大きいほど課される条件が増えるからです。
例: の直線
とします。原点を通る 1 本の直線です。
が に入る条件は です。生成元 1 本だけ調べればよいのでした。
解は なので となります。
もとの直線に垂直な直線が出てきました。 になっている点にも注目してください。
例: の 平面
冒頭の例を定義に沿って確かめます。 が 平面です。
が に入る条件は かつ です。生成元との内積がそれぞれ と になるからです。
したがって 、つまり 軸です。
<div class="oc-fig">
<svg viewBox="0 0 420 250" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="xy 平面と z 軸によるベクトルの分解">
<rect x="0" y="0" width="420" height="250" rx="10" fill="#fafbfc"/>
<polygon points="70,175 250,175 350,130 170,130" fill="#3468d6" fill-opacity="0.13" stroke="#3468d6" stroke-width="1.2"/>
<line x1="210" y1="152" x2="210" y2="52" stroke="#e5484d" stroke-width="1.6" stroke-dasharray="5 4"/>
<line x1="210" y1="152" x2="272" y2="137" stroke="#1b4fb8" stroke-width="2.6"/>
<line x1="210" y1="152" x2="272" y2="72" stroke="#1b1d22" stroke-width="2.6"/>
<line x1="272" y1="137" x2="272" y2="72" stroke="#c93c41" stroke-width="2.6"/>
<path d="M 272 130 L 265 130 L 265 137" fill="none" stroke="#6b7280" stroke-width="1.2"/>
<circle cx="210" cy="152" r="3.4" fill="#1b1d22"/>
<g font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5" fill="#1b1d22" stroke="#fafbfc" stroke-width="3.5" paint-order="stroke">
<text x="100" y="196" fill="#1b4fb8">W(xy 平面)</text>
<text x="218" y="46" fill="#c93c41">W の直交補空間(z 軸)</text>
<text x="282" y="66">v</text>
<text x="248" y="158" fill="#1b4fb8">w</text>
<text x="284" y="108" fill="#c93c41">v − w</text>
</g>
</svg>
</div>.oc-fig { margin: 0; text-align: center; }
.oc-fig svg { width: 100%; max-width: 420px; height: auto; }という分解が、 の成分と の成分への分解になっていたわけです。
例: の直線
今度は 1 次元の部分空間を取ります。 です。
条件は の 1 本だけです。
これは平面の方程式です。 となり、基底として と が取れます。
です。直線の直交補空間は、それに垂直な平面になりました。
例: 平面
前の例の と を入れ替えてみます。 としましょう。
生成元は と です。 の条件は かつ 、つまり になります。
したがって です。
もとの直線に戻りました。これは偶然ではなく、あとで見る という性質の現れです。平面の方程式 に出てくる係数 が、そのまま法線ベクトルになっているとも読めます。
例: の 2 次元部分空間
次元が上がっても手順は変わりません。 とします。
条件は 2 本の連立 1 次方程式になります。
、 が出て、 は自由です。
よって となり、次元は 2 です。 が成り立っています。
例: 偶関数と奇関数
を離れてみます。 を区間 上の連続関数全体とし、内積を次で定めます。
を偶関数全体としましょう。 が偶関数、 が奇関数なら積 は奇関数なので、対称な区間での積分は になります。つまり奇関数は に入ります。
逆も言えます。任意の は
と分解でき、第 1 項が偶関数、第 2 項が奇関数です。
「どんな関数も偶関数と奇関数の和に一意に分解できる」という高校で習う事実は、内積空間の直交分解そのものだったことになります。
例: 対称行列と交代行列
行列の空間でも同じことが起きます。 を 次実正方行列全体とし、内積を次で定めます。
これは成分どうしの積を全部足したもので、 の標準内積と同じものです。
を対称行列全体とします。 が対称、 が交代のとき で、転置を取れば となるので、値は です。
そして任意の行列は と分解できます。 は交代行列全体です。
次元も合います。 となるからです。
次元公式
有限次元の場合、次の等式が成り立ちます。
を有限次元の内積空間、 をその部分空間とすると
が のうちどれだけを占めるかが決まれば、 の大きさは自動的に決まります。
ここまでの例で毎回確かめてきたとおりです。 なら、直線の補空間は平面、平面の補空間は直線になります。
証明は次の直交分解定理から出ます。 が と の直和になれば、次元は足し算になるからです。
直交分解定理
この記事の中心になる定理です。
を内積空間、 を の有限次元部分空間とします。このとき任意の は
、ただし かつ
の形にただ 1 通りに書けます。
このことを と書きます。
仮定に注意してください。 全体が有限次元である必要はありません。 が有限次元でありさえすればよいのです。
無限次元の関数空間の中で、多項式が張る有限次元部分空間への分解を考える、といったことができます。フーリエ級数の議論はまさにこの形になります。
存在の証明
の正規直交基底 を取ります。あとで見るグラム・シュミットの方法で必ず作れます。
そして次のように置きます。
は作り方から明らかです。 を示しましょう。
各 について が成り立ちます。正規直交基底なので は のとき 、それ以外は だからです。
したがって となります。生成元すべてと直交するので です。
一意性の証明
と 2 通りに書けたとします。、 です。
移項すると となります。
左辺は の元、右辺は の元です。どちらも同じベクトルなので、これは に属します。
先に見たとおり なので、 かつ です。
直和とは何か
という記号には 2 つの主張が入っています。
内積空間では 2 つ目は自動的に成り立ちました。証明が 3 行で済むあの議論です。
したがって定理の中身は 1 つ目のほうにあります。 が有限次元でないと崩れうるのも、こちらの条件です。
二重直交補空間
の直交補空間を取ると何が起きるでしょうか。
有限次元では が成り立ちます。 は定義からすぐ出ますし、次元公式を 2 回使えば両者の次元が一致するので、等号になります。
平面 の例で見たとおりです。直線から平面へ、平面から直線へ、と往復しました。
この性質は有限次元でのみ成り立ちます。
無限次元では が より真に大きくなることがあります。最後の 2 節で反例を見ます。
正射影
分解 の 側の成分 を、 の への正射影といい と書きます。
一意性が保証されているので、これは から一意に定まります。 は線型写像になります。
側の成分は で、これは にほかなりません。
なら です。すでに にいるベクトルは動かないので、射影を 2 回かけても 1 回と同じ結果になります。
正規直交基底による公式
存在の証明で使った式が、そのまま計算式になります。
ただし は の正規直交基底です。
正規直交でない基底にこの式を当てはめると間違えます。あとで実例を見ます。
基底が 1 本 だけで、長さを に揃えていない場合は次の形になります。
例: 直線への射影を計算する
に を射影します。
として、、 です。
残りの成分は です。
確かめておきましょう。 なので、たしかに に入っています。
例: 平面への射影を計算する
に を射影します。
の基底を使うより、 のほうが 1 次元なので楽です。まず 側を計算します。
したがって です。
検算します。 なので 、そして は の定数倍なので に入っています。
補空間のほうが次元が低いときは、そちらを先に計算して引く。実用上よく使う手です。
直交していない基底では使えない
正規直交という条件を落とすとどうなるか、実例で見ておきます。
を 平面とし、基底として と を取ります。この 2 本は直交していません。
に対して、公式の形をそのまま当てはめてみましょう。
正しい答えは でした。まったく違います。
各方向への射影を単純に足すやり方が通用するのは、方向どうしが直交しているときだけです。だからこそ次に見るグラム・シュミットが要ります。
射影を計算する
数値で確かめるなら数行で書けます。
import numpy as np
# W = span{(1, 1, 0)} への正射影
u = np.array([1.0, 1.0, 0.0])
v = np.array([3.0, 1.0, 2.0])
w = (v @ u) / (u @ u) * u # W 成分
w_perp = v - w # 直交補空間の成分
print(w) # [2. 2. 0.]
print(w_perp) # [ 1. -1. 2.]
print(w @ w_perp) # 0.0最後の行が になることが、分解が正しくできている証拠です。
射影行列
では、正射影は行列の掛け算で書けます。
の正規直交基底を列に並べた行列を とすると、 が射影行列です。 となります。
さきほどの で作ってみましょう。正規化すると なので
となります。 で、手で計算した答えと一致します。
射影行列の性質
射影行列には 2 つの特徴があります。
逆も成り立ちます。 かつ を満たす行列は、必ずどこかの部分空間への正射影になります。
べき等だけでは足りません。斜めに潰す射影もべき等ですが、対称にはなりません。対称性が「まっすぐ下ろす」ことに対応しています。
は補空間への射影
が への射影なら、 は への射影です。
分解 の第 2 項がまさに 成分だったからです。
となるので、こちらもべき等です。対称性も明らかでしょう。
と が を 2 つに切り分けている、というのが直交分解定理の行列版です。
正射影は最短距離を与える
正射影にはもう 1 つ、まったく別に見える特徴づけがあります。
は、 の中で にいちばん近い点です。つまり任意の に対して
が成り立ち、等号は のときにかぎります。
これが最良近似という考え方の出発点です。最小二乗法もフーリエ級数も、突き詰めればこの性質を使っています。
証明は三平方の定理
証明は驚くほど短いものです。 と置き、 を任意に取ります。
と分けます。第 1 項は の元、第 2 項は の元なので、この 2 つは直交しています。
直交する 2 つのベクトルには三平方の定理が使えます。
右辺の第 2 項は 以上で、 になるのは のときだけです。証明が終わりました。
<div class="proj-fig">
<svg viewBox="0 0 440 210" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="正射影が最短距離を与えることの図">
<rect x="0" y="0" width="440" height="210" rx="10" fill="#fafbfc"/>
<line x1="45" y1="160" x2="400" y2="160" stroke="#3468d6" stroke-width="2.4"/>
<line x1="200" y1="60" x2="200" y2="160" stroke="#c93c41" stroke-width="2.4"/>
<line x1="200" y1="60" x2="330" y2="160" stroke="#6b7280" stroke-width="1.6" stroke-dasharray="5 4"/>
<line x1="200" y1="60" x2="105" y2="160" stroke="#6b7280" stroke-width="1.6" stroke-dasharray="5 4"/>
<path d="M 200 148 L 212 148 L 212 160" fill="none" stroke="#6b7280" stroke-width="1.3"/>
<circle cx="200" cy="60" r="4" fill="#1b1d22"/>
<circle cx="200" cy="160" r="4" fill="#c93c41"/>
<circle cx="330" cy="160" r="3.4" fill="#5b616b"/>
<circle cx="105" cy="160" r="3.4" fill="#5b616b"/>
<g font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5" fill="#1b1d22" stroke="#fafbfc" stroke-width="3.5" paint-order="stroke">
<text x="200" y="48" text-anchor="middle">v</text>
<text x="380" y="150" fill="#1b4fb8">W</text>
<text x="200" y="184" text-anchor="middle" fill="#c93c41">proj v</text>
<text x="330" y="184" text-anchor="middle" fill="#5b616b">w</text>
<text x="105" y="184" text-anchor="middle" fill="#5b616b">w</text>
<text x="163" y="110" fill="#c93c41">最短</text>
</g>
</svg>
</div>.proj-fig { margin: 0; text-align: center; }
.proj-fig svg { width: 100%; max-width: 440px; height: auto; }垂線の足がいちばん近い、という中学以来の事実が、そのまま一般の次元で成り立ちます。
例: 点と平面の距離
最短距離の性質を使うと、距離の公式が自然に出てきます。
平面 と点 の距離を求めましょう。
先に計算したとおり 成分は でした。求める距離はこのノルムです。
高校で習う点と平面の距離の公式 と一致します。あの公式は法線方向への射影の長さを測っていたわけです。
グラム・シュミットの直交化法
正射影の公式には正規直交基底が要りました。それを作る手続きがグラム・シュミットの直交化法です。
線形独立な
1 本目はそのまま
2 本目以降は前までが張る空間への射影を引く
長さを に揃えて正規直交基底
番目のベクトルは次の式で計算します。
最後に とすれば正規直交基底になります。
なぜうまくいくか
式の右辺の和の部分は、 が張る部分空間 への正射影です。
つまり と書けます。
これは直交分解の 側の成分にほかなりません。したがって は のすべてのベクトル、とくに と直交します。
であることは、 が に入っていないこと、つまり線形独立性から出ます。この手続きは直交補空間の成分を毎回取り出しているだけなのです。
例: で直交化する
、、 を直交化します。
まず 、 です。
なので
となります。 です。
例: 3 本目を計算する
続けて を求めます。、 です。
方向だけが問題なので 倍して としてかまいません。
直交を確かめます。、。どちらも になりました。
正規化すると、、、 が正規直交基底です。
例: ルジャンドル多項式
関数空間でやってみると面白い結果が出ます。 上の連続関数に を入れ、 を直交化します。
です。 になります。
なので、 がそのまま直交します。 です。
3 本目を計算します。、 なので
となります。これはルジャンドル多項式 の定数倍です。直交化を続ければルジャンドル多項式が次々に出てきます。
QR 分解との関係
グラム・シュミットを行列の言葉で書くと QR 分解になります。
列ベクトルを とする行列 に対し、直交化して得た正規直交基底を列に並べたものを とします。
すると と書けて、 は上三角行列になります。 が の 1 次結合で書けて、それより先を使わないからです。
数値計算では、この形のほうが連立方程式や最小二乗を安定に解けます。理論の話が計算の道具に直結する場所です。
行列の 4 つの部分空間
ここからは応用に入ります。まず行列そのものを直交補空間の目で見てみましょう。
を 実行列とします。 には 4 つの部分空間が付随します。
このうち最初の 2 つが の中に、後の 2 つが の中にあります。
核と行空間は直交補空間
という条件は、 の各行と の内積がすべて である、と読み替えられます。
行空間は行が張る空間ですから、これはまさに が行空間の直交補空間に入る条件です。
同じことを に対して行えば、 も得られます。
連立 1 次方程式を解くという操作が、直交補空間を求める操作と同じだったことになります。
階数・退化次数の定理が出てくる
前節の関係に次元公式を当てはめてみましょう。 の中で
が成り立ちます。
行空間の次元は行階数、つまり の階数です。したがってこの式は
と書き直せます。階数・退化次数の定理そのものです。
線形代数で別々に習うことの多い 2 つの定理が、実は同じ 1 つの事実だったわけです。
<div class="four-fig">
<svg viewBox="0 0 460 240" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="行列に付随する 4 つの部分空間の図">
<rect x="0" y="0" width="460" height="240" rx="10" fill="#fafbfc"/>
<rect x="30" y="40" width="150" height="76" rx="6" fill="#3468d6" fill-opacity="0.14" stroke="#3468d6" stroke-width="1.2"/>
<rect x="30" y="124" width="150" height="76" rx="6" fill="#e5484d" fill-opacity="0.11" stroke="#e5484d" stroke-width="1.2"/>
<rect x="280" y="40" width="150" height="76" rx="6" fill="#3468d6" fill-opacity="0.14" stroke="#3468d6" stroke-width="1.2"/>
<rect x="280" y="124" width="150" height="76" rx="6" fill="#e5484d" fill-opacity="0.11" stroke="#e5484d" stroke-width="1.2"/>
<path d="M 190 78 L 268 78" fill="none" stroke="#5b616b" stroke-width="1.6"/>
<path d="M 262 74 L 270 78 L 262 82" fill="none" stroke="#5b616b" stroke-width="1.6"/>
<path d="M 190 162 L 268 78" fill="none" stroke="#9aa2ad" stroke-width="1.2" stroke-dasharray="4 3"/>
<g font-family="ui-sans-serif, system-ui, sans-serif" font-size="12" fill="#1b1d22">
<text x="105" y="26" text-anchor="middle" fill="#5b616b">定義域 R^n</text>
<text x="355" y="26" text-anchor="middle" fill="#5b616b">値域 R^m</text>
<text x="105" y="74" text-anchor="middle" fill="#1b4fb8">行空間</text>
<text x="105" y="94" text-anchor="middle" font-size="11" fill="#1b4fb8">次元 r</text>
<text x="105" y="158" text-anchor="middle" fill="#c93c41">核</text>
<text x="105" y="178" text-anchor="middle" font-size="11" fill="#c93c41">次元 n − r</text>
<text x="355" y="74" text-anchor="middle" fill="#1b4fb8">像(列空間)</text>
<text x="355" y="94" text-anchor="middle" font-size="11" fill="#1b4fb8">次元 r</text>
<text x="355" y="158" text-anchor="middle" fill="#c93c41">左核</text>
<text x="355" y="178" text-anchor="middle" font-size="11" fill="#c93c41">次元 m − r</text>
<text x="229" y="70" text-anchor="middle" font-size="12.5">A</text>
<text x="229" y="222" text-anchor="middle" font-size="11" fill="#5b616b">上下は互いに直交補空間</text>
</g>
</svg>
</div>.four-fig { margin: 0; text-align: center; }
.four-fig svg { width: 100%; max-width: 460px; height: auto; }上下に並んだ 2 つが互いに直交補空間になっています。 は下の部分をつぶし、上の部分を上の部分へ移す写像だと読めます。
例: 具体的な行列で確かめる
行列を 1 つ取って 4 つの部分空間を全部求めてみます。
2 行目が 1 行目の 2 倍なので、階数は です。行空間は になります。
核は の解空間で、基底として と が取れます。次元は です。
となっていて、たしかに階数・退化次数の定理が成り立っています。
例: 値域側の 2 つ
同じ行列で 側も見ます。
列空間は です。3 本の列 、、 がすべて平行だからです。
左核は の解で、条件は です。よって になります。
直交を確かめます。 です。次元も で合っています。
最小二乗法
解が存在しない連立方程式を、無理やり「いちばんまし」に解く方法があります。
で の場合、厳密な解はありません。そこで を最小にする を探します。
は の中を動きます。したがって求めるのは、 に最も近い の点です。
最短距離を与えるのは正射影でした。つまり を解けばよいことになります。
正規方程式の導出
条件を書き下します。 が と直交すればよいのです。
前に見たとおり でした。したがって条件は 、整理して
となります。これを正規方程式といいます。
もとの方程式に を掛けただけの形ですが、意味は直交条件です。 の列が線形独立なら は正則で、解は一意に定まります。
例: 回帰直線を求める
3 点 、、 に直線 を当てはめます。
3 点を通る直線はないので、厳密な解はありません。行列で書くと次の形です。
正規方程式の材料を計算します。
と を解くと 、 が出ます。求める直線は です。
残差は直交する
いま求めた直線の残差を見ておくと、理屈が目に見えます。
予測値は順に 、、 なので、残差は 、、 です。
の第 1 列 との内積は 。第 2 列 との内積も です。
残差が列空間と直交する、というのが最小二乗法の正体でした。統計で「残差の和が になる」と習うのは、定数項の列との直交条件のことです。
import numpy as np
A = np.array([[1.0, 1.0],
[1.0, 2.0],
[1.0, 3.0]])
b = np.array([1.0, 2.0, 2.0])
# 正規方程式 A^T A x = A^T b を解く
x = np.linalg.solve(A.T @ A, A.T @ b)
print(x) # [0.66666667 0.5]
r = b - A @ x # 残差
print(np.allclose(A.T @ r, 0)) # True 列空間と直交しているフーリエ級数も正射影
無限次元でも、 が有限次元なら分解定理が使えるのでした。その典型がフーリエ級数です。
上の連続関数に を入れます。三角関数の組 は互いに直交します。
これらが張る有限次元部分空間を とすると、 のフーリエ級数の第 部分和は にほかなりません。
フーリエ係数を求める積分の式が、正規直交基底による射影の公式そのものになっています。そして最短距離の性質から、部分和は の中で を 2 乗平均の意味で最もよく近似する関数だと分かります。
対称行列の固有空間は直交する
直交分解が自然に現れるもう 1 つの場面が、対称行列の対角化です。
を実対称行列、、、 とします。
対称性から が成り立つので
となり、 から が出ます。
異なる固有値の固有ベクトルは自動的に直交する、というわけです。
例: 2 次の対称行列
具体的に見ておきます。
固有値は と で、固有ベクトルはそれぞれ と です。
内積は で、たしかに直交しています。狙って選んだわけではなく、対称性から自動的にそうなりました。
正規化すれば と が正規直交基底になり、 がこの 2 方向に直交分解されます。
スペクトル分解
前節を一般化すると、実対称行列は直交行列で対角化できる、という定理になります。
固有値ごとの固有空間を とすると、 はこれらの直交直和になります。
各 への正射影を と書けば
と表せます。これをスペクトル分解といいます。
行列を、直交する方向への射影の重み付き和として書き直した形です。直交補空間による分解が、対称行列の構造そのものを記述しています。
無限次元では崩れる
最後に、有限次元という仮定がどこで効いていたかを見ておきます。
が有限次元でないと、 が成り立たなくなることがあります。存在の証明で有限個の正規直交基底を使ったので、そのままでは通用しません。
ヒルベルト空間、つまり完備な内積空間で が閉部分空間なら、分解は成り立ちます。完備性が有限次元性の代わりを務めてくれるのです。
逆に言えば、 が閉でない場合や空間が完備でない場合には崩れます。大学初年度で扱う範囲では有限次元しか出てこないので気にする必要はありませんが、関数解析に進むと最初に注意される点です。
が破れる例
二重直交補空間の性質も無限次元では成り立ちません。反例が簡単に作れます。
、つまり を満たす数列全体とし、 を「有限個の成分だけが でない数列」全体とします。
とすると、各 について との内積が 、つまり です。よって になります。
したがって です。 は 全体ではないので、 が起きました。
正しい形は 、つまり の閉包になります。実際 は で稠密なので、閉包は 全体です。
理解の確認
で とする。 の 成分はどれか。
参考文献
行列の 4 つの部分空間という見方は Gilbert Strang が広めたもので、線形代数の基本定理と呼ばれています。MIT OpenCourseWare の 18.06 Linear Algebra で講義動画と資料が公開されています。
直交性と正射影を扱う第 4 週あたりが、この記事の中盤に対応します。最小二乗法と正規方程式の導出も同じところにあります。
グラム・シュミットの直交化法とルジャンドル多項式の関係は、Wikipedia の Legendre polynomials にまとまっています。区間 での直交性から定義する流儀と、母関数から定義する流儀の対応も書かれています。
無限次元での注意点は、ヒルベルト空間論の教科書に譲るのが確実です。nLab の Hilbert space が、閉部分空間についての直交分解定理と の形を簡潔に述べています。













W への正射影は ⟨u, u⟩⟨v, u⟩u=24(1, 1, 0)=(2, 2, 0) です。W⊥ 成分はそこから引いた残りで (3, 1, 2)−(2, 2, 0)=(1, −1, 2) になります。検算すると ⟨(1, −1, 2), (1, 1, 0)⟩=1−1+0=0 で、たしかに直交しています。(2, 2, 0) のほうは W 成分です。