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

113
プログラマのための線形代数 “再” 入門 2 ~要件定義から学ぶ行列式と逆行列~ @taketo1024 2015/03/27 第2回プログラマのための数学勉強会

Upload: taketo-sano

Post on 17-Jul-2015

19.927 views

Category:

Education


1 download

TRANSCRIPT

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

@taketo1024

2015/03/27 第2回プログラマのための数学勉強会

今回の目標

ただの計算地獄だった行列式と逆行列を

システム開発の文脈で説明し直し、

プログラマが納得して使えるようになること。

行列式 (determinant)

行列式 (determinant)

A =

✓1 23 4

行列式 (determinant)

A =

✓1 23 4

detA =

����1 23 4

���� = 1 · 4� 2 · 3

行列式 (determinant)

A =

✓1 23 4

detA =

����1 23 4

���� = 1 · 4� 2 · 3+

行列式 (determinant)

A =

✓1 23 4

detA =

����1 23 4

���� = 1 · 4� 2 · 3-

行列式 (determinant)

A =

✓1 23 4

detA =

����1 23 4

���� = 1 · 4� 2 · 3

= �2

行列式 (determinant)

A =

0

@1 2 34 5 67 8 9

1

A

行列式 (determinant)

A =

0

@1 2 34 5 67 8 9

1

A

detA =

������

1 2 34 5 67 8 9

������= 1 · 5 · 9 + 2 · 6 · 7 + 3 · 4 · 8

�3 · 5 · 7� 2 · 4 · 9� 1 · 6 · 8

行列式 (determinant)

A =

0

@1 2 34 5 67 8 9

1

A

detA =

������

1 2 34 5 67 8 9

������= 1 · 5 · 9 + 2 · 6 · 7 + 3 · 4 · 8

�3 · 5 · 7� 2 · 4 · 9� 1 · 6 · 8

行列式 (determinant)

A =

0

@1 2 34 5 67 8 9

1

A

detA =

������

1 2 34 5 67 8 9

������= 1 · 5 · 9 + 2 · 6 · 7 + 3 · 4 · 8

�3 · 5 · 7� 2 · 4 · 9� 1 · 6 · 8

行列式 (determinant)

A =

0

@1 2 34 5 67 8 9

1

A

detA =

������

1 2 34 5 67 8 9

������= 1 · 5 · 9 + 2 · 6 · 7 + 3 · 4 · 8

�3 · 5 · 7� 2 · 4 · 9� 1 · 6 · 8

行列式 (determinant)

A =

0

@1 2 34 5 67 8 9

1

A

detA =

������

1 2 34 5 67 8 9

������= 1 · 5 · 9 + 2 · 6 · 7 + 3 · 4 · 8

�3 · 5 · 7� 2 · 4 · 9� 1 · 6 · 8

行列式 (determinant)

A =

0

@1 2 34 5 67 8 9

1

A

detA =

������

1 2 34 5 67 8 9

������= 1 · 5 · 9 + 2 · 6 · 7 + 3 · 4 · 8

�3 · 5 · 7� 2 · 4 · 9� 1 · 6 · 8

行列式 (determinant)

A =

0

@1 2 34 5 67 8 9

1

A

detA =

������

1 2 34 5 67 8 9

������= 1 · 5 · 9 + 2 · 6 · 7 + 3 · 4 · 8

�3 · 5 · 7� 2 · 4 · 9� 1 · 6 · 8

行列式 (determinant)

A =

0

@1 2 34 5 67 8 9

1

A

detA =

������

1 2 34 5 67 8 9

������= 1 · 5 · 9 + 2 · 6 · 7 + 3 · 4 · 8

�3 · 5 · 7� 2 · 4 · 9� 1 · 6 · 8

= 0

行列式 (determinant)

��������

1 2 3 45 6 7 89 10 11 1213 14 15 16

��������

