線形代数の勉強を始めたばかりの人がよく感じる行列の積に関する疑問や違和感をベクトル内積の知識で極力違和感を解消できるように解説してみました。
行ベクトルと列ベクトルの積
まず、\(1\times m\)行列を行ベクトル、\(m\times 1\)行列を列ベクトルと呼びます。高校でベクトルを習ったときにベクトルを\(\vec{a}=\begin{pmatrix}x,y,z\end{pmatrix}\)と書いたり\(\vec{a}=\begin{pmatrix}x\\y\\z\end{pmatrix}\)と書いたりしていたのと同じです。
ここで、行ベクトルと列ベクトルの積からスカラーを求めたいと仮定しましょう。このとき、自然と思いつくのはベクトルの内積を利用することだと思います。行ベクトルと列ベクトルの場合、内積計算はこのようになるでしょう。
$$A\cdot B=\begin{bmatrix}a_{11}&\cdots&a_{1m}\end{bmatrix} \begin{bmatrix}b_{11}\\ \vdots\\ b_{m1}\end{bmatrix}=a_{11}b_{11}+\cdots+a_{1m}b_{m1}$$
各成分は実数であることに留意します。また、ベクトルの内積の定義から、成分の個数が異なれば計算不能になることがわかりますね。
行列と列ベクトルの積
次に、\(1\times m\)行列\(A\)についての成分を増やして計算してみたいと思うわけですが、行をこれ以上増やしてしまうと計算不能になってしまうことがわかっているので、自然と列を一つ足して\(2\times m\)行列を考えることになります。これを新しく行列\(A\)とした場合、\(A\)と\(B\)の積
$$A\cdot B=\begin{bmatrix}a_{11}&\cdots&a_{1m}\\a_{21}&\cdots&a_{2m}\end{bmatrix} \begin{bmatrix}b_{11}\\ \vdots\\ b_{m1}\end{bmatrix}$$
この積の結果を定義するならば、\(A\)を(2\times m\)行列としたので、2行の行ベクトルから構成されているため、\(A\)の各列の行ベクトルが列ベクトル\(B\)との内積をとり、二つの内積の答えが2行に並ぶと考えるのが自然でしょう。式にするとこうなります。
$$A\cdot B=\begin{bmatrix}a_{11}&\cdots&a_{1m}\\a_{21}&\cdots&a_{2m}\end{bmatrix} \begin{bmatrix}b_{11}\\ \vdots\\ b_{m1}\end{bmatrix}=\begin{bmatrix}a_{11}b_{11}+\cdots+a_{1m}b_{m1}\\a_{21}b_{11}+\cdots+a_{2m}b_{m1}\end{bmatrix}$$
ここで、結果として出た答えの一行目と二行目はそれぞれ\(A\)の一行目の行ベクトルと列ベクトル\(B\)との内積と\(A\)の二行目の行ベクトルと列ベクトル\(B\)との内積とに対応します。
この考えを用いれば\(A\)が何行の行ベクトルで構成された行列としても説明がつくので、\(A\)を\(l\)行の行ベクトルの集合体とみなせば、一般的にこのような式が成り立つと言っても良いでしょう。
$$A\cdot B=\begin{bmatrix}a_{11}&\cdots&a_{1m}\\\vdots&\ddots&\vdots\\ a_{l1}&\cdots&a_{lm}\end{bmatrix} \begin{bmatrix}b_{11}\\\vdots\\b_{m1}\end{bmatrix}=\begin{bmatrix}a_{11}b_{11}+\cdots+a_{1m}b_{m1}\\\vdots\\a_{l1}b_{11}+\cdots+a_{lm}b_{m1}\end{bmatrix}$$
行列と行列の積
行列\(A\)と列ベクトル\(B\)の定義ができたら、最後に\(B\)の成分を増やしたらどうなるのかを考えましょう。\(B\)の行を増やしてしまうとこれまでの演算定義によればベクトルの内積が計算不能になるため、\(B\)の列を追加する方針に至るはずです。これはこれまでの考え方によれば列ベクトルの数を増やしているのと同義になりますね。そして同様に\(B\)の列を増やせばその分だけ結果の列も増えるはずです。
したがって、行列と行列の積はこのように定義できるわけです。
$$A\cdot B=\begin{bmatrix}a_{11}&\cdots&a_{1m}\\\vdots&\ddots&\vdots\\ a_{l1}&\cdots&a_{lm}\end{bmatrix} \begin{bmatrix}b_{11}&\cdots&b_{1n}\\\vdots&\ddots&\vdots\\b_{m1}&\cdots&b_{mn}\end{bmatrix}$$
$$=\begin{bmatrix}a_{11}b_{11}+\cdots+a_{1m}b_{m1}&\cdots&a_{11}b_{1n}+\cdots+a_{1m}b_{mn}\\\vdots&\ddots&\vdots\\a_{l1}b_{11}+\cdots+a_{lm}b_{m1}&\cdots&a_{l1}b_{1n}+\cdots+a_{lm}b_{mn}\end{bmatrix}$$
\(A\)を\(l\)行の行ベクトルの集合体、\(B\)を\(n\)列の列ベクトルの集合体ととらえて順に内積を求めていけば、行列と行列の式がこのように定義されるのも少しは納得できるかと思います。
ここで、最初からベクトルの内積のように列ベクトルと列ベクトルの積で定義してはいけないのだろうかと考える方もいると思います。つまりこういうことです。
$$A\cdot B=\begin{bmatrix}a_{11}\\\vdots\\a_{m1}\end{bmatrix}\begin{bmatrix}b_{11}\\\vdots\\b_{m1}\end{bmatrix}=a_{11}b_{11}+\cdots+a_{m1}b_{m1}$$
一見こっちのがベクトルの内積と対応していてわかりやすそうですが、\(A\)の列を増やしてみましょう。すると必然と結果の列も増えると考えられますね。
$$A\cdot B=\begin{bmatrix}a_{11}&\cdots&a_{1l}\\\vdots&\ddots&\vdots\\a_{m1}&\cdots&a_{ml}\end{bmatrix}\begin{bmatrix}b_{11}\\\vdots\\b_{m1}\end{bmatrix}$$
$$=\begin{bmatrix}a_{11}b_{11}+\cdots+a_{m1}b_{m1}&\cdots&a_{1n}b_{11}+\cdots+a_{mn}b_{m1}\end{bmatrix}$$
次に\(B\)の列も増やそうとした場合、結果の列がさらに増えると考えるのも、逆に行が増えるとも考えにくいですよね。よってこのような定義では都合があまり良くないことがわかります。
まとめ
- 行列の積は\(A\)を\(l\)行の行ベクトルの集合体、\(B\)を\(n\)列の列ベクトルの集合体ととらえて順に内積を求めたものと考えることができる。
参考文献
- 高木悟・長谷川研二・熊ノ郷直人・菊田伸・森澤貴之.2023.『理工系のための線形代数』.培風館