線形代数

平成 17 年度 数式処理
第 4 回 (11 / 28)
線形代数
行列
Mathematica において,行列はリストのリストで表される.例えば,行列
1 2 3 4 5 6 7
8
9
に a と名前を付けるには次のようにする.
a 1, 2, 3, 4, 5, 6, 7, 8, 9
(1)
何度も括弧を入力するのが面倒ならば,Partition を用いる手もある.これは,指定された個数ごとにリスト
を分割する関数である.以下は,各自好きな方で行列を定義されたい.
a Partition1, 2, 3, 4, 5, 6, 7, 8, 9, 3
(2)
1, 2, 3, 4, 5, 6, 7, 8, 9
通常の行列の形で表示するには MatrixForm を用いる.また,行列式は Det で求められる.
MatrixForma
1 2 3 4 5 6 7
8
9
(3)
Deta
0
もう一つの行列 b を定義し,和と積を求める.逆行列は Inverse で求められる.
b 1, 2, 3, 2, 4, 5, 3, 5, 6
ab
2, 4, 6, 6, 9, 11, 10, 13, 15
(4)
a. b
14, 25, 31, 32, 58, 73, 50, 91, 115
Inverseb
1, 3, 2, 3, 3, 1, 2, 1, 0
– 19 –
平成 17 年度 数式処理
第 4 回 (11 / 28)
連立一次方程式
行列 a の行列式は 0 なので,連立一次方程式 a.x=0 すなわち
1 2
4 5
7 8
x 0
y 0
9 z 0
3
6
は自明でない解を持つ.次により,解空間は 1, 2, 1
で張られる一次元空間であることが確かめられる.一方,
b の行列式は 0 でないので,b.x=0 は自明な解しか持たない.
NullSpacea
1, 2, 1
Detb
(5)
1
NullSpaceb
c 1, 0, 2
とおき,連立方程式 b.x=c および a.x=c を解く.ベクトルは (リストのリストではなく) 単なる
リストでよく,必要に応じて行ベクトルもしくは列ベクトルと解釈してくれる.
c 1, 0, 2
LinearSolveb, c
5, 5, 2
(6)
LinearSolvea, c
LinearSolve ::
nosol :
解の存在しない線形方程式が見付かりました. 詳細
LinearSolve
1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 2
解が存在しなければ,このようにエラーメッセージが出る.LinearSolve のもう一つの欠点は,解を一つし
か返してくれないことである.次の命令は,連立方程式
1 2 3
4 5 6
7 8 9
x 1
y 2
z 5
を解かせている.
LinearSolvea, 1, 2, 5
(7)
3, 2, 0
一つの解として x, y, z
3, 2, 0
を与えているが,もちろんこれで全てではない.一つの解決法としては,関
数 RowReduce を用いることである.この関数は,行列を基本変形により標準形に直してくれる.上の連立方
程式の拡大係数行列を標準形に直そう.
– 20 –
平成 17 年度 数式処理
第 4 回 (11 / 28)
RowReduce1, 2, 3, 1, 4, 5, 6, 2, 7, 8, 9, 5
(8)
1, 0, 1, 3, 0, 1, 2, 2, 0, 0, 0, 0
これはつまり,上の連立方程式が
x z 3,
y 2z 2
と同等であることを表しているから,一般解は x, y, z
3, 2, 0
t3, 2, 1
であることが分かる.余裕があれ
ば,連立方程式 (の係数行列) を入力すれば,一般解が出力されるような関数を定義してみよ.
練習問題 1
次の連立方程式を解け.
(i)
(iii
x y 2z 4,
2x y z 5,
3x 2y z 1.
2x 3y z 2,
x y 3z 1,
x 4y 4z 4.
(ii
(iv)
x 2y 3z 3,
x y z 2,
x 5y 9z 6.
(1)
x 2y w 0,
2x 4y z w 0,
x 2y z 2w 0.
(2)
階数
行列の階数を求める関数を自分で定義してみよう.次が一つの答えである.
rankx Dimensionsx2 LengthNullSpacex
(9)
少し長い定義である.少しずつ解説しよう.このようなプログラムの意味を理解するには,実際何が行われるの
か実験するのがよい.まず,行列 d を定義しよう.実はこの行列の階数は 2 であることが標準形に直してみれ
ば分かる.
d 1, 1, 3, 2, 2, 0, 5, 4, 1, 3, 4, 2
MatrixFormd
1
1
3
2
0
5
4
2
1
3
4
2
(10)
RowReduced
5
1
1, 0, , 2, 0, 1, , 0, 0, 0, 0, 0
2
2
rankd
2
Dimensions は行列の次元 (すなわち行の個数と列の個数) をリスト形式で出力する.また,リスト L に対し,
L[[n]] は L の n 番目のオブジェクトを出力する.すなわち,(9) の前半部分は行列の列の個数を表しているの
である.
– 21 –
平成 17 年度 数式処理
第 4 回 (11 / 28)
Dimensionsd
3, 4
(11)
%2
4
後半部分についてであるが,NullSpace は零空間の基底をリスト形式で出力するのであるから,その長さとは
つまり,零空間の次元である.
NullSpaced
2, 0, 0, 1, 5, 1, 2, 0
(12)
Length%
2
これでなぜ,rank で階数を求めることができるか分かったであろう.
• (蛇足) 線形代数の知識が足りないために,まだよく分からないという学生のために,ややいい加減な説明を試
みる.分かっている者は読み飛ばしてよい.イメージしやすいように,行列 d を連立方程式 d.x=0 と対応させ
て考えよ.すると,階数とは,連立方程式の「本質的な」式の個数のことである.d.x=0 では「見た目の」式
の個数は 3,変数の個数は 4 であるから,零空間の次元は 1 だと期待される.しかし,実際の次元は 2 である.
それは,
「本質的な」式の個数が 2 だからである.一般に,変数の個数から零空間の次元を引けば,本質的な式
の個数を得られるのである.
なお,Mathematica の version 5 からは,行列の階数を求める関数 MatrixRank が用意されている.
対角化
次の行列を対角化してみよう.
m 1, 0, 0, 1, 2, 2, 0, 0, 1
(13)
まず,特性方程式 xE m 0 を解いて固有値を求めよう.ここに,IdentityMatrix[3] は三次単位行列で
ある.
SolveDetx IdentityMatrix3 m 0, x
(14)
x 1, x 1, x 2
固有値は 1 (重根) と 2 であることが分かった.次に,対応する固有空間を求めよう.
– 22 –
平成 17 年度 数式処理
第 4 回 (11 / 28)
NullSpaceIdentityMatrix3 m
2, 0, 1, 1, 1, 0
(15)
NullSpace2 IdentityMatrix3 m
0, 1, 0
重根 1 に対応する固有空間の次元が 2 であるから,めでたく対角化可能である.そこで,対角化する行列 p を
定義する.ここに,Join はリストを結合する関数,Transpose は転置行列を与える関数である.
Join%%, %
2, 0, 1, 1, 1, 0, 0, 1, 0
(16)
p Transpose%
2, 1, 0, 0, 1, 1, 1, 0, 0
p1 mp を計算すると,確かに対角成分が固有値である対角行列になっている (理論的に当然である).
Inversep.m.p
(17)
1, 0, 0, 0, 1, 0, 0, 0, 2
実は,固有値や固有ベクトルを求める関数は Mathematica に標準で用意されている.
Eigenvaluesm
2, 1, 1
(18)
Eigenvectorsm
0, 1, 0, 2, 0, 1, 1, 1, 0
• (独り言) 諸君は,線形代数の授業で,上の計算を苦労して手計算でやってきたであろう.それが,計算機が一
瞬で計算してしまうのを見てしまい,自分の苦労が何だったのか,と思うかもしれない.しかし,計算練習は計
算結果を出すのが目的ではなくて,むしろどのように計算すればよいのか,その意義は何なのか,ということを
理解する方が大事なのである.そこを理解せずに計算機に頼りっ放しになると,ひどいしっぺ返しをくらうで
あろう.所詮計算機は命令されたことしかできないのであるから,判断して命令を下すべきは人間なのである.
昨今,計算は電卓にさせればよいから難しい計算の練習は必要ない,と考える風潮があるが,それは考え違いで
あろう.計算機は確かに便利ではあるが,万能ではないのだから,補助のために用いる,という考え方が正しい
と思う.
– 23 –
平成 17 年度 数式処理
第 4 回 (11 / 28)
課題
次の行列を可能ならば対角化し,対角化する行列と対角化された行列を求めよ (Eigenvalues などを用い
てもよいが,確かめの計算をすること).
(i)
9 0 4 1 5
1 ,
1 4 0
(ii)
3 0 4
3 2
6
2 0 3
.
メールに次の 2 点を記入せよ.
• 上の問いの答えを記入せよ (行列は Mathematica 式に書けばよい).
• 今日の内容について何か感想を述べよ (一言でもよい).
メールの Subject は「学籍番号+math4」とせよ.例えば,学籍番号が 6101999 ならば,6101999+math4 と
なる.署名を付け,math4.nb を添付し,今日中に j-goto 宛に送ること.
– 24 –