行列式 (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 45 6 7 89 10 11 1213 14 15 16

��������

!?

人間がやるべき計算じゃない(コンピュータのある時代でよかった)

計算は機械がやればいいが、 これが何なのかは分かっておきたい。

プログラマの「理解」の3層構造

• 要件が分かる:何のためのものなのか

• 仕様が分かる:何を与えると何が返ってくるのか

• 実装が分かる:どのように動いているのか

プログラマはこの3つが揃ってはじめて「分かった」と言える。

1. 行列式の「要件」

(復習) 行列は線形変換の定量表現

✓x

y

x

✓10

y

✓01

f

y

✓bx

by

x

✓a

x

a

y

f

✓x

y

◆=

✓a

x

b

x

a

y

b

y

◆✓x

y

(復習) 等倍・偏倍変換

A =

✓a 00 b

✓10

✓01

f

✓a0

✓0b

(復習) 回転

A =

✓cos✓ �sin✓

sin✓ cos✓

✓10

✓01

f

✓cos ✓sin ✓

✓� sin ✓cos ✓

(復習) 反転

A =

✓�1 00 1

◆✓

10

✓01

f

✓01

✓�10

(復習) 正射影

A =

✓1 00 0

◆✓

10

✓01

f

✓10

✓10

✓01

✓a0

✓0b

✓cos ✓sin ✓

✓� sin ✓cos ✓

✓01

✓�10

◆ ✓10

f

変換の特徴を表す 1次元の量 を考えたい

特に潰れるかどうかを 判別したい

潰れると元に戻せない!

✓10

✓01

✓10

f

✓10

✓01

f

f�1

?同じように潰れてしまう

復元できない!

行列式の「要件」• n次元の線形変換は n次正方行列 (n2 個の数) で表される。

• 線形変換の特徴を 1次元の量 によって表したい。

• 特に「潰れてしまう」かどうかを判別したい。

n次正方行列 A detAの行列式A (1次元の量)

2. 行列式の「仕様」

変換後の面積と向きに注目!

✓10

✓01

✓a0

✓0b

✓cos ✓sin ✓

✓� sin ✓cos ✓

✓01

✓�10

◆ ✓10

f

面積 ab 倍面積同じ

面積同じ

面積 0

✓10

✓01

✓a0

✓0b

✓cos ✓sin ✓

✓� sin ✓cos ✓

✓01

✓�10

◆ ✓10

f

表向き表向き

裏向き

向きなし

✓10

✓01

✓a0

✓0b

✓cos ✓sin ✓

✓� sin ✓cos ✓

✓01

✓�10

◆ ✓10

f

detA = abdetA = 1

detA = -1

detA = 0

detA = 「面積の倍率 × 向き」

✓x

y

x

✓10

y

✓01

f

y

✓bx

by

x

✓a

x

a

y

f

✓x

y

◆=

✓a

x

b

x

a

y

b

y

◆✓x

y

3次元(さらに高次元)の場合、 det A = 体積の倍率 × 向き

f

0

@ax

ay

az

1

A

0

@bx

by

bz

1

A

0

@cx

cy

cz

1

A

右手系 → 左手系 の場合 detA < 0

行列式の「仕様」

detA

> 0

= 0

< 0

… 向きを保ち、体積 detA 倍

… 潰れる

… 向きを変えて、体積 -detA 倍

3. 行列式の「実装」

「n2 次元 → 1次元」の関数を 一発で出すのは難しい

複雑なものは簡単なものの組み合わせに (設計の基本!)

1) det E = 1

✓10

✓01

✓10

✓01

E =

✓1 00 1

id

detE = 1

����1 00 1

���� = 1

2) det(b, a) = -det(a, b)

✓10

✓01

✓10

✓01

A =

✓0 11 0

裏向きf

det(b,a) = �det(a, b)

����0 11 0

���� = �����1 00 1

���� = �1

det(a1 + a2, b) = det(a1, b) + det(a2, b), det(k・a, b) = k・det(a, b)

✓10

✓01

f

3)det(ka, b) = k · det(a, b)

A =

✓2 00 1

✓01

✓20

����2 00 1

���� = 2 ·����1 00 1

���� = 2

det(a1 + a2, b) = det(a1, b) + det(a2, b)

実はこれが行列式の全て!

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)

1) ~ 3) から導かれる便利な性質

4)

5)

det(a,a) = 0

det(a� kb, b) = det(a, b)

計算してみよう!

����1 23 4

����

����1 23 4

����

����1 23 4

���� =

����1 20 4

����+����0 23 4

����

3)

����1 23 4

���� =

����1 20 4

����+����0 23 4

����

����1 23 4

���� =

����1 20 4

����+����0 23 4

����

=

����1 20 0

����+����1 00 4

����+����0 23 0

����+����0 03 4

����

3)

����1 23 4

���� =

����1 20 4

����+����0 23 4

����

= 0 = 0

=

����1 20 0

����+����1 00 4

����+����0 23 0

����+����0 03 4

