Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列

56,491 views

Published on

2015/03/27 「第2回プログラマのための数学勉強会」にて発表。
http://maths4pg.connpass.com/event/11781/

Published in: Education
  • Login to see the comments

プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列

  1. 1. プログラマのための線形代数 再 入門 2 ∼要件定義から学ぶ行列式と逆行列∼ @taketo1024 2015/03/27 第2回プログラマのための数学勉強会
  2. 2. 今回の目標 ただの計算地獄だった行列式と逆行列を システム開発の文脈で説明し直し、 プログラマが納得して使えるようになること。
  3. 3. 行列式 (determinant)
  4. 4. 行列式 (determinant) A = ✓ 1 2 3 4 ◆
  5. 5. 行列式 (determinant) A = ✓ 1 2 3 4 ◆ detA = 1 2 3 4 = 1 · 4 2 · 3
  6. 6. 行列式 (determinant) A = ✓ 1 2 3 4 ◆ detA = 1 2 3 4 = 1 · 4 2 · 3 +
  7. 7. 行列式 (determinant) A = ✓ 1 2 3 4 ◆ detA = 1 2 3 4 = 1 · 4 2 · 3 -
  8. 8. 行列式 (determinant) A = ✓ 1 2 3 4 ◆ detA = 1 2 3 4 = 1 · 4 2 · 3 = 2
  9. 9. 行列式 (determinant) A = 0 @ 1 2 3 4 5 6 7 8 9 1 A
  10. 10. 行列式 (determinant) A = 0 @ 1 2 3 4 5 6 7 8 9 1 A detA = 1 2 3 4 5 6 7 8 9 = 1 · 5 · 9 + 2 · 6 · 7 + 3 · 4 · 8 3 · 5 · 7 2 · 4 · 9 1 · 6 · 8
  11. 11. 行列式 (determinant) A = 0 @ 1 2 3 4 5 6 7 8 9 1 A detA = 1 2 3 4 5 6 7 8 9 = 1 · 5 · 9 + 2 · 6 · 7 + 3 · 4 · 8 3 · 5 · 7 2 · 4 · 9 1 · 6 · 8
  12. 12. 行列式 (determinant) A = 0 @ 1 2 3 4 5 6 7 8 9 1 A detA = 1 2 3 4 5 6 7 8 9 = 1 · 5 · 9 + 2 · 6 · 7 + 3 · 4 · 8 3 · 5 · 7 2 · 4 · 9 1 · 6 · 8
  13. 13. 行列式 (determinant) A = 0 @ 1 2 3 4 5 6 7 8 9 1 A detA = 1 2 3 4 5 6 7 8 9 = 1 · 5 · 9 + 2 · 6 · 7 + 3 · 4 · 8 3 · 5 · 7 2 · 4 · 9 1 · 6 · 8
  14. 14. 行列式 (determinant) A = 0 @ 1 2 3 4 5 6 7 8 9 1 A detA = 1 2 3 4 5 6 7 8 9 = 1 · 5 · 9 + 2 · 6 · 7 + 3 · 4 · 8 3 · 5 · 7 2 · 4 · 9 1 · 6 · 8
  15. 15. 行列式 (determinant) A = 0 @ 1 2 3 4 5 6 7 8 9 1 A detA = 1 2 3 4 5 6 7 8 9 = 1 · 5 · 9 + 2 · 6 · 7 + 3 · 4 · 8 3 · 5 · 7 2 · 4 · 9 1 · 6 · 8
  16. 16. 行列式 (determinant) A = 0 @ 1 2 3 4 5 6 7 8 9 1 A detA = 1 2 3 4 5 6 7 8 9 = 1 · 5 · 9 + 2 · 6 · 7 + 3 · 4 · 8 3 · 5 · 7 2 · 4 · 9 1 · 6 · 8
  17. 17. 行列式 (determinant) A = 0 @ 1 2 3 4 5 6 7 8 9 1 A detA = 1 2 3 4 5 6 7 8 9 = 1 · 5 · 9 + 2 · 6 · 7 + 3 · 4 · 8 3 · 5 · 7 2 · 4 · 9 1 · 6 · 8 = 0
  18. 18. 行列式 (determinant) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  19. 19. 行列式 (determinant) = 1 · 6 · 11 · 16 1 · 6 · 12 · 15 + 1 · 7 · 12 · 14 1 · 7 · 10 · 16 + 1 · 8 · 11 · 14 1 · 8 · 10 · 15 +2 · 5 · 12 · 15 2 · 5 · 11 · 16 + 2 · 7 · 9 · 16 2 · 7 · 12 · 13 + 2 · 8 · 11 · 13 2 · 8 · 9 · 15 +3 · 5 · 10 · 16 3 · 5 · 12 · 14 + 3 · 6 · 12 · 13 3 · 6 · 9 · 16 + 3 · 8 · 9 · 14 3 · 8 · 10 · 13 +4 · 5 · 10 · 15 4 · 5 · 11 · 14 + 4 · 6 · 9 · 15 4 · 6 · 11 · 13 + 4 · 7 · 10 · 13 4 · 7 · 9 · 13 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 !?
  20. 20. 人間がやるべき計算じゃない
 (コンピュータのある時代でよかった)
  21. 21. 計算は機械がやればいいが、 これが何なのかは分かっておきたい。
  22. 22. プログラマの「理解」の3層構造 • 要件が分かる:何のためのものなのか • 仕様が分かる:何を与えると何が返ってくるのか • 実装が分かる:どのように動いているのか プログラマはこの3つが ってはじめて「分かった」と言える。
  23. 23. 1. 行列式の「要件」
  24. 24. (復習) 行列は線形変換の定量表現 ✓ x y ◆ x ✓ 1 0 ◆ y ✓ 0 1 ◆ f y ✓ bx by ◆ x ✓ ax ay ◆ f ✓ x y ◆ = ✓ ax bx ay by ◆ ✓ x y ◆
  25. 25. (復習) 等倍・偏倍変換 A = ✓ a 0 0 b ◆ ✓ 1 0 ◆ ✓ 0 1 ◆ f ✓ a 0 ◆ ✓ 0 b ◆
  26. 26. (復習) 回転 A = ✓ cos✓ sin✓ sin✓ cos✓ ◆ ✓ 1 0 ◆ ✓ 0 1 ◆ f ✓ cos ✓ sin ✓ ◆ ✓ sin ✓ cos ✓ ◆
  27. 27. (復習) 反転 A = ✓ 1 0 0 1 ◆ ✓ 1 0 ◆ ✓ 0 1 ◆ f ✓ 0 1 ◆ ✓ 1 0 ◆
  28. 28. (復習) 正射影 A = ✓ 1 0 0 0 ◆ ✓ 1 0 ◆ ✓ 0 1 ◆ f ✓ 1 0 ◆
  29. 29. ✓ 1 0 ◆ ✓ 0 1 ◆ ✓ a 0 ◆ ✓ 0 b ◆ ✓ cos ✓ sin ✓ ◆ ✓ sin ✓ cos ✓ ◆ ✓ 0 1 ◆ ✓ 1 0 ◆ ✓ 1 0 ◆ f 変換の特徴を表す 1次元の量 を考えたい 特に潰れるかどうかを 判別したい
  30. 30. 潰れると元に戻せない! ✓ 1 0 ◆ ✓ 0 1 ◆ ✓ 1 0 ◆ f ✓ 1 0 ◆ ✓ 0 1 ◆ f f 1 ? 同じように潰れてしまう 復元できない!
  31. 31. 行列式の「要件」 • n次元の線形変換は n次正方行列 (n2 個の数) で表される。 • 線形変換の特徴を 1次元の量 によって表したい。 • 特に「潰れてしまう」かどうかを判別したい。 n次正方行列 A detAの行列式A (1次元の量)
  32. 32. 2. 行列式の「仕様」
  33. 33. 変換後の面積と向きに注目!
  34. 34. ✓ 1 0 ◆ ✓ 0 1 ◆ ✓ a 0 ◆ ✓ 0 b ◆ ✓ cos ✓ sin ✓ ◆ ✓ sin ✓ cos ✓ ◆ ✓ 0 1 ◆ ✓ 1 0 ◆ ✓ 1 0 ◆ f 面積 ab 倍 面積同じ 面積同じ 面積 0
  35. 35. ✓ 1 0 ◆ ✓ 0 1 ◆ ✓ a 0 ◆ ✓ 0 b ◆ ✓ cos ✓ sin ✓ ◆ ✓ sin ✓ cos ✓ ◆ ✓ 0 1 ◆ ✓ 1 0 ◆ ✓ 1 0 ◆ f 表向き 表向き 裏向き 向きなし
  36. 36. ✓ 1 0 ◆ ✓ 0 1 ◆ ✓ a 0 ◆ ✓ 0 b ◆ ✓ cos ✓ sin ✓ ◆ ✓ sin ✓ cos ✓ ◆ ✓ 0 1 ◆ ✓ 1 0 ◆ ✓ 1 0 ◆ f detA = ab detA = 1 detA = -1 detA = 0
  37. 37. detA = 「面積の倍率 向き」 ✓ x y ◆ x ✓ 1 0 ◆ y ✓ 0 1 ◆ f y ✓ bx by ◆ x ✓ ax ay ◆ f ✓ x y ◆ = ✓ ax bx ay by ◆ ✓ x y ◆
  38. 38. 3次元(さらに高次元)の場合、 det A = 体積の倍率 向き f 0 @ ax ay az 1 A 0 @ bx by bz 1 A 0 @ cx cy cz 1 A 右手系 → 左手系 の場合 detA < 0
  39. 39. 行列式の「仕様」 detA > 0 = 0 < 0 … 向きを保ち、体積 detA 倍 … 潰れる … 向きを変えて、体積 -detA 倍
  40. 40. 3. 行列式の「実装」
  41. 41. 「n2 次元 → 1次元」の関数を 一発で出すのは難しい
  42. 42. 複雑なものは簡単なものの組み合わせに (設計の基本!)
  43. 43. 1) det E = 1 ✓ 1 0 ◆ ✓ 0 1 ◆ ✓ 1 0 ◆ ✓ 0 1 ◆ E = ✓ 1 0 0 1 ◆ id detE = 1 1 0 0 1 = 1
  44. 44. 2) det(b, a) = -det(a, b) ✓ 1 0 ◆ ✓ 0 1 ◆ ✓ 1 0 ◆ ✓ 0 1 ◆ A = ✓ 0 1 1 0 ◆ 裏向き f det(b, a) = det(a, b) 0 1 1 0 = 1 0 0 1 = 1
  45. 45. det(a1 + a2, b) = det(a1, b) + det(a2, b), det(k・a, b) = k・det(a, b) ✓ 1 0 ◆ ✓ 0 1 ◆ f 3) det(ka, b) = k · det(a, b) A = ✓ 2 0 0 1 ◆ ✓ 0 1 ◆ ✓ 2 0 ◆ 2 0 0 1 = 2 · 1 0 0 1 = 2 det(a1 + a2, b) = det(a1, b) + det(a2, b)
  46. 46. 実はこれが行列式の全て! detE = 1 det(b, a) = det(a, b) det(ka, b) = k · det(a, b) 1) 2) 3) (交代性) (多重線形性) det(a1 + a2, b) = det(a1, b) + det(a2, b)
  47. 47. 1) ∼ 3) から導かれる便利な性質 4) 5) det(a, a) = 0 det(a kb, b) = det(a, b)
  48. 48. 計算してみよう!
  49. 49. 1 2 3 4
  50. 50. 1 2 3 4
  51. 51. 1 2 3 4 = 1 2 0 4 + 0 2 3 4 3)
  52. 52. 1 2 3 4 = 1 2 0 4 + 0 2 3 4
  53. 53. 1 2 3 4 = 1 2 0 4 + 0 2 3 4 = 1 2 0 0 + 1 0 0 4 + 0 2 3 0 + 0 0 3 4 3)
  54. 54. 1 2 3 4 = 1 2 0 4 + 0 2 3 4 = 0 = 0 = 1 2 0 0 + 1 0 0 4 + 0 2 3 0 + 0 0 3 4 4)
  55. 55. 1 2 3 4 = 1 2 0 4 + 0 2 3 4 = 1 2 0 0 + 1 0 0 4 + 0 2 3 0 + 0 0 3 4 = 4 1 0 0 1 + 2 · 3 0 1 1 0 3)
  56. 56. 1 2 3 4 = 1 2 0 4 + 0 2 3 4 = 1 2 0 0 + 1 0 0 4 + 0 2 3 0 + 0 0 3 4 = 4 1 0 0 1 + 2 · 3 0 1 1 0 = 4 1 0 0 1 2 · 3 1 0 0 1 2)
  57. 57. 1 2 3 4 = 1 2 0 4 + 0 2 3 4 = 1 2 0 0 + 1 0 0 4 + 0 2 3 0 + 0 0 3 4 = 4 1 0 0 1 + 2 · 3 0 1 1 0 = 4 1 0 0 1 2 · 3 1 0 0 1 = 1 = 11)
  58. 58. 1 2 3 4 = 1 2 0 4 + 0 2 3 4 = 1 2 0 0 + 1 0 0 4 + 0 2 3 0 + 0 0 3 4 = 4 1 0 0 1 + 2 · 3 0 1 1 0 = 4 1 0 0 1 2 · 3 1 0 0 1 = 2
  59. 59. 1 2 3 4 5 6 7 8 9
  60. 60. 1 2 3 4 5 6 7 8 9 = 1 · 5 · 9 1 0 0 0 1 0 0 0 1 + 1 · 6 · 8 1 0 0 0 0 1 0 1 0 +2 · 4 · 9 0 1 0 1 0 0 0 0 1 + 2 · 6 · 7 0 1 0 0 0 1 1 0 0 +3 · 4 · 8 0 0 1 1 0 0 0 1 0 + 3 · 5 · 7 0 0 1 0 1 0 1 0 0
  61. 61. 1 2 3 4 5 6 7 8 9 = 1 · 5 · 9 1 0 0 0 1 0 0 0 1 + 1 · 6 · 8 1 0 0 0 0 1 0 1 0 +2 · 4 · 9 0 1 0 1 0 0 0 0 1 + 2 · 6 · 7 0 1 0 0 0 1 1 0 0 +3 · 4 · 8 0 0 1 1 0 0 0 1 0 + 3 · 5 · 7 0 0 1 0 1 0 1 0 0 = 1 = 1 = 1 = 1 = 1 = 1
  62. 62. 1 2 3 4 5 6 7 8 9 = 1 · 5 · 9 1 0 0 0 1 0 0 0 1 + 1 · 6 · 8 1 0 0 0 0 1 0 1 0 +2 · 4 · 9 0 1 0 1 0 0 0 0 1 + 2 · 6 · 7 0 1 0 0 0 1 1 0 0 +3 · 4 · 8 0 0 1 1 0 0 0 1 0 + 3 · 5 · 7 0 0 1 0 1 0 1 0 0 = 1 · 5 · 9 1 · 6 · 8 +2 · 6 · 7 2 · 4 · 9 +3 · 4 · 8 3 · 5 · 7 = 0
  63. 63. 行列式計算のアルゴリズム 1. 各行から列が重複しないように成分を取り出して掛ける 2. 残った 0, 1 だけの行列式を計算する(偶数回の交代で単 位行列になる場合 1、奇数回の場合 -1) 3. これらの取り出し方の全パターンを足し合わせる
  64. 64. アルゴリズムを数式にすると… detA = X 2Sn Y i ai, (i) . . . . . . . . .
  65. 65. detA = X 2Sn Y i ai, (i) . . . . . . . . . アルゴリズムを数式にすると… A の i 行から取り出した成分
  66. 66. detA = X 2Sn Y i ai, (i) . . . . . . . . . 各行に渡る成分の積 アルゴリズムを数式にすると…
  67. 67. detA = X 2Sn Y i ai, (i) . . . . . . . . . 残った 0, 1 だけの行列式 アルゴリズムを数式にすると…
  68. 68. detA = X 2Sn Y i ai, (i) . . . . . . . . . 並べ替えの全パターンの総和 アルゴリズムを数式にすると…
  69. 69. アルゴリズムを数式にすると… detA = X 2Sn Y i ai, (i) . . . . . . . . .
  70. 70. detA = X 2Sn Y i ai, (i) . . . . . . . . . = X 2Sn Y i ai, (i)sgn( ) アルゴリズムを数式にすると… 並べ替えの「符号」 (偶数回: 1, 奇数回: -1)
  71. 71. 1 2 3 4 5 6 7 8 9 = 1 · 5 · 9 1 0 0 0 1 0 0 0 1 + 1 · 6 · 8 1 0 0 0 0 1 0 1 0 +2 · 4 · 9 0 1 0 1 0 0 0 0 1 + 2 · 6 · 7 0 1 0 0 0 1 1 0 0 +3 · 4 · 8 0 0 1 1 0 0 0 1 0 + 3 · 5 · 7 0 0 1 0 1 0 1 0 0 detA = X 2Sn Y i ai, (i)sgn( ) 同じ式に見えるかな?
  72. 72. これが行列式の「定義」として 数学の本に出てくる
  73. 73. 理解すべき原理はこっち: detE = 1 det(b, a) = det(a, b) det(ka, b) = k · det(a, b) 1) 2) 3) (交代性) (多重線形性) det(a1 + a2, b) = det(a1, b) + det(a2, b)
  74. 74. 出発点はシンプルな方が良い
  75. 75. 宿題: 行列と行列式を好きな言語で 実装してみましょう
  76. 76. 行列式の展開
  77. 77. 1 2 3 4 5 6 7 8 9 = 1 · 5 · 9 1 0 0 0 1 0 0 0 1 + 1 · 6 · 8 1 0 0 0 0 1 0 1 0 +2 · 4 · 9 0 1 0 1 0 0 0 0 1 + 2 · 6 · 7 0 1 0 0 0 1 1 0 0 +3 · 4 · 8 0 0 1 1 0 0 0 1 0 + 3 · 5 · 7 0 0 1 0 1 0 1 0 0
  78. 78. 1 2 3 4 5 6 7 8 9 = 1 · 5 · 9 1 0 0 0 1 0 0 0 1 + 1 · 6 · 8 1 0 0 0 0 1 0 1 0 +2 · 4 · 9 0 1 0 1 0 0 0 0 1 + 2 · 6 · 7 0 1 0 0 0 1 1 0 0 +3 · 4 · 8 0 0 1 1 0 0 0 1 0 + 3 · 5 · 7 0 0 1 0 1 0 1 0 0
  79. 79. 1 2 3 4 5 6 7 8 9 = 1 0 @5 · 9 1 0 0 0 1 0 0 0 1 + 6 · 8 1 0 0 0 0 1 0 1 0 1 A +2 0 @4 · 9 0 1 0 1 0 0 0 0 1 + 6 · 7 0 1 0 0 0 1 1 0 0 1 A +3 0 @4 · 8 0 0 1 1 0 0 0 1 0 + 5 · 7 0 0 1 0 1 0 1 0 0 1 A
  80. 80. 1 2 3 4 5 6 7 8 9 = 1 0 @5 · 9 1 0 0 0 1 0 0 0 1 + 6 · 8 1 0 0 0 0 1 0 1 0 1 A +2 0 @4 · 9 0 1 0 1 0 0 0 0 1 + 6 · 7 0 1 0 0 0 1 1 0 0 1 A +3 0 @4 · 8 0 0 1 1 0 0 0 1 0 + 5 · 7 0 0 1 0 1 0 1 0 0 1 A
  81. 81. 1 2 3 4 5 6 7 8 9 = 1 ✓ 5 · 9 1 0 0 1 + 6 · 8 0 1 1 0 ◆ 2 ✓ 4 · 9 1 0 0 1 + 6 · 7 0 1 1 0 ◆ +3 ✓ 4 · 8 1 0 0 1 + 5 · 7 0 1 1 0 ◆
  82. 82. 1 2 3 4 5 6 7 8 9 = 1 ✓ 5 · 9 1 0 0 1 + 6 · 8 0 1 1 0 ◆ 2 ✓ 4 · 9 1 0 0 1 + 6 · 7 0 1 1 0 ◆ +3 ✓ 4 · 8 1 0 0 1 + 5 · 7 0 1 1 0 ◆
  83. 83. 1 2 3 4 5 6 7 8 9 = 1 ✓ 5 · 9 1 0 0 1 + 6 · 8 0 1 1 0 ◆ 2 ✓ 4 · 9 1 0 0 1 + 6 · 7 0 1 1 0 ◆ +3 ✓ 4 · 8 1 0 0 1 + 5 · 7 0 1 1 0 ◆ = 1 5 6 8 9 2 4 6 7 9 + 3 4 5 7 8
  84. 84. 1 2 3 4 5 6 7 8 9 = 1 ✓ 5 · 9 1 0 0 1 + 6 · 8 0 1 1 0 ◆ 2 ✓ 4 · 9 1 0 0 1 + 6 · 7 0 1 1 0 ◆ +3 ✓ 4 · 8 1 0 0 1 + 5 · 7 0 1 1 0 ◆ = 1 5 6 8 9 2 4 6 7 9 + 3 4 5 7 8 … 第1行で展開
  85. 85. 1 2 3 4 5 6 7 8 9 = 1 · 5 · 9 1 0 0 0 1 0 0 0 1 + 1 · 6 · 8 1 0 0 0 0 1 0 1 0 +2 · 4 · 9 0 1 0 1 0 0 0 0 1 + 2 · 6 · 7 0 1 0 0 0 1 1 0 0 +3 · 4 · 8 0 0 1 1 0 0 0 1 0 + 3 · 5 · 7 0 0 1 0 1 0 1 0 0 くくり出し方を変えれば、任意の行・列で展開できる = 2 4 6 7 9 + 5 1 3 7 9 8 1 3 4 6
  86. 86. n次行列式は (n-1) 次行列式の和に展開できる → 再帰呼び出しでも実装できる(宿題)
  87. 87. そして逆行列
  88. 88. ✓ 1 0 ◆ ✓ 0 1 ◆ ✓ a 0 ◆ ✓ 0 b ◆ ✓ cos ✓ sin ✓ ◆ ✓ sin ✓ cos ✓ ◆ ✓ 0 1 ◆ ✓ 1 0 ◆ ✓ 1 0 ◆ f 逆行列:逆変換に対応する行列 f 1 A 1 = ✓ cos( ✓) sin( ✓) sin( ✓) cos( ✓) ◆ A 1 = ✓ 1/a 0 0 1/b ◆ A 1 = ✓ 1 0 0 1 ◆ 逆変換なし!
  89. 89. A = 0 @ 1 2 3 1 0 1 2 1 2 1 A
  90. 90. A = 0 @ 1 2 3 1 0 1 2 1 2 1 A 0 @ x y z 1 A 0 @ x + 2y + z x z 2x + y 2z 1 A A 1 det A 0 であれば、逆行列 A-1 は取れるはず。 A 1 A = E AA 1 = E
  91. 91. やってみましょう。 (トリッキーなことをします)
  92. 92. 1 2 3 1 0 1 2 1 2 = 1 0 1 1 2 2 1 1 2 2 + 3 1 0 2 1 = 4 第1行で展開
  93. 93. 1 2 3 1 0 1 2 1 2 = 1 0 1 1 2 2 1 1 2 2 + 3 1 0 2 1 = 4 1 0 1 1 0 1 2 1 2 = 1 0 1 1 2 0 1 1 2 2 1 1 0 2 1 2行目を1行目にコピペ
  94. 94. 1 2 3 1 0 1 2 1 2 = 1 0 1 1 2 2 1 1 2 2 + 3 1 0 2 1 = 4 1 0 1 1 0 1 2 1 2 = 1 0 1 1 2 0 1 1 2 2 1 1 0 2 1 = 0
  95. 95. 1 2 3 1 0 1 2 1 2 = 1 0 1 1 2 2 1 1 2 2 + 3 1 0 2 1 = 4 1 0 1 1 0 1 2 1 2 = 1 0 1 1 2 0 1 1 2 2 1 1 0 2 1 = 0 同じ行が並んでいるので 計算するまでもなく 0
  96. 96. 1 2 3 1 0 1 2 1 2 = 1 0 1 1 2 2 1 1 2 2 + 3 1 0 2 1 = 4 1 0 1 1 0 1 2 1 2 = 1 0 1 1 2 0 1 1 2 2 1 1 0 2 1 2 1 2 1 0 1 2 1 2 = 2 0 1 1 2 1 1 1 2 2 2 1 0 2 1 = 0 = 03行目を1行目にコピペ
  97. 97. 1 2 3 1 0 1 2 1 2 = 1 0 1 1 2 2 1 1 2 2 + 3 1 0 2 1 = 4 1 0 1 1 0 1 2 1 2 = 1 0 1 1 2 0 1 1 2 2 1 1 0 2 1 2 1 2 1 0 1 2 1 2 = 2 0 1 1 2 1 1 1 2 2 2 1 0 2 1 = 0 = 0
  98. 98. 1 2 3 1 0 1 2 1 2 = 1 0 1 1 2 2 1 1 2 2 + 3 1 0 2 1 = 4 1 0 1 1 0 1 2 1 2 = 1 0 1 1 2 0 1 1 2 2 1 1 0 2 1 2 1 2 1 0 1 2 1 2 = 2 0 1 1 2 1 1 1 2 2 2 1 0 2 1 = 0 = 0 Aの要素が並んでいる…
  99. 99. 1 2 3 1 0 1 2 1 2 = 1 0 1 1 2 2 1 1 2 2 + 3 1 0 2 1 = 4 1 0 1 1 0 1 2 1 2 = 1 0 1 1 2 0 1 1 2 2 1 1 0 2 1 2 1 2 1 0 1 2 1 2 = 2 0 1 1 2 1 1 1 2 2 2 1 0 2 1 = 0 = 0 縦には同じ行列式…これは…!
  100. 100. ドーン! 0 @ 1 2 3 1 0 1 2 1 2 1 A 0 B B B B B B B B B B @ 0 1 1 2 1 1 2 2 1 0 2 1 1 C C C C C C C C C C A = 0 @ 4 0 0 1 A
  101. 101. 同じことを 第2行、第3行 でもやる。
  102. 102. ドドーン! 0 @ 1 2 3 1 0 1 2 1 2 1 A 0 B B B B B B B B B B @ 2 3 1 2 1 3 2 2 1 2 2 1 1 C C C C C C C C C C A = 0 @ 0 4 0 1 A 0 @ 1 2 3 1 0 1 2 1 2 1 A 0 B B B B B B B B B B @ 2 3 0 1 1 3 1 1 1 2 1 0 1 C C C C C C C C C C A = 0 @ 0 0 4 1 A
  103. 103. 全部合わせて… 0 @ 1 2 3 1 0 1 2 1 2 1 A 0 B B B B B B B B B B @ 0 1 1 2 1 1 2 2 1 0 2 1 1 C C C C C C C C C C A = 0 @ 4 0 0 1 A 0 @ 1 2 3 1 0 1 2 1 2 1 A 0 B B B B B B B B B B @ 2 3 1 2 1 3 2 2 1 2 2 1 1 C C C C C C C C C C A = 0 @ 0 4 0 1 A 0 @ 1 2 3 1 0 1 2 1 2 1 A 0 B B B B B B B B B B @ 2 3 0 1 1 3 1 1 1 2 1 0 1 C C C C C C C C C C A = 0 @ 0 0 4 1 A
  104. 104. Enter the Matrix… 0 @ 1 2 3 1 0 1 2 1 2 1 A 0 B B B B B B B B B B @ 0 1 1 2 2 3 0 1 2 3 0 1 1 1 2 2 1 3 2 2 1 3 1 1 1 0 2 1 1 2 2 1 1 2 1 0 1 C C C C C C C C C C A = 0 @ 4 0 0 0 4 0 0 0 4 1 A
  105. 105. 両辺 detA = 4 で割れば… 0 @ 1 2 3 1 0 1 2 1 2 1 A 0 B B B B B B B B B B @ 0 1 1 2 2 3 0 1 2 3 0 1 1 1 2 2 1 3 2 2 1 3 1 1 1 0 2 1 1 2 2 1 1 2 1 0 1 C C C C C C C C C C A = 0 @ 4 0 0 0 4 0 0 0 4 1 A detA = 4
  106. 106. できあがり! 0 @ 1 2 3 1 0 1 2 1 2 1 A · 1 detA 0 B B B B B B B B B B @ 0 1 1 2 2 3 0 1 2 3 0 1 1 1 2 2 1 3 2 2 1 3 1 1 1 0 2 1 1 2 2 1 1 2 1 0 1 C C C C C C C C C C A = 0 @ 1 0 0 0 1 0 0 0 1 1 A = A 1 = 1 4 0 @ 1 7 1 0 8 4 1 3 2 1 A
  107. 107. n次行列の場合も全く同じ (宿題ってことで)
  108. 108. 高次元の計算にはもっと効率的な方法がある • 余因子行列による方法 … O(n3) • 掃き出し法 … O(n2) • LU分解 … O(n2) • …
  109. 109. まとめ • 行列式は線形変換の特徴を表す1次元の量 • detA 0 のとき、逆変換が作れる • 計算は機械に任せよう(仕組みが分かってれば良い)
  110. 110. 行列式の原理: detE = 1 det(b, a) = det(a, b) det(ka, b) = k · det(a, b) 1) 2) 3) (交代性) (多重線形性) det(a1 + a2, b) = det(a1, b) + det(a2, b)
  111. 111. 線形変換は多変数の変換のうち最も単純なもの。 ホントは逆変換が一発で求められること自体ありがたい。
  112. 112. プログラマのための線形代数 再 入門 3 ∼基底変換、固有値、そしてその先∼ 次回予告:
  113. 113. Thanks! Twitter: @taketo1024
 Blog: http://taketo1024.hateblo.jp 0 @ 1 2 3 1 0 1 2 1 2 1 A · 1 detA 0 B B B B B B B B B B @ 0 1 1 2 2 3 0 1 2 3 0 1 1 1 2 2 1 3 2 2 1 3 1 1 1 0 2 1 1 2 2 1 1 2 1 0 1 C C C C C C C C C C A = 0 @ 1 0 0 0 1 0 0 0 1 1 A

×