線形代数のまとめ その1(線形空間、基底とか)

プログラミングのための線形代数という本で線形代数の復習をしている。4章あたりまで読んだので振り返りとしてメモを残すことにする。

よく変数で配列だったりタプルだったりを使うことがある。これは複数の数値や文字列の集まりを一つのものとして見る。物理や線形代数だったりの勉強をしているとそれらはベクトルと呼ばれてる。
f:id:Owatank:20171219101249p:plain
こんなやつ。大学だと矢印じゃなくて太字で書くものしか見ない...

ベクトルでは同じ次元(上で言うとnの値)のもの同士なら足し算(引き算)と定数倍ができる。
例えばこんなベクトルがあるとして
3人の現在の身長 = (1.5m,1.8m,1.7m)
3人の2年前の身長 = (1.4m,1.6m,1.5m)

3人の2年前から伸びた分の身長を求めたいとする。これは現在の身長から2年前の身長を引いて残ったものが伸びた分になるから

3人の2年前から伸びた分の身長 = 3人の現在の身長 - 3人の2年前の身長
= (1.5m - 1.4m , 1.8m - 1.6m , 1.7m - 1.5m)
= (0.1m , 0.2m ,0.2m)

3人の2年前から伸びた分の身長= (0.1m , 0.2m ,0.2m)となる。

定数倍は
3人の現在の身長を3倍したもの = 3*(3人の現在の身長)と表せることができて

3人の現在の身長を3倍したもの = 3*(3人の現在の身長)
= 3*(1.5m,1.8m,1.7m)
= (3*1.5m,3*1.8m,3*1.7m)
= (4.5m,5.4m,5.1m)

ベクトルを構成している各要素を c倍 すればいい

掛け算や割り算もできそうじゃんって思うけど、できない
3人の現在の身長(cm表記) = (150cm,180cm,170cm) 3人の2年前の身長(cm表記) = (140cm,160cm,150cm) 先ほどのベクトルをcm表記で表したものを用意する。

この2つから3人の2年前から伸びた分の身長(cm表記)3人の現在の身長を3倍したもの(cm表記)を求めると

3人の2年前から伸びた分の身長(cm表記) = 3人の現在の身長(cm表記) - 3人の2年前の身長(cm表記)
= (150m - 140cm , 180cm - 160cm , 170m - 150cm)
= (10cm , 20cm , 20cm)
3人の現在の身長を3倍したもの(cm表記) = 3*(3人の現在の身長(cm表記))
= 3*(150cm,180cm,170cm)
= (3*150cm,3*180cm,3*170cm)
= (450cm,540cm,510cm)

表記は違うけど、求めたいものの意味合い(数値)は同じ

(3人の現在の身長)x(3人の2年前の身長)(3人の現在の身長(cm表記))x(3人の2年前の身長(cm表記))は同じになるか考える

(3人の現在の身長)x(3人の2年前の身長)
=(1.5*1.4, 1.8*1.6, 1.7*1.5)
=(2.1m, 2.88m, 2.55m)
(3人の現在の身長(cm表記))x(3人の2年前の身長(cm表記))
=(150*140, 180*160, 170*150)
=(21000, 28800, 25500)  //m表記に直すと
=(21m, 28.8m, 25.5m)

足し算や定数倍は同じものだったのに掛け算は全く別物になってしまった。
こんな風に掛け算と割り算はcmをmに直すといった座標系と呼ばれるものを変更するとxy = zx'y' ≠ z'という感じになってしまうからできない。というよりは成立するかわからないからできない。

元に戻って「足し算(引き算)」と「定数倍」が定義された世界のことを線形空間またはベクトル空間と呼ぶ。
ベクトルというのは以下のように矢印のようなもので表すことができる。(x軸とy軸で構成する2次元空間とする)
f:id:Owatank:20171219105321p:plain
これは { \displaystyle \vec{v} } という場所にはx座標に3歩進んで、y座標に2歩進むことで到着できる を表す

ちょっと待ってほしい。この方眼紙のような目盛りって誰が用意したのだ

もしこの目盛りがなくなったとして、こんな状況を考える
f:id:Owatank:20171219112038p:plain 誰かに { \displaystyle \vec{v} } の地点までお使いして欲しいとき、行き方はどうやって教えればいいだろう
目盛りがないと3コマ目のようにどの方向にどんな歩幅で3歩、2歩進めばいいか悩んでしまう。

目盛りがないなら、自分で作ればいいじゃん!ということで基準(目盛り)となるベクトル { \displaystyle
\vec{e_1},...,\vec{e_n}
}を定める。

