「プログラマのための線形代数」ウォーミングアップ

「プログラマのための線形代数(3/16,17 土日)」に向けて講師・佐野がウォーミングアップ連ツイをお送りしています。興味を持った方は是非勉強会の詳細を覗いて見てください 👉 https://linalg-math4pg.peatix.com/
37
さのたけと @taketo1024

勉強会の宣伝と参加者へのウォーミングアップも兼ねて、このスレで僕なりの「線形代数のこころ」をツイートしていこうと思います。ここに書いていく話を勉強会に盛り込んでいく予定なので、「なるほど!」と思うことがあれば参加を検討してみて下さい😉

2019-02-21 13:01:44
さのたけと @taketo1024

【行列とは?1】線形代数は(狭い意味では)ベクトルと行列の理論です。行列の定義や演算規則に触れる前に、「なぜそう定義するのか?」を納得するために、小学校で学んだ「比例関係」を思い出してみましょう。二つの量 x, y が y = ax と書けるとき「y は x に比例する」と言います。 pic.twitter.com/9G4tHUdexa

2019-02-21 13:01:44
拡大
さのたけと @taketo1024

【行列とは?2】x を入力、 y を出力とみて「y は x の一次関数である」とも言います。重要なのは「x, y が比例関係にある」と分かっているとき「比例定数 a」さえ分かってしまえば「x から y への対応は全て分かってしまう」という点です。特に x = 1 のときの y で a は得られます。

2019-02-21 13:01:45
さのたけと @taketo1024

【行列とは?3】さて、世の中の現象は複雑で、それを記述するのには多変数の関係が必要になります。最も単純なケースとして、比例関係を多変数に拡張することを考えます。つまり x, y を n 次元の量(ベクトル)として「多変数の比例関係」を考えましょう。

2019-02-21 13:01:45
さのたけと @taketo1024

【行列とは?4】(正確な定式化はさておき)x の一つの成分と y の一つの成分が(x の他の成分を 0 として)比例関係にあるとき、その関係は一つの比例定数で表せます。この関係が全ての成分の組に対して成り立つとき、比例定数は n × n 個必要で、これをまとめたものが行列 A = (a_ij) です。 pic.twitter.com/AFkMLhEuTz

2019-02-21 13:01:45
拡大
拡大
さのたけと @taketo1024

【行列とは?5】比例関係 y = ax があるとき、 a を x に掛ければ y が計算できます。多変数の場合も、上の関係があるとき y = Ax と書くことにして、A を x に掛ければ y が計算できる「ように」行列とベクトルの積を定義します。 pic.twitter.com/lYiczVenXJ

2019-02-21 13:01:46
拡大
さのたけと @taketo1024

【行列とは?6】次に、二つの比例関係 y = ax と z = by があるとします。 z は x によって z = b(ax) = (ba)x と書けます。これと同様に、行列 A, B によって y = Ax と z = By と書けているとき、z = B(Ax) となりますが、B(Ax) = (BA)x が「成り立つように」行列の積 (BA) を定義します。 pic.twitter.com/LsQ6ZvcGit

2019-02-21 13:01:46
拡大
さのたけと @taketo1024

【行列とは?7】行列を「多変数の比例関係における比例定数」と見ると、 n × n 個の数の組が必要であることも、掛け算を「横縦に掛けて足す」で定義することも妥当なものだと感じられると思います。線形代数ではより広い「線形写像」を扱いますが、その具体的な計算は行列によって行われます。

2019-02-21 13:01:46
さのたけと @taketo1024

【行列とは?8】ところで「世の中の現象は複雑」だというのに「多変数の比例関係」しか扱えない線形代数が「役に立つ」のは何故なのでしょう?「人月の神話」という言葉がある通り、世の中はそんなに単純ではありません。しかし、複雑な現象でも「微小な変化は線形に近似できる」ことが多くあります。

2019-02-21 13:01:47
さのたけと @taketo1024

【行列とは?9】高校で「微分して接線を求める」ことをやりますが、これは関数を特定の点で一次関数に近似することと同じです。微分係数は「無限小の比例係数」と言えます。同様に多変数関数についても、各変数方向の微分(偏微分)を考えることで、関数を「線形近似」することができるのです。 pic.twitter.com/AqS2JRegTE

2019-02-21 13:01:47
拡大
さのたけと @taketo1024

【行列とは?10】微分によって非線形なものが「線形化」され、線形化された世界では線形代数が縦横無尽に使えます。そこで得られた情報から、元の非線形な現象についての情報が復元できるのは面白いところです。こうして解析学(微分積分)と線形代数学は、数学とその応用における基礎となります。 pic.twitter.com/zjgsX0zEC6

2019-02-21 13:01:47
拡大
さのたけと @taketo1024

次回は「ベクトル空間の公理」について書いてみようと思います😉 【宣伝】 3/16(土), 17(日) 「プログラマのための線形代数」を開催します。線形代数の基礎を(上のように分かりやすく)プログラマ向けに解説し、コードを書いて学ぼうという試みです👍 linalg-math4pg.peatix.com

2019-02-21 13:01:48
さのたけと @taketo1024