����4)

����1 23 4

���� =

����1 20 4

����+����0 23 4

����

=

����1 20 0

����+����1 00 4

����+����0 23 0

����+����0 03 4

����

= 4

����1 00 1

����+ 2 · 3����0 11 0

����3)

����1 23 4

���� =

����1 20 4

����+����0 23 4

����

=

����1 20 0

����+����1 00 4

����+����0 23 0

����+����0 03 4

����

= 4

����1 00 1

����+ 2 · 3����0 11 0

����

= 4

����1 00 1

����� 2 · 3����1 00 1

����

2)

����1 23 4

���� =

����1 20 4

����+����0 23 4

����

=

����1 20 0

����+����1 00 4

����+����0 23 0

����+����0 03 4

����

= 4

����1 00 1

����+ 2 · 3����0 11 0

����

= 4

����1 00 1

����� 2 · 3����1 00 1

����

= 1 = 11)

����1 23 4

���� =

����1 20 4

����+����0 23 4

����

=

����1 20 0

����+����1 00 4

����+����0 23 0

����+����0 03 4

����

= 4

����1 00 1

����+ 2 · 3����0 11 0

����

= 4

����1 00 1

����� 2 · 3����1 00 1

���� = �2

������

1 2 34 5 67 8 9

������

������

1 2 34 5 67 8 9

������= 1 · 5 · 9

������

1 0 00 1 00 0 1

������+ 1 · 6 · 8

������

1 0 00 0 10 1 0

������

+2 · 4 · 9

������

0 1 01 0 00 0 1

������+ 2 · 6 · 7

������

0 1 00 0 11 0 0

������

+3 · 4 · 8

������

0 0 11 0 00 1 0

������+ 3 · 5 · 7

������

0 0 10 1 01 0 0

������

������

1 2 34 5 67 8 9

������= 1 · 5 · 9

������

1 0 00 1 00 0 1

������+ 1 · 6 · 8

������

1 0 00 0 10 1 0

������

+2 · 4 · 9

������

0 1 01 0 00 0 1

������+ 2 · 6 · 7

������

0 1 00 0 11 0 0

������

+3 · 4 · 8

������

0 0 11 0 00 1 0

������+ 3 · 5 · 7

������

0 0 10 1 01 0 0

������

= 1

= 1

= 1

= �1

= �1

= �1

������

1 2 34 5 67 8 9

������= 1 · 5 · 9

������

1 0 00 1 00 0 1

������+ 1 · 6 · 8

������

1 0 00 0 10 1 0

������

+2 · 4 · 9

������

0 1 01 0 00 0 1

������+ 2 · 6 · 7

������

0 1 00 0 11 0 0

������

+3 · 4 · 8

������

0 0 11 0 00 1 0

������+ 3 · 5 · 7

������

0 0 10 1 01 0 0

������

= 1 · 5 · 9� 1 · 6 · 8+2 · 6 · 7� 2 · 4 · 9+3 · 4 · 8� 3 · 5 · 7 = 0

行列式計算のアルゴリズム

1. 各行から列が重複しないように成分を取り出して掛ける

2. 残った 0, 1 だけの行列式を計算する(偶数回の交代で単

位行列になる場合 1、奇数回の場合 -1)

3. これらの取り出し方の全パターンを足し合わせる

アルゴリズムを数式にすると…

detA =X

�2Sn

Y

i

ai,�(i)

������

. . .

. . .

. . .

������

detA =X

�2Sn

Y

i

ai,�(i)

������

. . .

. . .

. . .

������

アルゴリズムを数式にすると…

A の i 行から取り出した成分

detA =X

�2Sn

Y

i

ai,�(i)

������

. . .

. . .

. . .

������

各行に渡る成分の積

アルゴリズムを数式にすると…

detA =X

�2Sn

Y

i

ai,�(i)

������

. . .

. . .

. . .

������

残った 0, 1 だけの行列式

アルゴリズムを数式にすると…

detA =X

�2Sn

Y

i

ai,�(i)

������

. . .

. . .

. . .

������

並べ替えの全パターンの総和

アルゴリズムを数式にすると…

アルゴリズムを数式にすると…

detA =X

�2Sn

Y

i

ai,�(i)

������

. . .

. . .

. . .

������

detA =X

�2Sn

Y

i

ai,�(i)

������

. . .

. . .

. . .

������

=X

�2Sn

Y

i

ai,�(i)sgn(�)

