1 maple での行列・行列式 線形代数の計算 - …...1...
TRANSCRIPT
1
Mapleでの行列・行列式(線形代数の計算)の基本操作 1. 行列の入力と基本計算(第2回、No1 (1〜30) ) (i) 行列の入力 (p.1〜p.5参照) (m,n)型の行列の入力
> matrix(m,n,[-----------]) ----------の部分に行単位でコンマ「,」で区切って成分を入力。
たとえば、(3,4)型の行列
A=2 −4 5 60 2 7 89 6 1 −1
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟,B=
5 7 −9 53 8 9 102 11 12 7
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟,を入力
し、 A+ B,2A−5Bを計算してみよう。
with(linalg): A:=matrix(3,4,[2,-4,5,6,0,2,7,8,9,6,1,-1]);B:=matrix(3,4,[5,7,-9,5,3,8,0,10,2,11,12,7])
evalm(A+B), evalm(2*A-5*B)
行列 Aの転置行列 t A を求めるには、transpose(A)と入力。 (p.9参照)
transpose(A)
transpose(2*A-5*B )
2
一般的な (m,n)型の行列 (ai, j )の入力
matrix(m,n,[seq(seq(a[I,j],j=1..n),i=1..m)と入力する。たとえば、
A:=matrix(3,4,[seq(seq(a[i,j],j=1..4),i=1..3)]);B:=matrix(3,4,[seq(seq(b[i,j],j=1..4),i=1..
3)])
たとえば、
i! j!(i+ j)!
を (i, j)成分とする (4,4)型の行列を入力してみよう。
matrix(4,4,ds[seq(seq(i!*j!/(i+j)!, j = 1 .. 4), i = 1 .. 4)])
注:列 seq( sequence )の使い方は第1回分を参照
すべての成分が aである (m,n)型の零行列は
matrix(m,n,a) と入力して得られる。 たとえば、
matrix(5,6,6)
matrix(5, 6, a)
のようになってしまう。そこで次のようにして解決する。
3
matrix(3,4,[seq(seq(a,j =1..4),i = 1 .. 3)])
零行列は aを 0とすればよい。
matrix(3,4,0)
対角行列の入力。対角成分が α,β,γである対角行列は
diag(alpha,beta,gamma)
のようにする。対角成分が ai,i (i=1,2,!,10)である 10次の単位行列は
diag(seq(a[i, i],i = 1..10))
のようになる。
diag(seq(1,i=1..10))
4
は 10次の単位行列である。(p.10参照) 正方行列 A1,A2,!,Akを対角線に沿って繋いだ行列 ( A1⊕!⊕Akとかく)
A1 O!
O Ak
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟
を構成するには、次のように入力する
diag(A1,A2,!,Ak )
たとえば、
matrix(2, 2, [1, 3, 5, 6]), matrix(3, 3, [4, 5, 6, 3, 1, 7, 9, 5, 3]), matrix(4, 4, [seq(k, k =
1.. 16)])
diag(%)
次に行列の繋ぎ合わせ(貼り合わせ)の扱い。(%については第1回 p.4参照) (m,n)型の行列 A,(m,k)型の行列 Bについて、(A,B)を構成するには、concat(A,B)または augment(A,B)と入力。たとえば、
A := matrix(2, 2, [1, 3, 5, 6]); B := matrix(2, 3, [4, 6, 8, 9, 5, 9])
concat(A,B)
augment(A,B)
5
(m,n)型の行列 Aについて、行方向にs個、列方向に t個 aを並べた (m+ s,n+ t)型の
行列
A a ! aa a ! a" " # "a a ! a
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
を構成するには,次のように」入力する。
extend(A,s,t,a) たとえば、
A := matrix(3, 4, [3, 4, 5, 6, 7, 8, 2, 3, 4, 1, 2, 3])
extend(A, 3, 4, a)
行列 Aを行列 Bに、Bの (k,l)の位置に Aの(1,1)成分がくるように埋め込むには,次の
ように入力する。行列 Bの一部分を他のデータで置き替える便利な機能である。
copyinto(A,B,k,l) たとえば、
A:=matrix(2,3,[4,5,6,7,8,9]); B := matrix(4, 5, 0)
copyinto(A, B, 2, 2)
6
注:copyinto(A, B, 2, 2)によって、埋め込まれた行列は改めて Bとなってしまう。もとの Bに
戻したい場合には再度 Bを入力する必要がある。
m次の正方行列 A, n次の正方行列 B、 (m,n)型の行列 Cについて、
A CO B
⎛
⎝⎜⎜⎜⎜
⎞
⎠⎟⎟⎟⎟
を構成してみいよう。
M := matrix(2, 2, [4, 6, 8, -9]), matrix(3, 3, [-1, 2, 0, 4, 3, 6, 8, -2, 9]), matrix(2, 3, [0, 5, 6, 3, 5, 6]);
copyinto(M[3], diag(M[1], M[2]),1,3)
(m,n)型の行列 A= ai, j( )において、 ai, j ( 0≤ s≤ t≤m,0≤u≤ v≤ n )から
行列
as,u ! as,v" # "at ,u ! at ,v
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
を構成するには、
submatrix(A,s..t,u..v) と入力する。 Aにおいて、 s行から t行を削除した行列を構成するには
delrows(A,s..t) と入力する。また、 s行のみを削除したい時には
delrows(A,s..s)
7
と入力。 Aにおいて、 s列から t列を削除した行列を構成するには、
delcols(A,s..t) と入力する。また、 s列のみを削除したいときには、 delcols(A,s..s) と入力。
たとえば、
with(linalg); A := matrix(4, 5, [seq(k, k = 1 .. 20)])
submatrix(A, 2 .. 4, 3 .. 5)
submatrix(A, 1 .. 4, 4 .. 4)
delrows(A, 2 .. 3)
delcols(A,3..5)
(ii) 行列の積。 行列 A,Bの積を計算するには
multiply(A,B) と入力して計算する。(行列の積については p.5〜6参照)
8
行列 A1,A2,!,Akの積は multiply( A1,A2,!,Ak )
と入力して計算する。
たとえば、
with(linalg);A := matrix(3, 4, [2, 3, 5, -6, 8, -9, 2, 5, 0, 11, -4, 7]); B := matrix(4, 3, [5, 6, 9, 7, 3, 5, -9, 6, 7, 10, 3, 21])
multiply(A, B)
L:= matrix(3,4, [seq(2*k+3, k = 0 .. 11)]), matrix(4, 3, [seq(5*k-3, k = 0 .. 11)]), matrix(3, 4, [-3, 2, 5, 7, 8, -4, 8, 9, 4, 5, 11, 12]), matrix(4, 5, [seq(3*l-10, l = 1 .. 20)])
multiply(L)
注:これは行列のリスト Lで左から順にかけたものである
複素数 zの共役複素数 zは conjugate(z) と入力して得られる。( p.5参照) たとえば、
z := 5+6*I conjugate(z)
9
複素行列 A= (ai, j )の共役複素行列 A= ai, j( )は
map(conjugete ,A) と入力して得られる。 たとえば、
A := matrix(3, 3, [3-I, 5+6*I, 8+9*I, 7-9*I, 6+5*I, -2, 6+7*I, 7+8*I, 3-9*I])
map(conjugate, A)
multiply(A, map(conjugate, A))
複素行列 Aについて、 tA( )を Hermite transposeといい、(p.362参照)
htranspose(A)
と入力して得られる。上の Aについて、 tA( )を求めてみよう。
htranspose(A)
multiply(htranspose(A), A)
正方行列 Aのべキ乗 Anを計算するには
A^n と入力。また行列 Aの (i, j)成分を出力したいとき、
A[i,j]
10
と入力する。(p.12参照) たとえば、
A=1 4 −53 −2 46 7 8
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟
について、 A10の(3,2)成分を出力してみよう。 A := matrix(3, 3, [1, 4, -5, 3, -2, 4, 6, 7, 8])
evalm(A^10)
%[3, 2]
たとえば、
A=
a 1b
cd
O e
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
について、 Anを計算してみよう。
with(linalg):
A:=copyinto(matrix(1, 1, [1]), diag(a, b, c, d, e), 1, 5)
seq(map(expand, evalm(A^k)), k = 1 .. 7)
11
An =
an akelk+l=n−1, k ,l≥0∑
bn
cn
dn
O en
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
であることがわかる。(帰納法で証明)
A=
O 11
11
1 O
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
について、 Anを計算してみよう。
A :=swapcol(swapcol(diag(seq(1,k =1..5)),1,5),2,4):
seq(evalm(A^k),k =1..5)
12
∴ An =
E ( n is even number )A ( n is odd number )⎧⎨⎪⎪⎩⎪⎪
行列の代入:多項式 f (x)、正方行列 Aとするとき、 f (A)を計算するには、
subs(x=A,f(x)) と入力する
たとえば、 x3−2x2 + 3x+6に A=
3 5 −25 4 17 9 8
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟を代入してみよう。
A:=matrix(3, 3, [3, 5, -2, 5, 4, 1, 7, 9, 8])
evalm(subs(x = A, x^3-2*x^2+3*x+6))
正方行列の対角成分の総和(trace)を求めるには
trace(A) と入力する。(p.15参照) たとえば、
A:=matrix(3,3,[23,45,67,54,-65,44,32,41,67])
trace(A)
△ 正則行列 (p.16参照)
正則行列 Aの逆行列 A−1は inverse(A)
13
と入力して得られる。 たとえば、
A := matrix(3, 3, [21, 19, 24, 18, 23, 61, 31, 44, 51])
inverse(A)
A := copyinto(matrix(5, 1, [a, b, c, d, e]), diag(1, 1, 1, 1, 1, 1), 1, 6)
inverse(A)
L := matrix(2, 2, [3, 5, 6, 9]), matrix(3, 3, [4, 6, 9, 8, 6, 5, -9, 11, 22]), matrix(4, 4, [3, 4, 6, 8, 9, 2, -6, 9, 5, 6, 11, 3, 5, 9, 6, -33]), copyinto(matrix(2, 3, [-2, 5, 7, 9, -11, 5]), diag(matrix(2, 2, [56, 78, 43, 21]), matrix(3, 3, [3, 5, 7, 9, -4, 7, 3, -7, 8])), 1, 3)
14
seq(inverse(L[k]), k = 1 .. 4)
(p.24参照) △ 基本行列と基本変形
基本行列と基本変形は行列の階数、逆行列の求め方、連立1次方程式の解法、行列式
の計算、ベクトル空間の次元、固有値、固有ベクトル、行列の標準化とその変換行列の
計算等には欠かせないものである。線形代数を学ぶ上で必要不可欠であると言っても過
言ではない。十分理解し計算できるようにしておくことが大切である。(p.25〜 参照) 基本変形の操作は swaprow,swapcol,mulrow,mulcol,addrow,addcolで行う。 これについては p.25参照されたい 基本行列P10 (3,6), Q10 (5,c), R10 (4,8)を構成してみよう。
with(linalg): swaprow(diag(seq(1, k = 1 .. 10)), 3, 6) -----P10 (3,6)の構成---
copyinto(matrix(1, 1, [c]), diag(seq(1, k = 1 .. 10)), 5, 5) ----Q10 (5;c)の構成------
15
copyinto(matrix(1, 1, [c]), diag(seq(1, k = 1 .. 10)), 4, 8) ---- R10 (4,8;c)の構成----
A := matrix(10,10,[seq(seq(a[i, j], j = 1..10),i = 1..10)])
multiply(A, R) -------Aの右側基本変形-------
16
multiply(R, A) -----------Aの右側基本変形---------------
のように右側・左側基本変形の実験してみることができる。 行列 A∈M (m,n;C)について、適当な基本行列P,Q (何個かの基本行列の積)を選ん
で、
PAQ=Er Or ,n−r
Om−r ,r Om−r ,n−r
⎛
⎝
⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟
とできる。rを Aの階数 (rank)という。rank(A)とかく。また、適当な基本行列Pを選
んで、
PA=Er Ur ,n−r
Om−r ,r Om−r ,n−r
⎛
⎝
⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟ ただし、
Ur ,n−r =α1,r+1 ! α1,n−r" # "αr ,r+1 ! αr ,n−r
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
とできる。これを Aの Gauss Jordan 標準形という。(p.31〜36参照)
注: rは Aの列ベクトル(行ベクトル)の1次独立なベクトルの 大個数を意味する。 行列 Aにおいて、 (p,q)を要として、 q列を掃き出すには、
pivot(A,p,q) と入力。たとえば、
A=
1 2 3 45 6 7 89 10 11 1213 14 15 16
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
で、(1,1),(2,2),(3,3),(4,4)を要として掃き出してみよう。
with(linalg); A :=matrix(3,3,[12, 13, 10, 10, 21, 15, 11, -23, 41])
17
seq(pivot(A, i, i), i = 1 .. 4)
pivot(pivot(A, 1, 1), 2, 2)
このれらの考えを逆行列を求めること、連立1次方程式の解法に応用する。 n次の正方行列 Aの逆行列を求めるには、 (n,2n)型の行列 (A!En )を考える
適当な基本行列 Pを選んで、
P(A!En )=Er Ur ,2n−r
Om−r ,r On−r ,2n−r
⎛
⎝
⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟,Ur ,2n−r =
α1,r+1 " α1,2n−r! # !αr ,r+1 " αr ,2n−r
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
とできる。このことから「Aが正則 ⇔ n= rank(A)」であることがわかる。
Aが正則のとき、 P(A!En )= (En!A−1)をうる。ここで、 P は適当な基本行列。
たとえば、
A=12 13 1010 21 1511 −23 41
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟
の逆行列を求めてみよう。 rank(A)< 3となったら Aは正則でないことになる。計算の
途中で正則は非正則かもわかる。
with(linalg): A := matrix(3, 3, [12, 13, 10, 10, 21, 15, 11, -23, 41])
18
AA := augment(A, diag(1, 1, 1))
A1 := addrow(AA, 3, 1, -1)
A2 := addrow(addrow(A1, 1, 2, -10), 1, 3, -11)
A3 := addrow(A2, 3, 2, -1)
A4 := addrow(A3, 2, 3, 5)
A5 := addrow(A4, 3, 2, 4)
A6 := addrow(A5, 2, 3, 5)
A7 := swaprow(A6, 2, 3)
A8 := addrow(addrow(A7, 2, 1, -36), 2, 3, -4)
19
A10 := addrow(addrow(A9, 3, 2, -A9[2, 3]), 3, 1, -A10[1, 3])
he_inverse_matrix_of_A = submatrix(A10, 1 .. 3, 4 .. 6)
基本変形: A1→ A2→ A3→ A4→ A5→ A7→ A7→ A8→ A9→ A10
を順次行う。 手計算で行う手順で、swaprow,addrow,mulrowを使って、行同士の足したり、引いたりの作業を行った。このような求め方を Gauss Jordan法(掃き出し法)という。
A1→!→ A10を一気に次のように
gaussjord(AA)
とすることができる。また、単に次のように直接求めることもできる。
inverse(A)
ここで連立1次方程式の解法に応用してみよう。たとえば、
20
2x1−3x2 + 4x3 + 5x4 = 33x1−5x2 + 3x3 + 2x4 =−4 x1 + 5x2−4x3 + 2x4 = 22x1 + x2 + 2x3−3x4 = 5
⎧
⎨
⎪⎪⎪⎪⎪
⎩
⎪⎪⎪⎪⎪
を解いてみよう。
with(linalg): A:=matrix(4,4,[2,-3,4,5,3,-5,3,2,1,5,-4,2,2,1,2,-3]); B:=
matrix(4,1,[3,-4,5,7])
AA :=augment(A,B) ----(拡大係数行列 P.49 参照) -------
gaussjord(AA)
matrix(4,1,[seq(x[i],i =1..4)])=submatrix(%,1..4,5..5)
のように解ける。または単に
matrix(4,1,[seq(x[i],i =1..4)]) = multiply(inverse(A),B);
21
としてもよい。 もう1つの例をあげよう。
2x+ 5y+ z+ 2w= 23x+ 2y+ z−3w= 14x+ 2y+ 9z−2w= 4
⎧
⎨
⎪⎪⎪⎪
⎩⎪⎪⎪⎪
を解いてみよう
A :=matrix(3,4,[2,5,1,2,3,2,1,-3,4,2,9,-2]); B:= matrix(3,1,[2, 1, 4])
AA :=augment(A,B) ----(拡大係数行列入力) -------
Y:=gaussjord(AA)
solutions :=matrix(4,1,[seq(Y[k, 5],k =1..3),0])+alpha*matrix(4,1,
[seq(-Y[k,4],k =1..3),1])
と解ける。ここで αは任意の数である。
2. 行列式の計算の基本操作(第3回、No1 (103〜145) ) 正方行列 Aについて,Aの行列式 A を計算するには、
det(A) と入力。たとえば、
22
A:=matrix(3,3,[21,15,25,20,17,27,15,24,19])
det(A)
B := matrix(4,4,[18,11,13,-15,4,7,9,11,13,-21,17,41,19,15,-10,11])
det(B)
すぐ結果が得られるが、計算経過が目に見えないことで、不満を持たれるかもしれな
い。答えあわせには非常に有効であろう。それで、手計算するように行列式の性質(p.108
〜112参照)を使って、変形していって結論を導く。その変形過程にMapleを使う。 行列 Aにおいて、 i行、 j列を取り除いた行列 Ai, jを求めるには
minor(A,i,j)
と入力して得られる。正方行列 Aの (i, j)余因子 a!i, jは (−1)i+ j Ai, j は
(−1)i+ j ⋅det(minor(A,i,j))
と入力する。余因子については p.115参照されたい。 上であげた例を今の考え尾踏まえて計算してみよう
A1:=addrow(A,2,1,-1)
A2 := addcol(addcol(A1,2,3, 1),1,2,2); addrow(A2,3,2, 2)
minor(A2, 1, 1),det(%)
B1 :=addcol(B,1,3, -2)
23
B2 := pivot(B1,2,3); a := (-1)^(2+3)
B3 :=minor(B2,2,3)
B4 := addcol(B3,2,1,-1)
B5 := addcol(addcol(B4,1,2, -6),1,3,-20); b :=7*(-1)^(2+1)
minor(B5,2,1); Determinant_of_B = a*b*det(%)
これで途中計算経過がよくわかるであろう。 成分に文字式が入っているとき、計算を重ねている間に各成分が複雑化して見にくく
なる場合がある。そのときの対処法を説明する。
行列 Aの各成分に同時に simplify (簡素化)、expand (展開)、factor(因数分解)の機能を各成分に同時に作用させるには、
map(simplify,A)
map(expand,A) map(factor,A) と入力する。たとえば、
24
A:= matrix(3,3,[1,a,a^3,1,b,b^3,1,c,c^3])
A1 :=addrow(addrow(A,1,2,-1),1,3,-1)
A2 :=map(factor,A1); alpha := -a+b; beta := -a+c
mulrow(mulrow(A2,2,1/alpha),3,1/beta)
map(simplify,%)
addrow(%,2,3,-1)
map(factor, %)
Ans :=alpha*beta*%[3,3]
もう1つ例を挙げておこう。
25
λ−6 3 71 λ−2 −1−5 3 6
= 0
を満たす λの値を求めてみよう。
with(linalg); E := diag(1, 1, 1); A := matrix(3,3,[6,-3,-7,-1,2,1,5,-3,-6])
AA:=evalm(lambda*E-A)
addrow(addrow(AA, 2, 1, -AA[1, 1]), 2, 3, -AA[3, 1])
addrow(%,2,3,lambda-1)
map(expand, %)
map(factor, %)
minor(%, 2, 1)
26
このことから、 λ= ±1,2がわかる。単純に次のようにしてもよい。
factor(det(AA))
以上の例から、simplify,expand,factor の行列の変形での使い方を理解してもらえただろうか。これは固有値の計算(特性行列の変形を手計算風に計算する)に非常に有用で ある。 「 正方行列 Aが正則である ⇔ A ≠ 0 」
(p.152 定理 23参照) が知られている。そして、Aが正則のとき、
A−1 =
1AA! ( A! は Aの余因子行列)
と表される。(p.153 参照) Aの余因子行列は
adjoint(A) と入力して得られる。例をあげておこう。
with(linalg): A:=matrix(4,4,[2,-3,5,6,-1,2,6,1,4,0,1,2,4,5,0,-9])
adjoint(A)/det(A) -----(Aの逆行列の計算)------
multiply(%,A) ------(検算)----------
クラーメルの公式による連立1次方程式の解法 (p.156参照)
連立1次方程式:
5x+ 7y−6z= 99x−5y−8z=1111x+9y+ 7z=10
⎧
⎨
⎪⎪⎪⎪
⎩⎪⎪⎪⎪
をクラメールの公式を用いて解いてみよう
with(linalg): A := matrix(3,4,[5,7,-6,9,9,-5,-8,11, 11,9,7,10])
27
M := submatrix(A,1.. 3,1..3), seq(submatrix(swapcol(A,i,4),1..3,1..3),i =1..3)
(x, y, z) = seq(det(M[i])/det(M[1]),i = 2..4)
gaussjord(A)
◇ 終結式 (p.162参照)
2つの多項式
f (x) = a0xn +a1x
n−1 +!+an−1x+ang(x) = b0x
m +b1xm−1 +!+bm−1x+bm
⎧⎨⎪⎪
⎩⎪⎪ ( a0b0 ≠ 0 )
とする。多項式の係数から構成された n+m次の行列式を
R f (x),g(x)( )=
a0 a1 ! an Oa0 a1 ! an
O " " " "a0 a1 ! an
b0 b1 ! bmb0 b1 ! bm O" " " "
O b0 b1 ! bm
とおく。これを f (x)と g(x)の終結式(resultant)または Sylvesterの行列式という。
(p.163参照)
代数方程式 f (x)= 0,g(x)= 0が共通解をもつための必要十分条件は
28
R f (x),g(x)( )= 0
である。また、方程式 f (x)= 0が重複解を持つための必要十分条件は
R f (x), ′f (x)( )= 0
である。これをD( f (x))と表す、そして、これを判別式という。終結式は2つの代数
曲線の交点を調べる上で非常に便利な道具である。
f (x),g(x)の Sylvesterの行列は
Sylvester(f(x),g(x),x)
と入力する。また、 f (x),g(x)の終結式は
resultant(f(x),g(x),x)
と入力する。判別式は
discrim(f(x),x)
と入力する。
たとえば、
x4−13x3−78x2 +1111x−121= 0x5− x4−87x3−263x2 +111x−11= 0
⎧⎨⎪⎪
⎩⎪⎪
が共通解をもつかの判定をしてみよう
f := x^4-13*x^3-78*x^2+1111*x-121; g := x^5-x^4-87*x^3-263*x^2+111*x-11
sylvester(f, g, x)
det(%)
resultant(f, g, x)
とすることができる。以上から共通解があることがわかる。 次の2つの式
29
x3 + 4x2y+ 5xy2 + xy−7y3 = 0, 2x3−5x2y+12xy− y3 = 0
から yを消去した式を求めよう。
f := x^3+4*x^2*y+5*x*y^2-7*y^3+x*y; g := 2*x^3-5*x^2*y-y^3+12*x*y
sylvester(f,g,y)
factor(det(%))
方程式: x
3 + px+q= 0が重複解を持たない条件を求めよう。
discrim(x^3+p*x+q, x)
をうる。すなわち、 4 p
3 +27q2 ≠ 0が求める条件である。
3. ベクトルの扱い たとえば、次のベクトルの1つの極大集合を選び、それに含まれないベクトルを極大
集合の元の1次結合として表せ。
a1 =
2−3451
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
,a2 =
−24513
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
,a3 =
32134
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
,a4 =
51−123
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
,a5 =
01−234
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
,a6 =
635−21
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
with(linalg):A:=matrix(5,6,[2,-2,3,5,0,6,-3,4,2,1,1,3,4,5,1,-1,-2,5,5,1,3,2,3,-2,1,3,4,3,4,
1])
gaussjord(A)
30
この計算の結果は S= {a1,a2,a3,a4 ,a5}が1つの極大集合(p.58参照)で、
a6 =
4981a1 +
24581a2−
53981a3 +
49981a4−
1181a5
と1次結合で表されることを意味する。他方、
AA := swapcol(A,1,6)
gaussjord(AA)
これは、 ′S = {a6,a2,a3,a4 ,a5}も1つの極大集合で、
a1 =
8149a6−5a2 +11a3−
49949a4 +
1149a5
と表されることを意味する。 n次元数ベクトル: a= (a1,a2,!,an ),b= (b1,b2,!,bn )について、
(a,b)= aibi
i=1
n
∑
を aと bの内積(inner product)という。 a = (a,a)を aのノルムという。
cosθ=
(a,b)a ⋅ b
( 0≤θ≤π )
31
である θが一意的に定まる。 θを aと bのなす角という。 (a,b)= 0⇔ a⊥ b である。
(P.192参照) 内積 (a,b)、 aと bのなす角は
innerprod( a,b ) angle (a,b)
と入力する。たとえば、 a= (2, x,−5,2x+ 3),b= (x, 3,6,9)∈R4が直交するように xの
値を求めよう。
with(linalg): a := vector([2, x, -5, 2*x+3]); b :=vector([x, 3, 6, 8]) solve(innerprod(a,b)=0,x)
次の正方行列 Aの列ベクトルを a1,a2,!,anとすると、
t A ⋅A=
(a1,a1) (a1,a2 ) ! (a1,an )(a2,a1) (a2,a2 ) ! (a2,an )" " # "
(an ,a1) (an ,a2 ) ! (an ,an )
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
とかける。 (ai ,a j )= δi, jのとき、A を直交行列という。すなわち、 a1,a2,!,anが正規
直交系であるとき Aは直交行列という。このとき、 A = ±1である。
∵ t A ⋅A = t A ⋅ A = A 2 =1
3次元数ベクトル a= (a1,a2,a3),b= (b1,b2,b3)∈R3について、
a∧b=a2 a3b2 b3
,a3 a1b3 b1
,a1 a2b1 b2
⎛
⎝
⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟∈R3
と定義する。これを aと bとの外積(ベクトル積)という。 a×bともかく。
a∧b は a ,bで張られる平行四辺形の面積を表す。 (p.197参照)
a∧bは
crossprod( a , b ) と入力して得られる。 たとえば、 a= (3,−5,7),b= (−9,4,8)について、 a∧b、 a∧b , aと bのなす角を求め
てみよう。
with(linalg): a := vector([3, -5, 7]); b := vector([-9, 4, 8])
32
crossprod(a, b)
sqrt(innerprod(%, %)) ----- a,bで張られる平行四辺形の面積----
theta := angle(a, b)) ------ a,bのなす角----------
evalf(theta)
θ=1.492861738 radian である。 △ 部分空間の基底の求め方。(232参照)
数ベクトル {a1,a2,!,ar}⊂Rnから、 1 つの基底を求めるには、
basis( {a1,a2,!,ar} )
と入力。
たとえば、
a1 =
11−1−1
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
,a2 =
321−2
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
.a3 =
01−4−1
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
,a4 =
123−2
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
,a5 =
3010
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
から1組の基底を求めてみよう.
with(linalg): a[1]:= vector([1, 1, -1, -1]): a[2] := vector([3, 2, 1, -2]):
a[3] := vector([0, 1, -4, -1]): a[4] := vector([1, 2, 3, -2]): a[5] := vector([3, 0, 1, 0]):
basis({seq(a[j], j = 1 .. 5)})
concat(seq(a[j], j = 1 .. 5))
33
gaussjord(%)
swapcol(%, 3,4)
部分空間 W1 = {{a1,a2,!,as}},W2 = {{b1,b2,!,bt}}⊂Rnについて、和空間 W1 +W2
をの基底を求めるには subbasis ( {a1,a2,!,as},{b1,b2,!,bt} )
と入力。
W1∩W2の基底を求めるには intbasis ( {a1,a2,!,as},{b1,b2,!,bt} )
と入力する。和空間については(p.233参照) たとえば、
W1 = {{(1,0,1,1),(0,1,1,1)}},W2 = {{(1,0,0,0),(0,0,1,0),(0,0,0,1)}⊂R4 について、 W1∩W2,W1 +W2の基底をもとめよう。
with(linalg): a1 := vector([1, 0, 1, 1]); a2 := vector([0, 1, 1, 1]); W[1] := {a1, a2}
b1 := vector([1, 0, 0, 0]); b2 := vector([0, 0, 1, 0]); b3 := vector([0, 0, 0, 1]); W[2] := {b1, b2, b3}
intbasis(W[1], W[2])
sumbasis(W[1], W[2])
が得られる。
34
この例から、次元公式公式
dim(W1 +W2 ) = dimW1 + imW2−dimW1∩W2
! ! ! ! 4 2 3 1
を確かめられる。 △ Gram Schmidtの正規直交化の公式
部分空間Wの1つの基底 a1,a2,!,arから、正規直交基底 c1,c2,!,crを構成する。
b j = a j−
(a j ,bk )bk
2k=1
j−1
∑ bk ( j =1,2,!,r )
c j =
1b jb j ( j =1,2,!,r ) (正規化)
とおくと、 b1,b2,!,brがWの直交基底、そして、 c1,c2,!,crがWの正規直交基底
となる。これを Gram Schmidt の正規直交化法という。(p.237参照)
Mapleで直交基底を求めるには、 GramSchmidt([ a1,a2,!,ar ])
と入力する。 たとえば、 部分空間 W = {{(−1,2,3),(2,−1,1),(1,1,1)}}の正規直交基底を求めて見よう。
with(linalg): W := GramSchmidt([vector([-1, 2, 3]), vector([2, -1, 1]), vector([1, 1, 1])])
WW :=seq(W[i]/sqrt(innerprod(W[i], W[i])),i =1..3) -------正規化-----------
T := concat(WW)
multiply(transpose(T),T)
35
注:WWのベクトルを列ベクトルに持つ行列 Tが直交行列であることが検証された。
複素ベクトル z= (z1, z2,!, zn ),w= (w1,w2,!,wn )∈C
nについて、
(z,w)= ziwi
i=1
n
∑ = z1w1 + z2w2 +!+ znwn
と定義し、 z,wのエルミート積(hermitian product)という。そして、
z = zi zi
i=1
n
∑ = (z, z)
を複素ベクトル z∈Cnのノルムという。 (z,w)= 0のとき、 z,wは直交するという。
(p.363参照)
Mapleでは dotprod( z,w )
と入力して得られる。 たとえば、
with(linalg):
z := vector([2+3*I, 4-9*I, 7+11*I, 13+7*I]); w := vector([31-7*I, 23+9*I, 5-3*I, 4+4*I])
dotprod(z, w), dotprod(w, z), sqrt(dotprod(z, z)), sqrt(dotprod(w, w))
たとえば、
{{
1−i10
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
,
1+ i1− i2+ i2− i
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
,
2+ i3− i12
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
,
3+ i2+ i−ii
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
}}⊆C4
から正規直交基底を求めよ。
with(linalg):
vector([I,-I,1,0]), vector([1+I,1-I,2+I,2-I]), vector([2+I,3-I,1,2]), vector([3+I, 2+I,-I,I])
36
W:=GramSchmidt([%])
U:=concat(%)
multiply(htranspose(U),U)
注:U がユニタリー行列であることがわかった。U の列ベクトルが正規直交基底であ
ることがわかる。
△ 線形写像 (p.252〜 参照)
線形写像: f :Rm→Rn ( x! Ax= x1a1 + x2a2 +"+ xmam ) について考察する。 ここで、 a jは (n,m)型の行列Aの j列とする。
f (Rm ) = {y; y= f (x) = Ax for ∀x∈Rm}
を f の像(image)という。これを Im f ともかく。
f−1(o) = {x∈Rm; f (x) = o}
を f の核(kernel, null space)という。Ker f ともかく。
dim f (Rm )= m−dim f −1(o) でる。 dim f (Rm )は a1,a2,!,amの極大集合の個数(1次独立なベクトルの 大個数)
である。、すなわち、
dim f (Rm )= rank(A) である。 m= nのとき、 f が正則 ⇔ dim f −1(o)= 0である。
Malpleで f−1(o)の基底を求めるには
kernel(A) と入力する。
37
連立1次方程式を再考してみたい。
連立1次方程式:
a1,1x1 +a1,2x2 +!+a1,mxm = b1
"an,1x1 +an,2x2 +!+an,mxm = bn
⎧
⎨
⎪⎪⎪⎪
⎩⎪⎪⎪⎪
は
Ax= b (ここで、
A= (ai, j ),x=
x1!xm
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟b=
b1!bn
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟ )
と表す。 この方程式は
linsolve(A,b ) と入力して得られる。 たとえば、
x1 + 3x2 +5x3 + 7x4 +9x5 = 54x1−3x2 + 7x3 +9x4 +2x5 = 74x1 +8x2 +6x3 +5x4 +11x5 =−4
⎧
⎨
⎪⎪⎪⎪
⎩⎪⎪⎪⎪
を解いてみよう。
with(linalg):A:=matrix(3,5,[1,3,5,7,9,4,-3,7,9,2,4,8,6,5,11]);b:=matrix(3,1,[5,7,-4])
solutions:=linsolve(A, b)
これは
38
solutions=
−18079
−65791547900
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
+ t1
707933158
−26915810
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
+ t2
11379
−151158
−23915801
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
を表す。 kernel(A) ------------Ker f の基底----------
concat(A, b)
gaussjord(%)
前のものと比較してみて欲しい。
t1
707933158
−26915810
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
+ t2
11379
−151158
−2391580t2
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
∈K er f ( t1,t2は任意の数)
である。 dimker f = 2である。このことは 代数学の言葉で、
Rm / ker f ≅ Im f
とかく。同型定理と呼ばれたりする。
部分空間 W ⊂Rnについて、 W
⊥ = {x; (x, y) = 0 for ∀y∈W }をW の直交補空間と呼ばれている。たとえば、
39
部分空間 W = {{(4,2,6,7,9),(−2,8,5,−3,7)}}⊂R5の直交補空間の基底を求めよう。
with(linalg); A := matrix(2, 5, [4, 2, 6, 7, 9, -2, 8, 5, -3, 7])
kernel(A)
W
⊥ = {{(31,1,0,−18,0),(38,0,0,−23,1),(53 / 2,0,1,−16,9)}}
を得る。そこで、 W ⊕W⊥ =R5である。
△ 固有値・固有ベクトル
n次の正方行列 Aとする。 Ax=λx ( x≠ 0 )
を満たすスカラー λとベクトル xを考える。 λを Aの固有値 (eigen - value)という。 x
を固有値 λに対応した固有ベクトル(eigen- vector)という。 λx−Ax= (λE−A)x= 0 λE−Aを Aの特性行列(charcterisitic matrix)という。 この連立1次方程式が非自明な解をもつから、係数行列式 = 0である。(P.159参照)
λ−a1,1 −a1,2 ! −a1,n−a2,1 λ−a2,2 ! −a2,n" " # "−an,1 −an,2 ! λ−an,n
= 0
この行列式は λについて n次の 高次係数1の多項式である。 高次係数1の多項式を
monic という。この monic を fA(λ)とおき、 A の固有多項式 (charcterisitic
polynomial)という。 方程式: fA(λ)= 0
を Aの固有方程式(charcterisitic equation)という。
n= 2のとき、
fA(λ)=λ−a1,1 −a1,2−a2,1 λ−a2,2
=λ2−(a1,1 +a2,2 )λ+ (a1,1a2,2−a1,2a2,1)
40
∴ fA(λ)=λ2− tr(A)λ+ A
n= 3のとき、
fA(λ)=λ
3− tr(A)λ2 + A1,1 + A2,2 + A3,3( )λ− A
である。(p.297〜299参照) 一般に、 fA(λ)=λ
n− tr(A)λn−1 +!+ (−1)n A
である。 また、 fA(λ)= (λ−λ1)(λ−λ2 )!(λ−λn )とかけるから、
n= 2のとき、 fA(λ)= (λ−λ1)(λ−λ2 )=λ2−(λ1 +λ2 )λ+λ1λ2
n= 3のとき、 fA(λ)=λ3−(λ1 +λ2 +λ3)λ
2 + (λ1λ2 +λ2λ3 +λ3λ1)λ−λ1λ2λ3 . ∴ λ1λ2λ3 = A
一般に、 (−1)nλ1λ2!λn = fA(0)= −A = (−1)n A であるから、 λ1λ2!λn = A 。
このことは、「 Aが正則 ⇔ λi ≠ 0 (i=1,2,!,n)」を意味する。 Wλ = {x; Ax=λx }
とおく。これを固有値 λに対する固有空間(eigen space)という。 特性行列は
charmat(A,lambda) 固有多項式は
charpoly(A,lambda) と入力して得られる。
det(charmat(A,lambda)) としてもよい。 固有値を求めるには
eigenvals(A) と入力。 たとえば、
A=0 1 11 0 11 1 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟
について、
with(linalg): A := matrix(3, 3, [0, 1, 1, 1, 0, 1, 1, 1, 0]): charmat(A, lambda)
41
f[A](lambda) = charmat(A, lambda)
factor(%)
固有値は λ1 =−1,λ2 = 2である。
eigenvals(A)
eigenvects(A)
kernel(-E-A), kernel(2*E-A)
とすることもできる。 これを手計算風に計算するなら次のようにする。
with(linalg); E := diag(1, 1, 1): A := matrix(3, 3, [0, 1, 1, 1, 0, 1, 1, 1, 0])
A1 := evalm(E*lambda-A)
addrow(addrow(A1, 1, 2, -1),1,3, lambda); minor(%,1,3)
factor(-det(%))
W[1] := kernel(-E-A); W[2] := kernel(2*E-A)
42
W[1][1], W[1][2], W[2][1]
T := augment(%)
inverse(T), evalm(A), evalm(T)
multiply(%)
のように計算できる。 正方行列 A に対して、 f (A)=Oである monic f (x)を A の零化多項式(p.325
参照)という。
たとえば、先ほどの行列 A をつぎの多項式に代入してみよう。
f :=x^3-3*x-2
evalm(subs(x=A,f))
実は、f は A の固有多項式でした。一般に正方行列 A について、固有多項式 fA(λ)
は A の零化多項式である。これは Cayley—Hamilton の定理と呼ばれている。 (P.323 参照)
A の零化多項式で次数 小の多項式を A の 小多項式 (minimal polynomial)という。(p.325 参照)。 ϕA(λ)と表す。 ϕA(λ)は fA(λ)を割っていることは明らかで
ある。
43
たとえば、
n 次の正方行列
A=O 1!
1 O
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟, 2n次の正方行列
A= O E
E O
⎛
⎝⎜⎜⎜⎜
⎞
⎠⎟⎟⎟⎟
の 小多項式は λ2−1である。次のように計算して確かめられる。
with(linalg):M:=swapcol(swapcol(diag(1,1,1,1,1),1,5),2,4);A:=copyinto(M,copyinto(M,matrix(10,10,0),1,6),6,1)
evalm(A^2)
また、
f[A](lambda)=factor(charpoly(A,lambda))
A の 小多項式を求めるには、
minpoly(A,lambda) たとえば、
with(linalg): A:=matrix(3,3,[0,1,1,1,0,1,1,1,0]) factor(minpoly(A,lambda))
E:=diag(1,1,1): evalm(A+E),evakm(A-2*E) ----------確かめ算-----------
44
multiply(%)
正方行列 A について、適当な正則行列 P をうまく選んで、
P−1AP=
λ1 Oλ2!
O λn
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
と対角行列になったとき、A は対角化可能 (diagonalizable)であるとか、準単準(semi simple)であるという。この対角行列を A の対角化という。対角成分は固有値である。また、P を対角化変換行列という。
n次の正方行列 A が対角化可能である ⇔ dim Wλ1⊕Wλ2 ⊕!⊕Wλn( )= n
n次の正方行列 Aが対角化可能である ⇔Aの 小多項式 ϕA(λ)が単純零点のみを
持つ がわかっている。(p.352 定理 54 参照)
変換行列 P は固有空間の基底(固有空間の次元< nの時には対角化可能でない)を列ベクトルとする行列である。 たとえば、
A=−32 85 32518 −43 −174−8 20 79
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟
の対角化を求めてみよう。
A:=matrix(3,3,[-32,85,325,18,-43,-174,-8,20,79])
V:=eigenvects(A)
45
V[1][3][1],V[2][3][1],V[3][3][1]
P :=concat(%)
inverse(P),evalm(A),evalm(P)
multiply(%)
手計算風で行うと、
E := diag(1, 1, 1); charmat(A, lambda)
f[A](lambda) = factor(det(%))
gaussjord(-1*E-A); p[1] := vector([5, -2, 1])
gaussjord(2*E-A); p[2] := vector([5, 2, 0])
46
gaussjord(3*E-A); p[3] := vector([2, -3, 1])
P := concat(p[1],p[2], p[3])
inverse(P), evalm(A), evalm(P)
multiply(%)
△ 対称行列の扱い
実正方行列 Aが対称行列であるとは、 t A= Aのときをいう。対称行列は対角化可能で、
変換行列T は Aの固有空間の正規直交基底を列ベクトルとする直交行列にとることができることは既に説明した。(p.392 参照)
「対称行列(正規行列) ⇔ A* = A)の異なる固有値に対応する固有ベクトルは直交する」を念頭に置いておこう。定理 58 (p.58 参照)
たとえば、次の対称行列を考えよう。
A=1 2 −12 −1 1−1 1 2
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟
47
with(linalg):E:=diag(1,1,1):A=matrix(3,3,[1,2,-1,2,-1,1,-1,1,2])
gaussjord(2*E-A); p[1]:=vector([1, 1, 1])
gaussjord(sqrt(7)*E-A); p[2] := vector([-sqrt(7)+1, sqrt(7)-3, 2])
gaussjord(-sqrt(7)*E-A); p[3] := vector([sqrt(7)+1, -sqrt(7)-3, 2])
gaussjord(-sqrt(7)*E-A); p[3] := vector([sqrt(7)+1, -sqrt(7)-3, 2])
seq(evalm(p[i])/sqrt(innerprod(p[i], p[i])),1=1..3) ----正規化の操作-----
T:=map(simplify,evalm(augment(%)))
48
map(simplify,multiply(transpose(T),T)) ---T が直交行列であることの確認----
transpose(T),evalm(A),evalm(T)
multiply%)
注意:
−7( 7−2)−7+2 7
= 7,−7( 7+2)7+2 7
=− 7であるから、
tTAT =
2 0 00 7 00 0 − 7
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
が得られる。この対称行列 A は異なる3つの固有値をもつから、それぞれの固
有ベクトルは直交系である。それぞれのベクトルを正規化だけで正規直交系が得
られる。 対称行列の対角化の応用として、2次形式の標準化だろう。P.430 参照
49
n次の対称行列
A= (ai, j ),x=
x1!xn
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟∈Rn
について、
A[x]= txTx= ai, j xi
1≤i≤ j≤n∑ x j = ai,i xi
2
i=1
n
∑ +2 ai, j xix j1≤i< j≤n∑
を A を係数とする2次形式という。 Aの対角化変換行列をT (直交行列)とする、そして、
x=Tyとする。
A[x]= t Ty( )A Ty( )= t y tTAT( )y= (y1,!, yn )λ1 O"
0 λn
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟
y1#yn
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟
∴ A[x]= (tTAT )[y]=λ1y1
2 +!+λnyn2
と標準化できる。たとえば、
A=
2 1 1 11 2 1 11 1 2 11 1 1 2
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
とする。
A[x]= 2x21 +2x22 +2x23 +2x24 +2(x1x2 + x1x3 + x1x4 + x2x3 + x2x4 + x3x4 )
である。
fA(λ)=
λ−2 −1 −1 −1−1 λ−2 −1 −1−1 −1 λ−2 −1−1 −1 −1 λ−2
= (λ−1)3(λ−5)
固有値は λ1 =1,λ2 = 5である。
λ1E−A=
−1 −1 −1 −1−1 −1 −1 −1−1 −1 −1 −1−1 −1 −1 −1
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
→
1 1 1 10 0 0 00 0 0 00 0 0 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
50
λ2E−A=
3 −1 −1 −1−1 3 −1 −1−1 −1 3 −1−1 −1 −1 3
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
→
1 0 0 −10 1 0 −10 0 1 −10 0 0 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
∴固有空間の基底は
pλ1,1 =
−1001
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
, pλ1,2 =
0−101
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
, pλ1,3 =
00−11
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
, pλ2 =
1111
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
である。Gramm-Schmidtの直交化法により,固有空間の正規直交基底は
tλ1,1 =
−220022
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
, tλ1,2 =
66
−63066
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
, tλ1,3 =
3636
−3236
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
, tλ2 =
12121212
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
である。対角化変換行列(直交行列)は
T = (tλ1,1, tλ1,2 , tλ1,3, tλ2 )=
−22
66
36
12
0 −63
36
12
0 0 −32
12
22
66
36
12
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
である。
x=Tyとおくと、 A[x]= (tTAT )[y]= y1
2 + y22 + y3
2 +5y42が得られる。
もう1つ例をあげておこう。
51
A=
6 1 1 1 1 11 6 1 1 1 11 1 6 1 1 11 1 1 6 1 11 1 1 1 6 11 1 1 1 1 6
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
を係数とする2次形式を標準化してみよう。
with(linalg); A := band([1,1,1,1,1,6,1,1,1,1,1],6)
factor(charpoly(A,lambda))
V :=eigenvects(A)
seq(V[2][3][i], i = 1 .. 5), V[1][3][1]
G := GramSchmidt([%]) ---シュミット直交化法----------
L := seq(evalm(G[i]/sqrt(innerprod(G[i], G[i]))),i =1..6) ----正規直交基底-----
T := concat(L) -----変換行列(直交行列)-------
52
multiply(transpose(T),A,T) ------対角化----------
∴ (tTAT )[y]= 5y21 +5y22 +5y23 +5y24 +5y25 +11y26
2次形式の標準化は、多変数関数の極値問題(p.452参照)、2次曲線、2次曲面の分類
(p.461参照)に応用できる。 ( n次の)対称行列 Aとする。
A[x]≥ 0 for all x∈Rn のとき、 Aは非負値(non-negative definite)であるという。 A≥ 0とかく。
A[x]> 0 for all x∈Rn−{0} のとき、 Aは正定値であるという。 A> 0 (positive definite)とかく。
A[x]≤ 0 for all x∈Rn のとき、 Aは非正値(non-psotive definite)であるという。 A≤ 0とかく。
A[x]< 0 for all x∈Rn−{0} のとき、 Aは負定値(negative definite)であるという。 Aの固有値を λj ( j =1,2,!,n)とするとき、 A≥ 0⇔λj ≥ 0 ( j =1,2,!,n)
A> 0⇔λj > 0 ( j =1,2,!,n)
であることが、2次形式の標準化からわかる。
53
対称行列 Aについて、Mapleで次のように入力して判定できる。
definite(A,’positive_def ‘) と入力すると、Aが正定値のときには、trueと出力されるし、そうでないときには、
falseと出力される。
definite(A,’positive_semidef ‘) definite(A,’negative_def ‘)
definite(A,’negative_semidef ‘) たとえば、
A=
1 1 1 1 1 1 11 2 1 1 1 1 11 1 3 1 1 1 11 1 1 4 1 1 11 1 1 1 5 1 11 1 1 1 1 6 11 1 1 1 1 1 7
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
が正定値かどうかを判定してみよう。
with(linalg): A:=evalm(band([1,1,1,1,1,1,0,1,1,1,1,1,1],7)+diag(seq(i,i =1..7)))
definite(A, 'positive_def')
実際次のようにして確かめられる。
F := charpoly(A, lambda)
fsolve(F, lambda)
これですべての固有値(近似値)が正であることがわかる。または定理 61(ホーキンス・
サイモン定理 (p.447参照))により判定してみよう seq(submatrix(A,1..k,1..k),k=1..7)
54
seq(det(%[k]),k=1..7)
固有多項式のグラフからも判定できる
plot(F, lambda = 0..6)
plot(F, lambda = 6..11)
方程式 F = 0は7個の正の実数解をもつことが上の図からわかる。
55
△ 極値問題 (p.452参照)
領域 D⊂Rnで定義された関数 f (x)とする。 p∈Dとし、 hは h が十分0に近い任
意のベクトルで、 p+h∈Dとする。 f (x)が pで極大(極小)であるとは
f (p+h)< f (p) ( > ) のときをいう。 f (p)を極大値(極小値)という。まとめて極値という。
∂ f∂xi
(p) = 0 ( i=1,2,!,n)
を満たす点 pを停留点(stationary point)という。点 pが停留点であることは、その点で極値をもつための必要条件である。 pで極大なのか、極小なのか、極値をとらない
のかを判定をしなければならない。
p= (p1, p2,!, pn ),h= (h1,h2,!,hn )とすると、多変数関数の Taylarの定理により、 f (p+h)− f (p)= f (p1 +h1, p2 +h2,!, pn +hn )− f (p1, p2,!, pn )
≒
12!
∂2 f∂x2i
(p)h2i +∂2 f∂xi ∂x j
hihj1≤i< j≤n∑
i=1
n
∑⎛
⎝⎜⎜⎜⎜
⎞
⎠⎟⎟⎟⎟⎟
である。
H (p)=
fx1 ,x1 (p) fx1 ,x2 (p) ! fx1 ,xn (p)
fx2 ,x1 (p) fx2 ,x2 (p) ! fx2 ,xn (p)
" " # "fx2 ,xn (p) fxn ,x2 (p) # fxn ,xn (p)
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
とすると、H (p)は対称行列で、
f (p+h)− f (p)≒ 12H (p)[h] (2次形式)
と見れる。 H (p)が正定値のときには、 f (x)は pで極小である。 H (p)が負定値のときには、 f (x)は pで極大である。
たとえば、
関数 f (x, y)= x3 + y3−3xy
の極値を求めてみよう。 fx = 3(x2− y), fy = 3(y2− x)であるから、停留点は (0,0),
(1,1)である。
56
H (x, y)= 6x −3
−3 6y
⎛
⎝⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟
である。 H (0,0)は正定値でも負定値でもないから、 (0,0)では極大でも極小でもない。
H (1,1)= 6 −3
−3 6
⎛
⎝⎜⎜⎜⎜
⎞
⎠⎟⎟⎟⎟> 0であるから、 (1,1)で極小である。
参照 (0,0),(1,1)の近傍(近くで)でグラフを見てみよう
plot3d(f, x = -1..1,y = -1..1)
plot3d(f,x = 0..2,y=0..2)
▲ Jordan標準形 (p.507 参照)
k 次の正方行列
J(α,k)=
α 1 Oα !! 1
O α
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
57
を k 次のジョルダン細胞という。幾つかのジョルダン細胞を対角線に沿って並べた行列
J(α1,k1) OJ(α1,k2 )
!O J(αm ,km )
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
をジョルダン行列という。
J(α1,k1)⊕ J(α1,k2 )⊕!⊕ J(αm ,km ) とかく。 J(α,1)= (α)であるから、
α1 O!
O αn
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟=
J(α1,1) O!
O J(αn ,1)
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟
で、対角行列もジョルダン行列に含まれる。
任意の n次正方行列 Aについて、適当な正則行列P を選んで、
P−1AP= J(α1,k1)⊕ J(α1,k2 )⊕!⊕ J(αm ,km )
とできる。このとき、左辺を A のジョルダン標準形という。P をジョルダン変換行列という。
Aの固有空間の次元が nのときには、 Aは対角化可能である。固有空間の次元が nより
小さいときには対角化可能ではない。そのとき、某かのベクトルを追加して、n次元部分空間
を構成し、その基底を列ベクトルとする行列P を構成する。1つの固有値 λについて
とおく。 を固有値 に対する ( 次の )広義の固有空間という。明らかに、
Wλ(k )⊆Wλ
(k+1)である。 k =1のときには、通常の固有空間である。 (P.514参照)
次の例でみてみよう。
A=
18 −9 −35 829 −19 −65 175 0 −3 −120 −5 −25 2
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
のジョルダン標準形を求めてみよう。
fA(λ)=
λ−18 9 35 −8−29 λ+19 65 −17−5 0 λ+ 3 1−20 5 25 λ−2
=
λ−58 9 8λ+59 −8−114 λ+19 17λ+116 −170 0 0 1
5λ−30 5 −λ2−λ+ 31 λ−2
W(k )λ = {x; (λE - A)k x }
W(k )λ λ k
58
=−λ−58 9 8λ+59−114 λ+19 17λ+1165λ−30 5 −λ2−λ+ 31
=−
−9λ+2 −1 2λ2 +10λ−3−9λ2−169λ−76 0 2λ3 + 48λ2 +204λ+59−40λ−20 0 9λ2 + 49λ+16
= (λ+ 3)2(λ−2)2
Aの固有値は λ1 =−3,λ2 = 2である。また、簡単な計算で、
(A+ 3E)(A−2E),(A+ 3E)2 (A−2E),(A+ 3E)(A−2E)2 ≠Oがわかる。すなわち、 固有多項式と 小多項式は一致する。したがって、Aは対角化可能でない。 そこで、
λ1E−A=
−21 9 35 −8−29 16 65 −17−5 0 0 1−20 5 25 −5
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
→
1 0 0 −15
0 1 0 15
0 0 1 −25
0 0 0 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
∵ pλ1 =
1−125
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
∈Wλ1
(A−λ1E)pλ1(2) = pλ1を満たすベクトル pλ1
(2) ∈Wλ1(2)を求める。
(A+ 3E, p1)=
21 −9 −35 8 129 −16 −65 17 −15 0 0 −65 220 −5 −25 5 5
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
→
1 0 0 −15
25
0 1 0 15
85
0 0 1 −25−15
0 0 0 0 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
∵ p(2)λ1 =
2585
−150
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
∈W (2)
59
λ2E−A=
−16 9 35 −8−29 21 65 −17−5 0 5 1−20 5 25 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
→
1 0 0 − 35
0 1 0 −25
0 0 1 −25
0 0 0 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
∴ pλ2 =
3225
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
∈Wλ2
(A−λ2E)pλ2(2) = pλ2を満たす pλ2
(2) ∈Wλ2(2)を求めよう。
(A−λ2E, pλ2 )=
16 −9 −35 8 329 −21 −65 17 25 0 −5 −1 220 −5 25 0 5
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
→
1 0 0 − 35
15
0 1 0 −25
45
0 0 1 −25−15
0 0 0 0 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
∴ pλ2(2) =
1545
−150
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
∈Wλ2(2)をうる。
T = pλ1 , p(2)λ1, pλ2 , p
(2)λ2( )=
1 25
3 15
−1 85
2 45
2 −15
2 −15
5 0 5 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
が変換行列である。
T −1AT =
−45
15
0 25
−3 2 5 −145−15
0 −15
3 −2 −10 3
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
18 −9 −35 829 −19 −65 175 0 −3 −120 −5 −25 2
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
1 25
3 15
−1 85
2 45
2 −15
2 −15
5 0 5 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
60
=
−3 1 0 00 −3 0 00 0 2 10 0 0 2
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
= J(−3,2)⊕ J(2,2)
をうる。なお、筆者は計算の各段階で Maple を活用している。本文でも沢山の例をあ
げているので参照して欲しい。 実は、Mapleで直接標準形を求めることができる。
Jordan(A,’P’) と入力すると、A のジョルダン標準形が出力される。P が変換行列で、同時に求まる。対角化にも適用される。 たとえば、次の行列のジョルダン標準形を求めてみよう
A=
−10 4 −17 79 −5621 −6 30 −130 96−3 1 −1 15 −117 −3 10 −40 3215 −6 21 −91 70
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
with(linalg):
A:=matrix(5,5,[-10,4,-17,79,-56,21,-6,30,-130,96,-3,1,-1,15,-11,7,-3,10,-40,32,15,-6,21,-91,70])
jordan(A,'P')
evalm(P) ---------変換行列の出力---------------
61
さて、正方行列をジョルダン標準形(対角化)にすることのメリットについて考えて
みよう。適当な正則行列Pを選んで、
P−1AP= J(λ1,k1)⊕ J(λ2,k2 )⊕!⊕ J(λm ,km )
とできる。
P−1AP( )n = J(λ1,k1)⊕ J(λ2,k2 )⊕!⊕ J(λm ,km )( )n
P−1AnP= J(λ1,k1)
n⊕ J(λ2,k2 )n⊕!⊕ J(λm ,km )
n
∴ An = P J(λ1,k1)
n⊕ J(λ2,k2 )n⊕!⊕ J(λm ,km )
n{ }P−1
各ジョルダン細胞について J(λi ,ki )nは計算されている。 (p.507参照)
たとえば、
A=
18 −9 −35 829 −19 −65 175 0 −3 −120 −5 −25 2
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
について、 Anをもとめてみよう。
An =T
−3 10 −3
⎛
⎝⎜⎜⎜⎜
⎞
⎠⎟⎟⎟⎟
n0 00 0
0 00 0
2 10 2
⎛
⎝⎜⎜⎜⎜
⎞
⎠⎟⎟⎟⎟
n
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
T −1 =
1 25
3 15
−1 85
2 45
2 −15
2 −15
5 0 5 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
(−3)n n(−3)n−1 0 00 (−3)n 0 00 0 2n n2n−1
0 0 0 2n
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
−45
15
0 25
−3 2 5 −145−15
0 −15
3 −2 −10 3
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
=
62
をうる。
Anは線形連立漸化式を解くときに必要になる。(p.541、545参照)
指数関数
exp(x)= xn
n!n=0
∞
∑
を考える。(p.476,p.479参照) 正方行列 Aについて、
exp(A)= An
n!n=0
∞
∑
と定義し、行列指数関数という。
Aのジョルダン標準形を P−1AP= J(α1,k1)⊕ J(α1,k2 )⊕!⊕ J(αm ,km )とすると、すなわ
ち、適当な正則行列 P (変換行列)を選んで、
P−1AP= J(α1,k1)⊕ J(α1,k2 )⊕!⊕ J(αm ,km )
とできる。
exp(A)=
P(J(α1,k1)⊕ J(α1,k2 )⊕!⊕ J(αm ,km ))P−1( )n
n!n=0
∞
∑
= P (J(α1,k1)⊕ J(α1,k2 )⊕!⊕ J(αm ,km ))
n
n!n=0
∞
∑⎛
⎝⎜⎜⎜
⎞
⎠⎟⎟⎟⎟P−1
= P exp(J(α1,k1))⊕exp(J(α2,k2 ))⊕!⊕exp(J(αm ,km ))( )P−1
として計算される。
これらは、連立線形漸化式、定数係数の連立線形微分方程式の解法に応用される。 たとえば、
xn =10xn−1−2yn−1−3zn−1
yn =12xn−1−2yn−1−3zn−1
zn =14xn−1−3yn−1−4zn−1
⎧
⎨
⎪⎪⎪⎪
⎩⎪⎪⎪⎪
( x0 = a, y0 = b, z0 = c )
を満たす数列{xn},{yn},{zn}の一般項を求めてみよう。
63
A=10 −2 −312 −2 −314 −3 −4
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟,xn =
xnynzn
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
,x0 =abc
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟
とすると、漸化式は xn = Axn−1とかける。そして、
xn = Anx0
である。 Anを計算できれば、漸化式は解ける。Aの固有多項式は簡単な計算で
fA(λ)= (λ−2)(λ−1)2
であることがわかる。固有値は λ1 = 2,λ2 =1である。
λ1E−A=−8 2 3−12 4 3−14 3 6
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟→
1 0 − 34
0 1 − 32
0 0 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
,∴ xλ1 =362
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟∈Wλ1
λ2E−A=−9 2 3−12 4 3−14 3 5
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟→
1 0 −10 1 −30 0 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟,∴ xλ2 =
131
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟∈Wλ2
さて、 (A−E)xλ2(2) = xλ2を満たすベクトル xλ2
(2) ∈Wλ2(2)を求める。
(A−E,xλ2 )=9 −2 −312 −4 −314 −3 −5
131
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟→
1 0 −1 −10 1 −3 −50 0 0 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟,xλ2
(2) =−1−50
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟∈Wλ2
P= xλ1 ,xλ2 ,xλ2(2)( )=
3 1 −16 3 −54 1 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟(ジョルダン変換行列)
とすると、次のように Aのジョルダン標準形が得られる。
P−1AP=5 −1 −2−20 4 9−6 1 3
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟
10 −2 −312 −2 −314 −3 −4
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟
3 1 −16 3 −54 1 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟=
2 0 00 1 10 0 1
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟
An = P J(2,1)⊕F(1,2)( )n P−1 =3 1 −16 3 −54 1 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟
2n 0 00 1 n0 0 1
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟
5 −1 −2−20 4 9−6 1 3
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟
64
=
15n2−6n−14 −3n2 +n+ 3 −6n2 + 3n+630n2−18n−30 −6n2 + 3n+ 7 −12n2 +9n+1220 2n−6n−20 −4 2n +n+ 4 −8n2 + 3n+9
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
∴
xn = (15a−2b−6c)n2 + (−6a+b+ 3c)n+ (−14a+ 3b+6c)yn = (30a−6b−12c)n2 + (−18a+ 3b+9c)n+ (−30a+ 7b+12c)zn = (20a−4b−8c)n2 + (−6a+b+ 3c)n+ (−20a+ 4b+9c)
⎧
⎨
⎪⎪⎪⎪
⎩⎪⎪⎪⎪
をうる。
もう一つの例として
次の定数係数の連立線形微分方程式を解いてみよう。
′y1(x) =−46y1(x)+14y2 (x)+15y3(x)′y2 (x) =−86y1(x)+ 25y2 (x)+ 30y3(x)′y3(x) =−58y1(x)+19y2 (x)+17y3(x)
⎧
⎨
⎪⎪⎪⎪
⎩⎪⎪⎪⎪
( y1(0) = a, y2 (0) = b, y3(0) = c )
A=−46 14 15−86 25 30−58 19 17
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟, y(x)=
y1(x)y2 (x)y3(x)
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
, y(0)=abc
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟
とおくと、
方程式は
ddxy(x)= Ay(x)
とかける。そして解は y(x)= exp(A ⋅x)y(0)とかける。 (P.496,509参照)
exp(A ⋅x)が計算できれば方程式は解けたことになる。
fA(λ)= (λ−2)(λ+ 3)2 であるから、固有値は λ1 = 2,λ2 =−3である。
λ1E−A=48 −14 −1586 −23 −3058 −19 −15
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟→
1 0 − 34
0 1 − 32
0 0 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
,∴ pλ1 =364
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟∈Wλ1
65
λ2E−A=43 −14 −1586 −28 −3058 −19 −20
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟→
1 0 −10 1 −20 0 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟,∴ pλ2 =
121
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟∈Wλ2
(A−λ2E)pλ2(2) = pλ2を満たすベクトル pλ2
(2) ∈Wλ2(2)を求める。
A−λ2E =−43 14 15−86 28 30−58 19 20
121
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟→
1 0 −10 1 −20 0 0
−1−30
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟,∴ p(2)λ2 =
−1−30
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟∈W (2)
P= (pλ1 , pλ2 , pλ2(2) )=
3 1 −16 2 −34 1 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟とおくと、
P−1 =−3 1 112 −4 −32 −1 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟で、
P−1AP=2 0 00 −3 10 0 −3
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟= J(2,1)⊕ J(−3,2) (ジョルダン標準形)
をうる。
∴ y(x)= P(exp(2x)⊕exp(J(−3,2)x)P−1{ } y(0)
=
3 1 −16 2 −34 1 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟
e2x 0 00 e−3x xe−3x
0 0 e−3x
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟
−3 1 112 −4 −32 −1 0
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟
abc
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟
=
−9e2x + (10+ x)e−3x 3e2x−(3+ x)e−31 3e2x−3e−3x
−18e2x + (18+ 4x)e−3x 6e2x−(5+2x)e−31 6e2x−6e−3x
−12e2x + (12+2x)e−3x 4e2x−(4+ x)e−31 4e2x−3e−3x
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
abc
⎛
⎝
⎜⎜⎜⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟⎟⎟⎟⎟
∴解:
y1(x)= (−9a+ 3b+ 3c)e2x +{(10a−3b−3c)+ (a−b)x}e−3x
y2 (x)= (−18a+6b+6c)e2x +{(18a−5b−6c)+ (4a−2b)x}e−3x
y3(x)= (−12a+ 4b+ 4c)e2x +{(12a−4b+ 4c)+ (2a−b)x}e−3x
⎧
⎨
⎪⎪⎪⎪
⎩⎪⎪⎪⎪
が得られる。 尚、Mapleで exp(A)は、
exponential(A) と入力して直接計算することもできる。 たとえば、
66
with(linalg): A :=matrix(3,3,[-46,14,15,-86, 25,30,-58,19,17])
exponential(A)
とすることができる。