基準を決めてしまえば、それを使って { \displaystyle \vec{v} } への行き先を「{ \displaystyle \vec{e_i}}の方向に3歩、{ \displaystyle \vec{e_j}}の方向に2歩進む」と伝えることができる。

f:id:Owatank:20171219113911p:plain

ベクトルは足し算、定数倍できることはわかったから{ \displaystyle \vec{v} = 3\vec{e_i} + 2\vec{e_j}}と書ける。
つまり{ \displaystyle \vec{v}}{ \displaystyle \vec{e_i}}{ \displaystyle \vec{e_j}}という基準の組み合わせで表現できるということ。

「基準となる1組のベクトル」を基底、「各基準で何歩進むか」を座標と呼ぶ。
上の例だと「基底{ \displaystyle (\vec{e_i},\vec{e_j})}に関して、ベクトル{ \displaystyle \vec{v}}の座標は{ \displaystyle \vec{v}=(3,2)^{T}}
ここでは基底は{ \displaystyle (\vec{e_i},\vec{e_j})}の組であり、各要素{ \displaystyle \vec{e_i}}{ \displaystyle \vec{e_j}}のことを基底ベクトルという。

基底という目盛りを自分で作れることがわかったけど、基底{ \displaystyle \vec{e_1},...,\vec{e_n} }を作るにも条件がある。

  • (今考えている線形空間内の)どのベクトル{ \displaystyle \vec{v}}でも { \displaystyle \vec{v} = x_1 \vec{e_1} + ... + x_n \vec{e_n}}という形で表せること(x1,...,xnは任意の数)

  • その表し方は一通りであること

一つ目は特定のベクトルだけ表せる基底なんて基底と言えない。二つ目は表し方が一通りでないと、異なる座標{ \displaystyle \boldsymbol{x}=(x1,...,xn)^{T}}{ \displaystyle \boldsymbol{y}=(y1,...,yn)^{T}}が与えられたときそれが違うもの同士か同じものが2通りの書き方をされているか困ってしまうことがあるから

2次元空間において以下のようなものが基底として取れる
f:id:Owatank:20171219121200p:plain
2本の基底ベクトルが「独立した方向」を向いていること
この独立という単語がいまいち難しいかもしれないけど、後々大事になってくる

以下のようなものは基底として取れない悪い例
f:id:Owatank:20171219121642p:plain

  • 左は1本の基底ベクトルでは無理ということ
    2次元空間なのに1本の基底ベクトルでは(x軸、y軸としたら)片方の軸しか表すことが出来ないから。これは基底の条件である
    どのベクトル{ \displaystyle \vec{v}}でも { \displaystyle \vec{v} = x_1 \vec{e_1} + ... + x_n \vec{e_n}}という形で表せることという条件を破ってしまう

  • 真ん中は2次元空間において3本(以上)の基底ベクトルは余分ということ
    { \displaystyle \vec{e_k}}という基底ベクトルは{ \displaystyle \vec{e_i}}{ \displaystyle \vec{e_j}}で表すことができるから必要ない。(基底の組として要素にする必要がない)

  • 右は2本の基底ベクトルが同じ方向ではダメということ
    { \displaystyle \vec{e_i}}を c倍 すれば{ \displaystyle \vec{e_j}}になるから{ \displaystyle \vec{e_j}}は余分
    結局1本の基底ベクトルだけということになる。これは基底の条件の一つ目を破ってしまうのでダメ

数学的な表現では

{ \displaystyle u_1 \vec{e_1} + ... + u_n \vec{e_n} = \vec{0}} ならば { \displaystyle u_1 = ... = u_n = 0 }

与えられたベクトル{ \displaystyle \vec{e_1},...,\vec{e_n} }に対して、任意の数{ \displaystyle u_1 , ... , u_n }を用意してできるベクトル
{ \displaystyle u_1 \vec{e_1} + ... + u_n \vec{e_n} }{ \displaystyle \vec{e_1},...,\vec{e_n} }線型結合をよぶ
複数のベクトルを n倍 だったり m倍 して足したり引いたりしたものをその複数のベクトルの線型結合というんだな

これらの条件から基底は「{ \displaystyle \vec{e_1},...,\vec{e_n} }の線型結合で任意のベクトル{ \displaystyle \vec{v}}が表現できて、その表し方が一通り(唯一)であるとき、{ \displaystyle (\vec{e_1},...,\vec{e_n}) }を基底と呼ぶ」

おまけで次元数は基底ベクトルの本数から定義されるので
次元 = 基底ベクトルの本数 = 座標の成分数 と定義される。

長くなったのでここまで