アルゴリズムを数式にすると…

並べ替えの「符号」 (偶数回: 1, 奇数回: -1)

������

1 2 34 5 67 8 9

������= 1 · 5 · 9

������

1 0 00 1 00 0 1

������+ 1 · 6 · 8

������

1 0 00 0 10 1 0

������

+2 · 4 · 9

������

0 1 01 0 00 0 1

������+ 2 · 6 · 7

������

0 1 00 0 11 0 0

������

+3 · 4 · 8

������

0 0 11 0 00 1 0

������+ 3 · 5 · 7

������

0 0 10 1 01 0 0

������

detA =X

�2Sn

Y

i

ai,�(i)sgn(�)

同じ式に見えるかな?

これが行列式の「定義」として 数学の本に出てくる

理解すべき原理はこっち:

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)

出発点はシンプルな方が良い

宿題: 行列と行列式を好きな言語で実装してみましょう

行列式の展開

������

1 2 34 5 67 8 9

������= 1 · 5 · 9

������

1 0 00 1 00 0 1

������+ 1 · 6 · 8

������

1 0 00 0 10 1 0

������

+2 · 4 · 9

������

0 1 01 0 00 0 1

������+ 2 · 6 · 7

������

0 1 00 0 11 0 0

������

+3 · 4 · 8

������

0 0 11 0 00 1 0

������+ 3 · 5 · 7

������

0 0 10 1 01 0 0

������

������

1 2 34 5 67 8 9

������= 1 · 5 · 9

������

1 0 00 1 00 0 1

������+ 1 · 6 · 8

������

1 0 00 0 10 1 0

������

+2 · 4 · 9

������

0 1 01 0 00 0 1

������+ 2 · 6 · 7

������

0 1 00 0 11 0 0

������

+3 · 4 · 8

������

0 0 11 0 00 1 0

������+ 3 · 5 · 7

������

0 0 10 1 01 0 0

������

������

1 2 34 5 67 8 9

������= 1

0

@5 · 9

������

1 0 00 1 00 0 1

������+ 6 · 8

������

1 0 00 0 10 1 0

������

1

A

+2

0

@4 · 9

������

0 1 01 0 00 0 1

������+ 6 · 7

������

0 1 00 0 11 0 0

������

1

A

+3

0

@4 · 8

������

0 0 11 0 00 1 0

������+ 5 · 7

������

0 0 10 1 01 0 0

������

1

A

������

1 2 34 5 67 8 9

������= 1

0

@5 · 9

������

1 0 00 1 00 0 1

������+ 6 · 8

������

1 0 00 0 10 1 0

������

1

A

+2

0

@4 · 9

������

0 1 01 0 00 0 1

������+ 6 · 7

������

0 1 00 0 11 0 0

������

1

A

+3

0

@4 · 8

������

0 0 11 0 00 1 0

������+ 5 · 7

������

0 0 10 1 01 0 0

������

1

A

������

1 2 34 5 67 8 9

������= 1

✓5 · 9

����1 00 1

����+ 6 · 8����0 11 0

����

�2

✓4 · 9

����1 00 1

����+ 6 · 7����0 11 0

����

+3

✓4 · 8

����1 00 1

����+ 5 · 7����0 11 0

����

������

1 2 34 5 67 8 9

������= 1

✓5 · 9

����1 00 1

����+ 6 · 8����0 11 0

����

�2

✓4 · 9

����1 00 1

����+ 6 · 7����0 11 0

����

+3

✓4 · 8

����1 00 1

����+ 5 · 7����0 11 0

����

������

1 2 34 5 67 8 9

������= 1

✓5 · 9

����1 00 1

����+ 6 · 8����0 11 0

����

�2

✓4 · 9

����1 00 1

����+ 6 · 7����0 11 0

����

+3

✓4 · 8

����1 00 1

����+ 5 · 7����0 11 0

����

= 1

����5 68 9

����� 2

����4 67 9

����+ 3

����4 57 8

����

������

1 2 34 5 67 8 9

������= 1

✓5 · 9

����1 00 1

����+ 6 · 8����0 11 0

����

�2

✓4 · 9

����1 00 1

����+ 6 · 7����0 11 0

����

+3

✓4 · 8

����1 00 1

����+ 5 · 7����0 11 0

����

= 1

����5 68 9

����� 2

����4 67 9

����+ 3

����4 57 8

���� … 第1行で展開

������

1 2 34 5 67 8 9