【ベクトル空間1】前回、線形代数は「(狭い意味では)ベクトルと行列の理論」だと書きました。広い意味では、線形代数はベクトル空間と線形写像の理論です。今回は抽象的な「ベクトル空間の公理」を、プログラミングにおけるインターフェースにたとえて説明してみようと思います。

2019-02-22 18:51:46
さのたけと @taketo1024

【ベクトル空間2】集合 V が「ベクトル空間」であるとは、V に「和」と「スカラー倍」という二つの演算が定まっていて、以下の公理を満たすことと定義されます(表は Wikipedia より転載)。ベクトル空間 V の要素のことを「ベクトル」と言います。 pic.twitter.com/h95O49oAh3

2019-02-22 18:51:46
拡大
さのたけと @taketo1024

【ベクトル空間3】「公理」と言われると「うっ」となるかも知れませんが、一つ一つ見てみると、高校でベクトルを学んだ人には当たり前のことが書いてあるように見えるはずです。しかし、上の公理で主張しているのは「ベクトルはこれらの性質を満たす」ということではないのです。

2019-02-22 18:51:47
さのたけと @taketo1024

【ベクトル空間4】主張は逆で、「これらを満たすものをベクトルと呼ぶ」と宣言しているのです。実は、幾何ベクトル(矢印)だけでなく、高校までに学ぶほとんどの数学的対象は、実数も、複素数も、数列も、行列も、関数も、多項式も、すべて「ベクトル」なのです!(確認してみましょう)

2019-02-22 18:51:47
さのたけと @taketo1024

【ベクトル空間5】公理にある性質だけを仮定して何が言えるかを調べるのが「広い意味での線形代数」です。ここで、もし V に有限個の「基底」が取れるなら、それによって V は数ベクトル空間に、V 上の変換は行列に対応して、議論を「狭い意味での線形代数」に落とすことができます(詳しくはまた)。

2019-02-22 18:51:47
さのたけと @taketo1024

【ベクトル空間6】抽象化のメリットは、議論の見通しがよくなることと、抽象的な定義の元で成り立つ性質が「それを満たす全ての具体的な対象」で成り立つことです。このことは、プログラマなら「クラスを抽象化」したり「機能をインターフェースとして切り出す」ときの動機として知っているはずです。

2019-02-22 18:51:48
さのたけと @taketo1024

【ベクトル空間7】擬似コードで VectorSpace を interface として、Vec3 (3次元ベクトル)を VectorSpace を実装した class として書いてみました。公理の要請は、各実装で保証されるべき「仕様」と考えれば分かりやすいと思います。これで VectorSpace を引数に取る処理は全て共通化できます、便利! pic.twitter.com/YezBqIvkOt

2019-02-22 18:51:48
拡大
拡大
さのたけと @taketo1024

【ベクトル空間8】ベクトル空間の公理は階層化されています。まず「集合」に和が入って「アーベル群」となり、さらにスカラー倍が入って「環上の加群」となり、この環が体のときに「ベクトル空間」となります。現代数学の理論は、複雑な多重継承の上で成り立っていると言えます。

2019-02-22 18:51:48
さのたけと @taketo1024

【ベクトル空間9】ちなみに僕が趣味で作った SwiftyMath では、VectorSpace 型を上の階層構造に合わせて定義しています。興味のある方はコードを掘り下げて見て下さい😉 github.com/taketo1024/Swi…

2019-02-22 18:51:49
さのたけと @taketo1024

「ベクトル空間の公理」が身近に感じられたでしょうか?次回は「線形変換と行列」について書いてみようと思います😉 【宣伝】 3/16(土), 17(日) 「プログラマのための線形代数」を開催します。線形代数の基礎をプログラマ向けに解説し、コードを書いて学ぼうという試みです👍 linalg-math4pg.peatix.com/view

2019-02-22 18:51:49
さのたけと @taketo1024

【線形変換と行列1】今回は「線形変換と行列」の関係を2次元平面の場合に限って説明します。前回「広い意味での線形代数」として「ベクトル空間の公理」について書きましたが、そのことを頭の片隅に入れつつ「どう一般化するんだろう?」と考えながら読んで頂けると先の話に繋がりやすいと思います。

2019-02-26 13:40:43
さのたけと @taketo1024

【線形変換と行列2】V を xy 平面とし、V 上の点 A を原点 O からのベクトル OA と同一視します。V において「二つの矢印を足す」「矢印を実数倍する」という二つの演算を定めることで、V には代数構造(つまりベクトル空間の構造)が入ることは、高校のベクトルの授業でやる通りです。 pic.twitter.com/NDf88EW8pQ

2019-02-26 13:40:44
拡大
拡大
さのたけと @taketo1024

【線形変換と行列3】x 軸方向の単位ベクトル e_1 と、y 軸方向の単位ベクトル e_2 によって、任意のベクトル OA は OA = a e_1 + b e_2 と分解できます。これによって OA は (a, b)^T という数の組と同一視できます(慣習により数は縦に並べます)。これをベクトルの「成分表示」というのでした。 pic.twitter.com/sowFWU7wn0

2019-02-26 13:40:44
拡大