Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

プログラマのための線形代数再入門

48 244 vues

Publié le

2015/1/30 「プログラマのための数学勉強会」にて発表。
動画: https://www.youtube.com/watch?v=hyzotMaTtPg

Publié dans : Sciences
  • Soyez le premier à commenter

プログラマのための線形代数再入門

  1. 1. プログラマのための線形代数 再 入門 ∼行列・線形変換・アフィン変換∼ @taketo1024 2015/01/30 第1回プログラマのための数学勉強会
  2. 2. 今日の内容 1. 行列の積 2. 線形変換とアフィン変換
  3. 3. 1. 行列の積
  4. 4. 行列の足し算 ✓ 3 5 4 10 ◆ + ✓ 3 4 5 8 ◆ = ✓ 3 + 3 5 + 4 4 + 5 10 + 8 ◆ = ✓ 6 9 9 18 ◆
  5. 5. 行列の掛け算 ✓ 3 5 4 10 ◆ ✓ 3 4 5 8 ◆ = ✓ 3 · 3 5 · 4 4 · 5 10 · 8 ◆ = ✓ 9 20 20 80 ◆
  6. 6. 行列の掛け算 ✓ 3 5 4 10 ◆ ✓ 3 4 5 8 ◆ = ✓ 3 · 3 5 · 4 4 · 5 10 · 8 ◆ = ✓ 9 20 20 80 ◆ こうだったら簡単だったのに…
  7. 7. 行列の掛け算 ✓ 3 5 4 10 ◆ ✓ 3 4 5 8 ◆ = ✓ 3 · 3 + 5 · 5 3 · 4 + 5 · 8 4 · 3 + 10 · 5 4 · 4 + 10 · 8 ◆ = ✓ 34 52 62 96 ◆ これが正しい計算規則です。
  8. 8. 行列の掛け算 ✓ 3 5 4 10 ◆ ✓ 3 4 5 8 ◆ = ✓ 3 · 3 + 5 · 5 3 · 4 + 5 · 8 4 · 3 + 10 · 5 4 · 4 + 10 · 8 ◆ = ✓ 34 52 62 96 ◆
  9. 9. 行列の掛け算 ✓ 3 5 4 10 ◆ ✓ 3 4 5 8 ◆ = ✓ 3 · 3 + 5 · 5 3 · 4 + 5 · 8 4 · 3 + 10 · 5 4 · 4 + 10 · 8 ◆ = ✓ 34 52 62 96 ◆
  10. 10. 行列の掛け算 ✓ 3 5 4 10 ◆ ✓ 3 4 5 8 ◆ = ✓ 3 · 3 + 5 · 5 3 · 4 + 5 · 8 4 · 3 + 10 · 5 4 · 4 + 10 · 8 ◆ = ✓ 34 52 62 96 ◆
  11. 11. 行列の掛け算 ✓ 3 5 4 10 ◆ ✓ 3 4 5 8 ◆ = ✓ 3 · 3 + 5 · 5 3 · 4 + 5 · 8 4 · 3 + 10 · 5 4 · 4 + 10 · 8 ◆ = ✓ 34 52 62 96 ◆
  12. 12. 行列の掛け算 ✓ 3 5 4 10 ◆ ✓ 3 4 5 8 ◆ = ✓ 3 · 3 + 5 · 5 3 · 4 + 5 · 8 4 · 3 + 10 · 5 4 · 4 + 10 · 8 ◆ = ✓ 34 52 62 96 ◆
  13. 13. 行列の掛け算 ✓ 3 5 4 10 ◆ ✓ 3 4 5 8 ◆ = ✓ 3 · 3 + 5 · 5 3 · 4 + 5 · 8 4 · 3 + 10 · 5 4 · 4 + 10 · 8 ◆ = ✓ 34 52 62 96 ◆
  14. 14. 行列の掛け算 ✓ 3 5 4 10 ◆ ✓ 3 4 5 8 ◆ = ✓ 3 · 3 + 5 · 5 3 · 4 + 5 · 8 4 · 3 + 10 · 5 4 · 4 + 10 · 8 ◆ = ✓ 34 52 62 96 ◆
  15. 15. 行列の掛け算 ✓ 3 5 4 10 ◆ ✓ 3 4 5 8 ◆ = ✓ 3 · 3 + 5 · 5 3 · 4 + 5 · 8 4 · 3 + 10 · 5 4 · 4 + 10 · 8 ◆ = ✓ 34 52 62 96 ◆
  16. 16. 行列の掛け算 ✓ 3 5 4 10 ◆ ✓ 3 4 5 8 ◆ = ✓ 3 · 3 + 5 · 5 3 · 4 + 5 · 8 4 · 3 + 10 · 5 4 · 4 + 10 · 8 ◆ = ✓ 34 52 62 96 ◆
  17. 17. 行列の掛け算 ✓ 3 5 4 10 ◆ ✓ 3 4 5 8 ◆ = ✓ 3 · 3 + 5 · 5 3 · 4 + 5 · 8 4 · 3 + 10 · 5 4 · 4 + 10 · 8 ◆ = ✓ 34 52 62 96 ◆
  18. 18. 行列の掛け算 ✓ 3 5 4 10 ◆ ✓ 3 4 5 8 ◆ = ✓ 3 · 3 + 5 · 5 3 · 4 + 5 · 8 4 · 3 + 10 · 5 4 · 4 + 10 · 8 ◆ = ✓ 34 52 62 96 ◆
  19. 19. 行列の掛け算 ✓ 3 5 4 10 ◆ ✓ 3 4 5 8 ◆ = ✓ 3 · 3 + 5 · 5 3 · 4 + 5 · 8 4 · 3 + 10 · 5 4 · 4 + 10 · 8 ◆ = ✓ 34 52 62 96 ◆ ふぅ…
  20. 20. 正直、3 3以上の行列計算は 地獄です。 (僕は必ず計算を間違うので気が狂いそうになる)
  21. 21. なぜこう定義する?
  22. 22. もんだい • さの工場では車とトラックを製造しています。 • 車の製造には作業員3人、ロボット5台の稼働が必 要です。 • トラックの製造には作業員4人、ロボット8台の稼 働が必要です。 • さの工場で車を2台、トラックを3台製造するのに 必要な作業員とロボットの稼働はいくらでしょう?
  23. 23. こたえ 車2台 : 2 (作業員:3人 + ロボット:5台) トラック3台 : 3 (作業員:4人 + ロボット:8台) +) 作業員 ロボット 車 3人/台 5人/台 トラック 4台/台 8台/台
  24. 24. こたえ 車2台 : 2 (作業員:3人 + ロボット:5台) トラック3台 : 3 (作業員:4人 + ロボット:8台) +) 作業員:(2 3 + 3 4) = 18人、 作業員 ロボット 車 3人/台 5人/台 トラック 4台/台 8台/台
  25. 25. こたえ 車2台 : 2 (作業員:3人 + ロボット:5台) トラック3台 : 3 (作業員:4人 + ロボット:8台) +) 作業員:(2 3 + 3 4) = 18人 ロボット:(2 5 + 3 8) = 34台 作業員 ロボット 車 3人/台 5人/台 トラック 4台/台 8台/台
  26. 26. こたえ 車2台 : 2 (作業員:3人 + ロボット:5台) トラック3台 : 3 (作業員:4人 + ロボット:8台) +) 作業員:(2 3 + 3 4) = 18人 ロボット:(2 5 + 3 8) = 34台 こたえ 作業員 ロボット 車 3人/台 5人/台 トラック 4台/台 8台/台
  27. 27. 行列の積で書き直すと…
  28. 28. (ベクトルは縦に書かないの?は後で説明します) 車・トラック 作業員・ロボット 2 3 ✓ 3 5 4 8 ◆ = 2 · 3 + 3 · 4 2 · 5 + 3 · 8 = 18 34 作業員 ロボット 車 3人/台 5人/台 トラック 4台/台 8台/台
  29. 29. もんだい 2 • 作業員はサンドイッチを2個食べ、コーヒーを3杯 飲みます。 • ロボットはサンドイッチ6個、コーヒー10杯を燃 料として動きます。 • さの工場で車を2台、トラックを3台製造するのに 必要なサンドイッチとコーヒーはいくらでしょう?
  30. 30. こたえ SW COFFEE 作業員 2個/人 3杯/人 ロボット 6個/台 10杯/台 作業員 ロボット 車 3人/台 5人/台 トラック 4台/台 8台/台 ✓ 3 5 4 8 ◆ ✓ 2 3 6 10 ◆
  31. 31. こたえ 2 3 ✓ 3 5 4 8 ◆ = 18 34 SW COFFEE 作業員 2個/人 3杯/人 ロボット 6個/台 10杯/台 作業員 ロボット 車 3人/台 5人/台 トラック 4台/台 8台/台 車・トラック 作業員・ロボット
  32. 32. こたえ 2 3 ✓ 3 5 4 8 ◆ = 18 34 18 34 ✓ 2 3 6 10 ◆ = 240 394 SW COFFEE 作業員 2個/人 3杯/人 ロボット 6個/台 10杯/台 作業員 ロボット 車 3人/台 5人/台 トラック 4台/台 8台/台 車・トラック 作業員・ロボット 作業員・ロボット
  33. 33. こたえ 2 3 ✓ 3 5 4 8 ◆ = 18 34 18 34 ✓ 2 3 6 10 ◆ = 240 394 SW COFFEE 作業員 2個/人 3杯/人 ロボット 6個/台 10杯/台 作業員 ロボット 車 3人/台 5人/台 トラック 4台/台 8台/台 こたえ 車・トラック 作業員・ロボット サンドイッチ・コーヒー作業員・ロボット
  34. 34. まとめて書けば: 2 3 ✓ 3 5 4 8 ◆ ✓ 2 3 6 10 ◆ = 18 34 ✓ 2 3 6 10 ◆ = 240 394
  35. 35. まとめて書けば: 2 3 ✓ 3 5 4 8 ◆ ✓ 2 3 6 10 ◆ = 18 34 ✓ 2 3 6 10 ◆ = 240 394先にこっちを計算すると…
  36. 36. まとめて書けば: 2 3 ✓ 3 5 4 8 ◆ ✓ 2 3 6 10 ◆ = 18 34 ✓ 2 3 6 10 ◆ = 240 394 ✓ 3 5 4 8 ◆ ✓ 2 3 6 10 ◆ = ✓ 3 · 2 + 5 · 6 3 · 3 + 5 · 10 4 · 2 + 8 · 6 4 · 3 + 8 · 10 ◆ = ✓ 36 59 56 92 ◆
  37. 37. まとめて書けば: 2 3 ✓ 3 5 4 8 ◆ ✓ 2 3 6 10 ◆ = 18 34 ✓ 2 3 6 10 ◆ = 240 394 ✓ 3 5 4 8 ◆ ✓ 2 3 6 10 ◆ = ✓ 3 · 2 + 5 · 6 3 · 3 + 5 · 10 4 · 2 + 8 · 6 4 · 3 + 8 · 10 ◆ = ✓ 36 59 56 92 ◆
  38. 38. まとめて書けば: 2 3 ✓ 3 5 4 8 ◆ ✓ 2 3 6 10 ◆ = 18 34 ✓ 2 3 6 10 ◆ = 240 394 2 3 ✓ 36 59 56 92 ◆ = 2 · 36 + 3 · 56 2 · 59 + 3 · 92 = 240 394
  39. 39. まとめて書けば: 2 3 ✓ 3 5 4 8 ◆ ✓ 2 3 6 10 ◆ = 18 34 ✓ 2 3 6 10 ◆ = 240 394 2 3 ✓ 36 59 56 92 ◆ = 2 · 36 + 3 · 56 2 · 59 + 3 · 92 = 240 394
  40. 40. まとめて書けば: 2 3 ✓ 3 5 4 8 ◆ ✓ 2 3 6 10 ◆ = 18 34 ✓ 2 3 6 10 ◆ = 240 394 2 3 ✓ 36 59 56 92 ◆ = 2 · 36 + 3 · 56 2 · 59 + 3 · 92 = 240 394 同じ!
  41. 41. 18 34 つまりこういうこと ✓ 3 5 4 8 ◆ ✓ 2 3 6 10 ◆ 車・トラック 作業員・ロボット サンドイッチ・コーヒー 52 95 240 394
  42. 42. 18 34 つまりこういうこと ✓ 3 5 4 8 ◆ ✓ 2 3 6 10 ◆ 車・トラック 作業員・ロボット サンドイッチ・コーヒー 52 95 ✓ 36 59 56 92 ◆ 一発でいける! 240 394
  43. 43. SW COFFEE 作業員 2個/人 3杯/人 ロボット 6個/台 10杯/台 作業員 ロボット 車 3人/台 5人/台 トラック 4台/台 8台/台 = SW COFFEE 車 36個/台 59杯/台 トラック 56個/台 92杯/台 ✓ 3 5 4 8 ◆ ✓ 2 3 6 10 ◆ = ✓ 36 59 56 92 ◆ 行列の掛け算は、対応表の合成になっていた! 打ち消しあう
  44. 44. もんだい 3 • では車を52台、トラックを95台製造するのに必要 なサンドイッチとコーヒーは?
  45. 45. こたえ 18 34 240 394 ✓ 3 5 4 8 ◆ ✓ 2 3 6 10 ◆ 車・トラック 作業員・ロボット サンドイッチ・コーヒー 52 95 … …
  46. 46. 18 34 こたえ ✓ 3 5 4 8 ◆ ✓ 2 3 6 10 ◆ 車・トラック 作業員・ロボット サンドイッチ・コーヒー 52 95 … ✓ 36 59 56 92 ◆ 一発でいきましょう 240 394…
  47. 47. 18 34 こたえ ✓ 3 5 4 8 ◆ ✓ 2 3 6 10 ◆ 車・トラック 作業員・ロボット サンドイッチ・コーヒー 52 95 … ✓ 36 59 56 92 ◆ 7192 11808 こたえ
  48. 48. 行列の積は変換の合成と対応する形で 定義されていた! x y x y A x y AB A B AB あらかじめ積を計算しておけば、中間をすっ飛ばせる!
  49. 49. ちなみに数学ではベクトルを縦に書き、 行列を左から掛けることが多い A B ✓ x y ◆ A ✓ x y ◆ BA ✓ x y ◆ BA 順序に注意! と書く場合はこっちの方が分かりやすいf(~x) = A~x
  50. 50. 「転置」を取れば同じ計算になる 2 3 ✓ 3 5 4 8 ◆ ✓ 2 3 6 10 ◆ = 240 394 ✓ 2 6 3 10 ◆ ✓ 3 4 5 8 ◆ ✓ 2 3 ◆ = ✓ 240 394 ◆ 左から作用 右から作用 … DirectX 系 … OpenGL 系
  51. 51. 以後、変換について話すので後者の スタイルで書きます。 (DirectX 系の人は脳内転置お願いします)
  52. 52. 2. 線形変換とアフィン変換
  53. 53. 線形変換 ベクトルの線形性(平行と比率)の保たれる変換 f
  54. 54. 線形変換 … 和をバラせる … 実数倍をバラせる ( f(~x + ~y) = f(~x) + f(~y) f(a · ~x) = a · f(~x)
  55. 55. ✓ 1 0 ◆ , ✓ 0 1 ◆ の行き先だけで決まる!線形変換は f ✓ 1 0 ◆ = ✓ ax ay ◆ , f ✓ 0 1 ◆ = ✓ bx by ◆ とすれば、 f ✓ x y ◆ = f(x · ✓ 1 0 ◆ + y · ✓ 0 1 ◆ ) = x · f ✓ 1 0 ◆ + y · f ✓ 0 1 ◆ = x · ✓ ax ay ◆ + y · ✓ bx by ◆ ✓ x y ◆ x ✓ 1 0 ◆ y ✓ 0 1 ◆ f ✓ x y ◆ = x ✓ ax ay ◆ + y ✓ bx by ◆ x ✓ ax ay ◆ y ✓ bx by ◆ f
  56. 56. その結果は行列とベクトルの積で書ける! x ✓ ax ay ◆ y ✓ bx by ◆ f ✓ x y ◆ = x ✓ ax ay ◆ + y ✓ bx by ◆ = ✓ ax bx ay by ◆ ✓ x y ◆ f ✓ x y ◆ = ✓ ax bx ay by ◆ ✓ x y ◆
  57. 57. つまり線形変換は の行き先を並べた行列で表現できる! ✓ 1 0 ◆ , ✓ 0 1 ◆ f f ✓ x y ◆ = ✓ ax bx ay by ◆ ✓ x y ◆ ✓ 1 0 ◆ ✓ 0 1 ◆ ✓ ax ay ◆ ✓ bx by ◆ … f の行列表示f
  58. 58. 同様に3次元ベクトルの線形変換は、 3次行列との積で書ける f 0 @ x y z 1 A = x 0 @ ax ay az 1 A + y 0 @ bx by bz 1 A + z 0 @ cx cy cz 1 A = 0 @ ax bx cx ay by cy az bz cz 1 A 0 @ x y z 1 A f 0 @ ax ay az 1 A 0 @ bx by bz 1 A 0 @ cx cy cz 1 A
  59. 59. 線形変換の合成は行列の積に対応する ✓ x y ◆ f ✓ x y ◆ = A ✓ x y ◆ g ✓ f ✓ x y ◆◆ = BA ✓ x y ◆ f g g f : f と g の合成f g 左から作用
  60. 60. 行列は線形変換の定量表現!
  61. 61. 線形変換にはどんなものが ある?
  62. 62. 等倍・偏倍変換 A = ✓ a 0 0 b ◆ ✓ 1 0 ◆ ✓ 0 1 ◆ f ✓ a 0 ◆ ✓ 0 b ◆
  63. 63. 回転 A = ✓ cos✓ sin✓ sin✓ cos✓ ◆ ✓ 1 0 ◆ ✓ 0 1 ◆ f ✓ cos ✓ sin ✓ ◆ ✓ sin ✓ cos ✓ ◆
  64. 64. 反転 A = ✓ 1 0 0 1 ◆ ✓ 1 0 ◆ ✓ 0 1 ◆ f ✓ 0 1 ◆ ✓ 1 0 ◆
  65. 65. 正射影 A = ✓ 1 0 0 0 ◆ ✓ 1 0 ◆ ✓ 0 1 ◆ f ✓ 1 0 ◆
  66. 66. 平行移動…? ✓ 1 0 ◆ ✓ 0 1 ◆ f ✓ p q ◆
  67. 67. とならない変換は線形でない! f ✓ 0 0 ◆ = ✓ 0 0 ◆ f ✓ 0 0 ◆ = f( ✓ 0 0 ◆ + ✓ 0 0 ◆ ) = 2f ✓ 0 0 ◆ f より、 でなければいけない。 f ✓ 0 0 ◆ = ✓ 0 0 ◆ ✓ p q ◆
  68. 68. えー、使えねぇ…
  69. 69. そんなことない!
  70. 70. xy 平面は xyz 空間の z=1 に浮いていると見る ✓ x y ◆ ✓ 1 0 ◆ ✓ 0 1 ◆ 0 @ 0 0 1 1 A 0 @ x y 1 1 A
  71. 71. xy平面の線形変換は、 z=1上で行われていると見る 0 @ ax bx 0 ay by 0 0 0 1 1 A 0 @ x y 1 1 A = 0 @ ✓ ax bx ay by ◆ ✓ x y ◆ 1 1 A z=1 のまま の線形変換 ✓ x y ◆
  72. 72. 一方、こういう3次行列を考えれば、 z=1 上の点の平行移動が表現できる! 0 @ 1 0 p 0 1 q 0 0 1 1 A 0 @ x y 1 1 A = 0 @ x + p y + q 1 1 A z=1 は固定されたまま! ✓ p q ◆ 平行移動
  73. 73. 真横から見ると分かる! x, y x, y z z z=1 z=1 0 @ 1 0 0 1 A , 0 @ 0 1 0 1 A 0 @ 0 0 1 1 A 0 @ 1 0 0 1 A , 0 @ 0 1 0 1 A 0 @ p q 1 1 A : 不変 z=1ではxy平面の平行移動! 空間全体は線形変換 0 @ 1 0 p 0 1 q 0 0 1 1 A
  74. 74. 平面上の平行移動は線形ではないが、 空間内に埋め込めば線形変換として表現できる!
  75. 75. 線形変換と平行移動を組み合わせたものを 「アフィン変換」という 0 @ 1 0 p 0 1 q 0 0 1 1 A 0 @ ax bx 0 ay by 0 0 0 1 1 A アフィン変換も一つ上の次元から見れば、 ただの線形変換! 線形変換 平行移動
  76. 76. 同様に xyz 空間も 4次元 xyzw 空間 において、 w=1 上に浮いてると考えれば、 xyz空間 w 0 B B @ 0 0 0 1 1 C C A x, y, z
  77. 77. 4次行列によって3次元空間の 線形変換・平行移動を表現できる! 0 B B @ ax bx cx 0 ay by cy 0 az bz cz 0 0 0 0 1 1 C C A 線形変換 0 B B @ 1 0 0 p 0 1 0 q 0 0 1 r 0 0 0 1 1 C C A 平行移動
  78. 78. これに加えて、 「射影変換」も一つ上の次元の行列で表現できる (需要があればまた次回)
  79. 79. 3Dレンダリングの座標変換は、 全て4次元行列の積で表現できる! オブジェクト座標 ワールド座標 スクリーン座標
  80. 80. まとめ 1. 行列は線形変換の定量表現 2. 行列の積は変換の合成に対応 3. 次数をあげれば平行移動も射影も表現できる
  81. 81. Thanks! Twitter: @taketo1024
 Blog: http://taketo1024.hateblo.jp

×