������= 1 · 5 · 9

������

1 0 00 1 00 0 1

������+ 1 · 6 · 8

������

1 0 00 0 10 1 0

������

+2 · 4 · 9

������

0 1 01 0 00 0 1

������+ 2 · 6 · 7

������

0 1 00 0 11 0 0

������

+3 · 4 · 8

������

0 0 11 0 00 1 0

������+ 3 · 5 · 7

������

0 0 10 1 01 0 0

������

くくり出し方を変えれば、任意の行・列で展開できる

= �2

����4 67 9

����+ 5

����1 37 9

����� 8

����1 34 6

����

n次行列式は (n-1) 次行列式の和に展開できる → 再帰呼び出しでも実装できる(宿題)

そして逆行列

✓10

✓01

✓a0

✓0b

✓cos ✓sin ✓

✓� sin ✓cos ✓

✓01

✓�10

◆ ✓10

f

逆行列:逆変換に対応する行列

f�1

A�1=

✓cos(�✓) � sin(�✓)sin(�✓) cos(�✓)

◆A�1 =

✓1/a 00 1/b

A�1 =

✓�1 00 1

× 逆変換なし!

A =

0

@1 2 31 0 �12 1 �2

1

A

A =

0

@1 2 31 0 �12 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�1A = E AA�1 = E

やってみましょう。 (トリッキーなことをします)

������

1 2 31 0 �12 1 �2

������= 1

����0 �11 �2

����� 2

����1 �12 �2

����+ 3

����1 02 1

���� = 4第1行で展開

������

1 2 31 0 �12 1 �2

������= 1

����0 �11 �2

����� 2

����1 �12 �2

����+ 3

����1 02 1

���� = 4

������

1 0 �11 0 �12 1 �2

������= 1

����0 �11 �2

����� 0

����1 �12 �2

����� 1

����1 02 1

����2行目を1行目にコピペ

������

1 2 31 0 �12 1 �2

������= 1

����0 �11 �2

����� 2

����1 �12 �2

����+ 3

����1 02 1

���� = 4

������

1 0 �11 0 �12 1 �2

������= 1

����0 �11 �2

����� 0

����1 �12 �2

����� 1

����1 02 1

���� = 0

������

1 2 31 0 �12 1 �2

������= 1

����0 �11 �2

����� 2

����1 �12 �2

����+ 3

����1 02 1

���� = 4

������

1 0 �11 0 �12 1 �2

������= 1

����0 �11 �2

����� 0

����1 �12 �2

����� 1

����1 02 1

���� = 0同じ行が並んでいるので 計算するまでもなく 0

������

1 2 31 0 �12 1 �2

������= 1

����0 �11 �2

����� 2

����1 �12 �2

����+ 3

����1 02 1

���� = 4

������

1 0 �11 0 �12 1 �2

������= 1

����0 �11 �2

����� 0

����1 �12 �2

����� 1

����1 02 1

����

������

2 1 �21 0 �12 1 �2

������= 2

����0 �11 �2

����� 1

����1 �12 �2

����� 2

����1 02 1

����

= 0

= 03行目を1行目にコピペ

������

1 2 31 0 �12 1 �2

������= 1

����0 �11 �2

����� 2

����1 �12 �2

����+ 3

����1 02 1

���� = 4

������

1 0 �11 0 �12 1 �2

������= 1

����0 �11 �2

����� 0

����1 �12 �2

����� 1

����1 02 1

����

������

2 1 �21 0 �12 1 �2

������= 2

����0 �11 �2

����� 1

����1 �12 �2

����� 2

����1 02 1

����

= 0

= 0

������

1 2 31 0 �12 1 �2

������= 1

����0 �11 �2

����� 2

����1 �12 �2

����+ 3

����1 02 1

���� = 4

������

1 0 �11 0 �12 1 �2

������= 1

����0 �11 �2

����� 0

����1 �12 �2

����� 1

����1 02 1

����

������

2 1 �21 0 �12 1 �2

������= 2

����0 �11 �2

����� 1

����1 �12 �2

����� 2

����1 02 1

����

= 0

= 0

Aの要素が並んでいる…

������

1 2 31 0 �12 1 �2

������= 1

����0 �11 �2

����� 2

����1 �12 �2

����+ 3

����1 02 1

���� = 4

������

1 0 �11 0 �12 1 �2

������= 1

����0 �11 �2

����� 0

����1 �12 �2

����� 1

