第6回 ベクトルと行列の計算
,いろいろ
• 線形代数のパッケージ
線形代数に関係する作業を実行しやすくするパッケージがあります。with コ マンドを用いて、 with(linalg): と入力してください。
• ベクトル の定義
ベクトルの成分を指定する方法、ベクトルのサイズを指定し、順に成分を指定 する、または、関数、手続きで指定する方法があります。
u:=vector(3,[0,2,3]);
vector([0,2,3]);
v:=vector(3, i->2^i/i);
• ベクトルの計算
足し算、スカラー倍は通常のようにできます。内積( innerprod ) やノルム ( norm ), 外積( crossprod )の命令もあります。
• evalm コマンド
行列のときに用いたのと同じ命令ですが、ベクトルに名前をつけ、その名前を 入力してもベクトルの成分などは表示されません。この場合に evalm を用 いると名前をつけられたベクトルの成分などが表示されます。
• augmentコマンド
ベクトルとベクトル、ベクトルと行列をくっつけるときに用います。ベクトル は、単なる数(成分)のリストで、行ベクトルのように表示されて見えますが、
ベクトルを行列として扱うときには、列ベクトルとして扱うようになっていま
す。従って5行4列行列Aと5次のベクトルuに対して Ab := augment(A, b); と すると、5行5列の行列が得られることになります。
• stackmatrix コマンド
この命令は、ベクトルを行ベクトルとして行列にする命令です。
• col, row コマンド
行列から列および行ベクトルを抜きだしてベクトルを作る。
既に線形方程式つまり
Ax=b
の形のものからベクトルx を求めることは解説しました。
(1) Ab := augment(A, b) で拡大係数行列を作る.
(2) gausselim(Ab) (ガウスの消去法)で階段化する. この命令は同じ内容の rref(Ab) も 使えます.
(3) backsub(%) (後退代入法)で解を求めることができます.
この方法をもとに、AX =B の形の X を求めることも可能です。
ベクトルu がベクトルu1, u2, . . . , un の一次結合で表せるかどうかという問題は、
行列A= (u1, u2, . . . , un) を用いて
Ax=u
が解を持つかどうか、という問題になります。
ベクトル u1, u2, . . . , un が一次独立かどうかという問題は、
Ax= 0 (0ベクトル)
が0 ベクトル以外の解を持つかどうかという問題になります。
練習
(1) ベクトルb = (1,2,3,4,5) が次のベクトルによって、生成される空間に属する かどうかを調べなさい。
(a) v1 = (5,4,3,2,1), v2 = (4,3,2,1,5), v3 = (3,2,1,5,4) (b) v1 = (2,3,4,5,6), v2 = (3,4,5,6,7)
(2) ベクトルb = (1,1,1,1,1) が次のベクトルによって、生成される空間に属する かどうかを調べなさい。
(a) v1 = (5,4,3,2,1), v2 = (1,2,3,4,5), v3 = (3,2,1,5,4)
(b) v1 = (2,3,4,5,6), v2 = (8,7,6,5,4), v3 = (1,0,1,0,1)
練習 randmatrix(5,7) という命令によって、乱数を用いて5行7列の行列を 生成できます。randmatrix コマンドを用いて作った5行7列行列Aに対して、解 空間{x | Ax = 0} の基底、およびA の列ベクトルが作る部分空間(像)の基底を 求めよ。
練習 次の各行列に対して、解空間の基底、およびその列ベクトルが作る部分空間 (像)の基底を求めよ。
(1) 5行13列行列 A= (aij), aij =i+j. (2) 11行7列行列 A= (aij), aij =i+j (3) 16行8列行列 A= (aij), aij =i+j
(4) 13行15列行列A = (aij), aij = 1/(i+j −1) (5) 14行3列行列 A= (aij), aij = 1/(i+j−1) (6) 27行5列行列 A= (aij), aij = 1/(i+j−1)
必要な行列やベクトルの計算が可能であることは, わかったと思います. 行列の計 算で重要なことはn乗の計算などです. 基本原理は対角行列だったら簡単だというこ とです.
a1 0 · · · 0
0 a2 0
... . .. ...
0 0 · · · ak
n
=
an1 0 · · · 0 0 a22 0 ... . .. ...
0 0 · · · ank
対角行列AでなければS−1ASが対角行列(diagonal matrix)になるようなSを捜す のが次の考え方です. つまり
An=S(S−1AnS)S−1 =S{(S−1AS)(S−1AS)· · ·(S−1AS)}S−1 =S(S−1AS)nS−1
となり対角行列のn乗とS を求めれば良いことになります.
この考え方は
exp(
a1 0 · · · 0
0 a2 0
... . .. ...
0 0 · · · ak
) =
ea1 0 · · · 0
0 ea2 0
... . .. ...
0 0 · · · eak
に適用できて対角可能な行列Aに対して
exp(A) =Sexp(S−1AS)S−1
という方法で行列の指数関数が計算できる.
練習次の行列が対角化可能ならば、それを対角化する可逆行列 S を求め、
6 3 −7
−1 2 1
5 −3 −6
,
1 2 1
−1 4 1
2 −4 0
,
0 1 0
0 0 1
−6 −1 4
−5 6 4
−7 8 4
−2 2 3
,
−1 0 2
−1 1 1
−1 0 2
,
5 0 −6
3 −1 −3
3 0 −4
対角化できる行列A についてはその exp(A)を求めよ。