����1 02 1

����

������

2 1 �21 0 �12 1 �2

������= 2

����0 �11 �2

����� 1

����1 �12 �2

����� 2

����1 02 1

����

= 0

= 0

縦には同じ行列式…これは…!

ドーン!

0

@1 2 31 0 �12 1 �2

1

A

0

BBBBBBBBBB@

����0 �11 �2

����

�����1 �12 �2

����

����1 02 1

����

1

CCCCCCCCCCA

=

0

@400

1

A

同じことを 第2行、第3行 でもやる。

ドドーン!

0

@1 2 31 0 �12 1 �2

1

A

0

BBBBBBBBBB@

�����2 31 �2

����

����1 32 �2

����

�����1 22 1

����

1

CCCCCCCCCCA

=

0

@040

1

A

0

@1 2 31 0 �12 1 �2

1

A

0

BBBBBBBBBB@

����2 30 �1

����

�����1 31 �1

����

����1 21 0

����

1

CCCCCCCCCCA

=

0

@004

1

A

全部合わせて…

0

@1 2 31 0 �12 1 �2

1

A

0

BBBBBBBBBB@

����0 �11 �2

����

�����1 �12 �2

����

����1 02 1

����

1

CCCCCCCCCCA

=

0

@400

1

A

0

@1 2 31 0 �12 1 �2

1

A

0

BBBBBBBBBB@

�����2 31 �2

����

����1 32 �2

����

�����1 22 1

����

1

CCCCCCCCCCA

=

0

@040

1

A

0

@1 2 31 0 �12 1 �2

1

A

0

BBBBBBBBBB@

����2 30 �1

����

�����1 31 �1

����

����1 21 0

����

1

CCCCCCCCCCA

=

0

@004

1

A

Enter the Matrix…

0

@1 2 31 0 �12 1 �2

1

A

0

BBBBBBBBBB@

����0 �11 �2

���� �����2 30 �1

����

����2 30 �1

����

�����1 �12 �2

����

����1 32 �2

���� �����1 31 �1

����

����1 02 1

���� �����1 22 1

����

����1 21 0

����

1

CCCCCCCCCCA

=

0

@4 0 00 4 00 0 4

1

A

両辺 detA = 4 で割れば…

0

@1 2 31 0 �12 1 �2

1

A

0

BBBBBBBBBB@

����0 �11 �2

���� �����2 30 �1

����

����2 30 �1

����

�����1 �12 �2

����

����1 32 �2

���� �����1 31 �1

����

����1 02 1

���� �����1 22 1

����

����1 21 0

����

1

CCCCCCCCCCA

=

0

@4 0 00 4 00 0 4

1

A

detA = 4

できあがり!

0

@1 2 31 0 �12 1 �2

1

A · 1

detA

0

BBBBBBBBBB@

����0 �11 �2

���� �����2 30 �1

����

����2 30 �1

����

�����1 �12 �2

����

����1 32 �2

���� �����1 31 �1

����

����1 02 1

���� �����1 22 1

����

����1 21 0

����

1

CCCCCCCCCCA

=

0

@1 0 00 1 00 0 1

1

A

= A�1=

1

4

0

@1 7 �10 �8 41 3 �2

1

A

n次行列の場合も全く同じ (宿題ってことで)

高次元の計算にはもっと効率的な方法がある

• 余因子行列による方法 … O(n3)

• 掃き出し法 … O(n2)

• LU分解 … O(n2)

• …

まとめ

• 行列式は線形変換の特徴を表す1次元の量

• detA ≠ 0 のとき、逆変換が作れる

• 計算は機械に任せよう(仕組みが分かってれば良い)

行列式の原理:

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)

線形変換は多変数の変換のうち最も単純なもの。 ホントは逆変換が一発で求められること自体ありがたい。

プログラマのための線形代数 “再” 入門 3 ~基底変換、固有値、そしてその先~

次回予告:

Thanks!

Twitter: @taketo1024Blog: http://taketo1024.hateblo.jp

0

@1 2 31 0 �12 1 �2

1

A · 1

detA

0

BBBBBBBBBB@

����0 �11 �2

���� �����2 30 �1

����

����2 30 �1

����

�����1 �12 �2

����

����1 32 �2

���� �����1 31 �1

����

����1 02 1

���� �����1 22 1

����

����1 21 0

����

1

CCCCCCCCCCA

=

0

@1 0 00 1 00 0 1

1

A