|
== 統計用フリーソフトR の基本操作(2) == R version 4.0.3 (2020-10-10) ----- 最終更新年月日:2021.1.21 1. 行列の作成
1.1 初めに型を決め,次に要素を決める
Rで行列を作成する方法は,幾つかありますが,「@初めに行列の型を決める」「A次に各要素を決める」の2段階で作成するには,次のようにします.
@m行n列の行列を作成し,各成分を0で初期化しておくには,matrix(0, m, n)とします.
A行列m1の第p行にベクトルr1を代入するには, v1[p,]<−r1とします. 行列m1の第q列にベクトルc1を代入するには, v1[,q]<−c1とします. [p, ]のように角括弧の中でカンマの左に書かれた数字は行番号を表します. [, q]のように角括弧の中でカンマの右に書かれた数字は列番号を表します. |
【例1.1.1】
> m1<-matrix(0,2,3) # 2行3列の行列を作る
> m1
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0 # 各成分は0で初期化されている
> m1[1,]<-c(2,4,6) # 1行目にベクトル(2,4,6)を代入する
> m1[2,]<-c(3,6,9) # 2行目にベクトル(3,6,9)を代入する
> m1 # **
[,1] [,2] [,3]
[1,] 2 4 6
[2,] 3 6 9 # 行列はこの形で表示される
** で示したように,行列名を入力すると,その要素が表示される以下の例でも同様
【例1.1.2】
> m1<-matrix(1,2,3) #2行3列の行列を作り,1で初期化
> m1[,1]<-c(9,8) #1列目にベクトル(9,8)を代入する
> m1[,2]<-c(-5,4) #2列目にベクトル(-5,4)を代入する
> m1[,3]<-c(3,-1) #3列目にベクトル(3,-1)を代入する
> m1
[,1] [,2] [,3]
[1,] 9 -5 3
[2,] 8 4 -1
|
|
1.2 ベクトルを変換して行列にする
1.2.1 1つのベクトルから行列を作る
Rで行列を作成する方法は,幾つかありますが,「1つのベクトルから行列を作る」方法で作成するには,次のようにします.@行列名<−matrix(ベクトル名, nrow=行数, ncol=列数) この書き方の場合は,ncol=列数, nrow=行数の順序が逆でもよい.
A行列名<−matrix(ベクトル名, 行数, 列数)nrow, ncolを省略する書き方の場合は,第2引数が行数,第3引数が列数になる.
【例1.2.1.1】--nrow,ncolで明示する場合
> v2<-c(1,-2,3,-7,8,-9)
> m2<-matrix(v2,ncol=2,nrow=3)
> m2
[,1] [,2]
[1,] 1 -7
[2,] -2 8
[3,] 3 -9
【例1.2.1.2】--nrow,ncolを省略する場合
> v1<-c(1,3,5,7,8,9)
> m1<-matrix(v1,2,3)
> m1
[,1] [,2] [,3]
[1,] 1 5 8
[2,] 3 7 9
|
上の@Aのように,行数と列数の指定があって,「行ごとに埋めて行くか」「列ごとに埋めて行くか」が省略されているときは「列ごとに=要素を縦に」埋めて行くことになる.「行ごとに=要素を横に」埋めて行くには,次のBCのように,第4引数として byrow=T, byrow=TRUEもしくはbyrow=1と書きます. (Byrow, BYROW のように大文字が含まれる書き方はエラーになる.逆に,True, true, t のように小文字が含まれる書き方はエラーになる.)
"行順に"もしくは"行ごとに"という言葉の表す内容が,著者によって逆になっていることがある.この教材では,"行ごとに","列ごとに"という言葉を次の図のように使う.
行列名M1,ベクトル名v1,行数p,列数qの場合ア) イ)![]() したがって,byrow=TRUEの場合はア)のように埋め,byrow=FALSEまたは省略の場合はイ)のように埋められる. BM1<−matrix(V1, nrow=p, ncol=q, byrow=T) CM1<−matrix(V1, p, q, byrow=TRUE)
【例1.2.1.3】
> m3<-matrix(c(1,-3,5,-2,4,6),2,3,byrow=T)
> m3
[,1] [,2] [,3]
[1,] 1 -3 5
[2,] -2 4 6
【例1.2.1.4】
> m4<-matrix(1:8,nrow=2,ncol=4,byrow=1)
> m4
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
|
|
ベクトルを行列に変換するときに,行数か列数のいずれか一方を省略することはできる. 第2引数が省略されているときは行数が略されており,第3引数が省略されているときは列数が略されていると解釈できる.また,nrow, ncolのうちの一方が略されているときもある.
【例1.2.1.5】
> m5<-matrix(1:6,2) #行数は2,列数は略
> m5
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
【例1.2.1.6】
> m6<-matrix(2:7,,2) #行数は略,列数は2
> m6
[,1] [,2]
[1,] 2 5
[2,] 3 6
[3,] 4 7
【例1.2.1.7】
> m7<-matrix(0:5,ncol=3,byrow=T) # nrowは略
> m7
[,1] [,2] [,3]
[1,] 0 1 2
[2,] 3 4 5
|
ベクトルを行列に変換するときに,行数か列数のいずれか一方を省略することはできる. ベクトルの要素数nと行数p×列数qが一致しないとき, (1) p×qがnの倍数になっているときは,nの要素を繰り返し使ってp×qになるまで埋められる.
【例1.2.1.8】
> m1<-matrix(1:2,3,2,byrow=T)
> m1
[,1] [,2]
[1,] 1 2
[2,] 1 2
[3,] 1 2
【例1.2.1.9】
> m2<-matrix(1:12,2,2)
> m2
[,1] [,2]
[1,] 1 3
[2,] 2 4
【例1.2.1.10】 > m3<-matrix(1:10,3,2) 警告メッセージ: ...... |
|
1.2.2 ベクトルをn行1列の行列(列ベクトル)にする
(1) ベクトルV1をn行1列の行列(列ベクトル)にするには,as.matrix(V1)が使える.あるオブジェクトXが行列であるかどうかを調べるには,is.matrix(X)が使える.
【例1.2.2.1】
> V1<-c(1,2,3,4)
> is.matrix(V1)
[1] FALSE # ベクトルは行列でない
> M1<-as.matrix(V1)
> is.matrix(M1)
[1] TRUE
> M1
[,1]
[1,] 1
[2,] 2
[3,] 3
[4,] 4 # as.matrix( )でn行1列型の行列になる
|
(2) 転置行列を求める関数:t( )を用いると,t(行列1)によって,行列1の転置行列が求められる. この関数はベクトルに対しても使えるように,拡張されているが,t(ベクトル1)によって,1行n列型の行列(行ベクトル)になり,さらにt(t(ベクトル1))とするとn行1列型の行列(列ベクトル)になる. したがって,t(t(行列A))は行列Aに戻るが,t(t(ベクトルV))は元のベクトルVには戻らない. なお,t(t(t(ベクトルV)))はt(ベクトルV)に等しく,行ベクトルになる.
【例1.2.2.2】
> V1<-c(1,2,3,4)
> V1
[1] 1 2 3 4
> M2<-t(V1)
> M2
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
# t(V1)で1行n列型の行列になる
> is.matrix(M2)
[1] TRUE
> M3<-t(t(V1))
> M3
[,1]
[1,] 1
[2,] 2
[3,] 3
[4,] 4 # t(t(V1))でn行1列型の行列になる
|
|
1.2.3 幾つかのベクトルを結合して行列を作る
(1) 長さの等しいベクトルV1, V2, …を行ベクトルとして結合して行列M1にするにはM1<−rbind(V1, V2, …)
【例1.2.2.1】 > V1<-c(2,4,6) > V2<-c(-3,6,-9) > M1<-rbind(V1,V2) > M1 [,1] [,2] [,3] V1 2 4 6 V2 -3 6 -9 ベクトルの長さが揃わないとき,長さが倍数,約数の関係になっているときは,リサイクル規則(不足分を繰り返し使って埋め合わせる)によって要素が満たされる. 【例1.2.2.2】 > V1<-c(1,2) #ベクトルV1の長さは2 > V2<-c(3,4,5) #ベクトルV2の長さは3 > V3<-6:11 #ベクトルV3の長さは6 > M1<-rbind(V1,V2,V3) > M1 [,1] [,2] [,3] [,4] [,5] [,6] V1 1 2 1 2 1 2 V2 3 4 5 3 4 5 V3 6 7 8 9 10 11
【例1.2.2.3】
> V1<-c(1,2,3)
> V2<-c(4,5,6)
> M2<-cbind(V1,V2)
> M2
V1 V2
[1,] 1 4
[2,] 2 5
[3,] 3 6
ベクトルの長さが揃わないときの,リサイクル規則については,行ベクトルの場合と同様になる. |
(3) 列数の等しい行列M1, M2, …を(縦に積み重ねて)結合して行列MAにするにはMA<−rbind(M1, M2, …)
【例1.2.2.3】
> M1<-matrix(1:6,2,3,byrow=1)
> M2<-matrix(10:15,2,3,byrow=1)
> MA<-rbind(M1,M2)
> MA
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 10 11 12
[4,] 13 14 15
【例1.2.2.4】
> M1<-matrix(1:6,2,3,byrow=1)
> M2<-matrix(10:15,2,3,byrow=1)
> MB<-cbind(M1,M2)
> MB
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 2 3 10 11 12
[2,] 4 5 6 13 14 15
|
|
1.3 行列の要素の読み書き
1.3.1 p行q列成分の読み書き
1.3.1.1 行列M1のp行q列の要素を表示するには
M1[p, q]とする
【例1.3.1.1】
> M<-matrix(1:12,3,4,byrow=T)
> M1
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
> M1[2,3]
[1] 7
|
1.3.1.2 行列M1のp行q列要素をxに変更するには
M1[p, q]<−xとする・・・M1[p,q]を左辺値として代入操作を行う.
【例1.3.1.2】
> m1<-matrix(1:12,3,4,byrow=T)
> m1[3,2]<-8
> m1
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 8 11 12
|
|
1.3.1.3 行列M1のp行またはq列を表示するには
M1[p, ]またはM1[, q]とする.
【例1.3.1.3】
> m2<-matrix(0:5,2,3,byrow=1)
> m2
[,1] [,2] [,3]
[1,] 0 1 2
[2,] 3 4 5
> m2[2,] #2行目を表示する
[1] 3 4 5
> m2[,3] #3列目を表示する
[1] 2 5
|
1.3.1.4 行列M1のp行またはq列を変更するには
M1[p, ]<−ベクトルまたはM1[, q]<−ベクトルとする.
【例1.3.1.4】
> m2<-matrix(0:5,2,3,byrow=1)
> m2
[,1] [,2] [,3]
[1,] 0 1 2
[2,] 3 4 5
> m2[1,]<-c(6,7,8) #1行目を変更する
> m2
[,1] [,2] [,3]
[1,] 6 7 8
[2,] 3 4 5
> m2[,3]<-c(1,-3) #3列目を変更する
> m2
[,1] [,2] [,3]
[1,] 6 7 1
[2,] 3 4 -3
※ベクトルとしては「行ベクトル」「列ベクトル」の区別を考えない.上記のように,行列の行に代入する場合も,列に代入する場合も,単にベクトルを代入する.
|
|
1.3.1.5 行列要素の表示,変更の応用的な操作
(1)
M1のp,q行かつr列にある要素の表示M1[c(p,q), r] M1のp行かつq,r列にある要素の表示M1[p, c(q,r)] M1のp,q行かつr,s列にある要素の表示M1[c(p,q), c(r,s)]
【例1.3.1.5.1】
> M1<-matrix(2:13,3,4,byrow=T)
> M1
[,1] [,2] [,3] [,4]
[1,] 2 3 4 5
[2,] 6 7 8 9
[3,] 10 11 12 13
> M1[c(3,1),2] 3行,1行の順で2列の要素
[1] 11 3
(2)
M1のp,q行以外かつr列にある要素の表示 M1[−c(p,q), r]またはM1[c(−p,−q), r] M1のp行以外かつq,r列にある要素の表示 M1[−p, c(q,r)] M1のp,q行以外かつr,s列以外にある要素の表示 M1[−c(p,q), −c(r,s)]またはM1[c(−p,−q), c(−r,−s)]
【例1.3.1.5.2】
> M1<-matrix(2:13,3,4,byrow=T)
> M1
[,1] [,2] [,3] [,4]
[1,] 2 3 4 5
[2,] 6 7 8 9
[3,] 10 11 12 13
> M1[c(-1),c(-2,-3)] #1行以外かつ2,3列以外
[,1] [,2]
[1,] 6 9
[2,] 10 13
|
(3)
M1のp,q行かつr列にある要素の変更M1[c(p,q), r]<−値 M1のp行かつq,r列にある要素の変更M1[p, c(q,r)]<−値 M1のp,q行かつr,s列にある要素の変更 M1[c(p,q), c(r,s)]<−値
【例1.3.1.5.3】
> M2<-matrix(2:13,3,4,byrow=1)
> M2
[,1] [,2] [,3] [,4]
[1,] 2 3 4 5
[2,] 6 7 8 9
[3,] 10 11 12 13
> M2[c(1,3),c(2,3)]<-0
> M2
[,1] [,2] [,3] [,4]
[1,] 2 0 0 5
[2,] 6 7 8 9
[3,] 10 0 0 13
(4)
M1のp,q行以外かつr列にある要素の変更 M1[−c(p,q), r]<−値またはM1[c(−p,−q), r]<−値 M1のp行以外かつq,r列にある要素の変更 M1[−p, c(q,r)]<−値 M1のp,q行以外かつr,s列以外にある要素の変更 M1[−c(p,q), −c(r,s)]<−値 またはM1[c(−p,−q), c(−r,−s)]<−値
【例1.3.1.5.4】
> M2<-matrix(3:14,3,4,byrow=1)
> M2
[,1] [,2] [,3] [,4]
[1,] 3 4 5 6
[2,] 7 8 9 10
[3,] 11 12 13 14
> M2[c(-1,-3),-2]<-10 #1,3行以外かつ2列以外を10に
> M2
[,1] [,2] [,3] [,4]
[1,] 3 4 5 6
[2,] 10 8 10 10
[3,] 11 12 13 14
|
|
2. 行列に行ラベル,列ラベルを付ける
2.1 行ラベル,列ラベルを付けるには
(1) 行列M1に行ラベル"Jan","Feb",…を付けるには,rownames(M1)<−c("Jan","Feb",…)とする
【例2.1.1】
> M1<-matrix(1:6,2,3,byrow=T)
> rownames(M1)<-c("Jan","Feb")
> M1
[,1] [,2] [,3]
Jan 1 2 3
Feb 4 5 6
colnames(M1)<−c("国語","数学",…)とする
【例2.1.2】
> M1<-matrix(1:6,2,3,byrow=T)
> colnames(M1)<-c("国語","数学","英語")
> M1
国語 数学 英語
[1,] 1 2 3
[2,] 4 5 6
|
(3) 行ラベルのある行列M1から行ラベルを取り除くには, rownames(M1)<−NULLとする
【例2.1.3】
> M1<-matrix(1:6,2,3,byrow=1)
> rownames(M1)<-c("Mon","Tue")
> M1
[,1] [,2] [,3]
Mon 1 2 3
Tue 4 5 6
> rownames(M1)<-NULL
> M1
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
colnames(M1)<−NULLとする
【例2.1.4】
> M1
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
> colnames(M1)<-c("ab","cd","ef")
> M1
ab cd ef
[1,] 1 2 3
[2,] 4 5 6
> colnames(M1)<-NULL
> M1
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
|
|
2.2 行ラベル,列ラベルを使って要素を読み書きする
読み出すには,行列名["行ラベル","列ラベル"]とする
【例2.2.1】
> M1
Mon Tue Wed
one 1 2 3
two 4 5 6
> M1["two","Wed"]
[1] 6
|
【例2.2.2】
> M1
Mon Tue Wed
one 1 2 3
two 4 5 6
> M1["one","Mon"]<-10
> M1
Mon Tue Wed
one 10 2 3
two 4 5 6
|
|
3. 行列の演算
3.1 行列の各成分間の演算
行列に対して,四則計算に使う演算[ +, −, *, / ]およびべき乗[ ^ ]を行った場合は,対応する成分間で演算が行われる.この演算のうちで,足し算と引き算は数学における行列の計算と一致するが,それ以外は数学での取り扱いと異なる. 行列A, Bの型が異なるときは,A+B, A−B, A*B, A/B などは定義されない. 3.1.1 足し算
【例3.1.1】
> A1
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
> B1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 7 9 11
> A1+B1
[,1] [,2] [,3]
[1,] 2 5 8
[2,] 11 14 17
3.1.2 引き算
【例3.1.2】
> A2
[,1] [,2]
[1,] 2 1
[2,] 4 3
[3,] 6 5
> B2
[,1] [,2]
[1,] 0 3
[2,] 1 4
[3,] 2 5
> A2-B2
[,1] [,2]
[1,] 2 -2
[2,] 3 -1
[3,] 4 0
3.1.3 掛け算
【例3.1.3】
> A2
[,1] [,2]
[1,] 2 1
[2,] 4 3
[3,] 6 5
> B2
[,1] [,2]
[1,] 0 3
[2,] 1 4
[3,] 2 5
> A2*B2
[,1] [,2]
[1,] 0 3
[2,] 4 12
[3,] 12 25
|
3.1.4 割り算
【例3.1.4】
> A2
[,1] [,2]
[1,] 2 1
[2,] 4 3
[3,] 6 5
> B2
[,1] [,2]
[1,] 0 3
[2,] 1 4
[3,] 2 5
> A2/B2
[,1] [,2]
[1,] Inf 0.3333333 # 0で割ったとき, Infと表示される
[2,] 4 0.7500000
[3,] 3 1.0000000
3.1.5 数 / 行列
数学にはないが,各要素で割った値の行列になる
【例3.1.4】
> A2
[,1] [,2]
[1,] 2 1
[2,] 4 3
[3,] 6 5
> 1/A2
[,1] [,2]
[1,] 0.5000000 1.0000000
[2,] 0.2500000 0.3333333
[3,] 0.1666667 0.2000000
3.1.36 行列のべき乗
数学にはないが,各要素のべき乗の行列になる
【例3.1.4】
> A2
[,1] [,2]
[1,] 2 1
[2,] 4 3
[3,] 6 5
> A2^3
[,1] [,2]
[1,] 8 1
[2,] 64 27
[3,] 216 125
|
|
3.2 行列の積
ここでは,数学における行列計算としての積などを扱う. 3.2.1 行列と行列の積
行列Aと行列Bの(数学と同様の)積は,A %*% Bとする
Aが[k行×m列]の行列,Bが[m行×n列]の行列のとき,行列としてのABの積が定義でき,結果は[k行×n列]の行列になる.
[k行×m列][m行×n列]→[k行×n列] 【例3.2.1】では, [3行×2列][2行×2列]→[3行×2列]になる. 【例3.2.2】では, [2行×2列][3行×2列]→積は定義できない:エラーになる. |
【例3.2.1.1】
> A1
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> B1
[,1] [,2]
[1,] 1 1
[2,] 0 -1
> A1 %*% B1
[,1] [,2]
[1,] 1 -3
[2,] 2 -3
[3,] 3 -3
【例3.2.1.2】
> A1
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> B1
[,1] [,2]
[1,] 1 1
[2,] 0 -1
> B1 %*% A1
B1 %*% A1 でエラー: 適切な引数ではありません
|
|
3.2.2 行列とベクトルの積
の形の「行列と列ベクトルとの積」は,右から掛ける列ベクトルを[n行×1列]の行列として定義してあれば,問題なく行列の積として計算できる.
【例3.2.2.1】
> X1<-matrix(c(5,6),2,1)
> A1<-matrix(c(1,2,3,4),2,2,byrow=1)
> A1
[,1] [,2]
[1,] 1 2
[2,] 3 4
> X1
[,1]
[1,] 5
[2,] 6
> A1 %*% X1 # [2× 2 ]型[ 2 ×1]型→[2×1]型
[,1]
[1,] 17
[2,] 39
> X1 %*% A1 # [2× 1 ]型[ 2 ×2]型→エラー
X1 %*% A1 でエラー: 適切な引数ではありません
の形の「行ベクトルと行列との積」は,左から掛ける行ベクトルを[1行×n列]の行列として定義してあれば,問題なく行列の積として計算できる.
【例3.2.2.2】
> X2<-matrix(c(5,6),1,2)
> A1<-matrix(c(1,2,3,4),2,2,byrow=1)
> A1
[,1] [,2]
[1,] 1 2
[2,] 3 4
> X2
[,1] [,2]
[1,] 5 6
> X2 %*% A1 # [1× 2 ]型[ 2 ×2]型→[1×2]型
[,1] [,2]
[1,] 23 34
> A1 %*% X2 # [2× 2 ]型[ 1 ×2]型→エラー
|
【例3.2.2.3】
> A1<-matrix(c(1,2,3,4),2,2,byrow=T)
> A1
[,1] [,2]
[1,] 1 2
[2,] 3 4 # A1は[2×2]型の行列
> X1<-c(1,2)
> X1
[1] 1 2 # X1はベクトル
> A1 %*% X1
[,1]
[1,] 5
[2,] 11 # (*1)
> X1 %*% A1
[,1] [,2]
[1,] 7 10 # (*2)
(*1):X1を列ベクトル=[2×1]型の行列と解釈すれば,積A1 %*% X1が定義できる.X1を行ベクトル=[1×2]型の行列と解釈すれば,積A1 %*% X1が定義できない.⇒ X1を列ベクトルと見なして,積A1 %*% X1を計算する.(*2):X1を列ベクトル=[2×1]型の行列と解釈すれば,積X1 %*% A1が定義できない.X1を行ベクトル=[1×2]型の行列と解釈すれば,積A1 %*% X1が定義できる.⇒ X1を行ベクトルと見なして,積X1 %*% A1を計算する. |
|
4. 行列の要約
行列の要約とは,行列の各要素が数値であるときに,各列ごとの要約(5数要約:@最小値Min. A第1四分位数1st Qu. B中央値Median C第3四分位数3rd Qu.D最大値Max. にE平均値Mean を追加したもの6個)を示したもの.これにより,各列ごとの分布を示す箱ひげ図をいつでも作ることができる. 行列M1の要約は,summary(M1)で求められる.
【例4.1】
> M1<-matrix(1:20,5,4,byrow=T)
> M1
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
[4,] 13 14 15 16
[5,] 17 18 19 20
> summary(M1)
V1 V2 V3 V4
Min. : 1 Min. : 2 Min. : 3 Min. : 4
1st Qu.: 5 1st Qu.: 6 1st Qu.: 7 1st Qu.: 8
Median : 9 Median :10 Median :11 Median :12
Mean : 9 Mean :10 Mean :11 Mean :12
3rd Qu.:13 3rd Qu.:14 3rd Qu.:15 3rd Qu.:16
Max. :17 Max. :18 Max. :19 Max. :20
|
5. 行列をベクトルに変換する
行列M1をベクトルに変換するには,as.vector(M1)とすればよい.このとき,行列の要素は「列順かつ行順に」「列ごとに」ベクトルの要素に入る.
【例5.1】
> M1
[,1] [,2] [,3]
[1,] 1 -2 3
[2,] -4 0 5
> as.vector(M1)
[1] 1 -4 -2 0 3 5
|
|
6. 逆行列を求めるには
6.1 n元連立1次方程式の解
Aは正方行列,BおよびXは行列またはベクトルとするとき,n元連立1次方程式A %*% X = B・・・@
の解は,関数solve(A, B)によって求められる.Aがn次正方行列,Bがn次元ベクトルのとき,@は次の形のn元連立1次方程式になる A−1が存在するとき,この連立方程式の解 が,solve(A, B)によって求められる.
【例6.1】
> M1
[,1] [,2] [,3]
[1,] 1 3 2
[2,] 2 1 4
[3,] 1 0 -1
> V1
[1] 8 1 2
> solve(M1,V1)
[1] 1 3 -1
6.2 逆行列を求める
関数solve(A, B)において,第2引数Bが省略されたときは,Bは単位行列Enと見なされる.このとき,@の方程式は,次の連立方程式を満たすn次正方行列Xを求めるものとなる.A %*% X = En・・・@’
したがって,A−1が存在するとき,第2引数Bが省略された方程式solve(A)は,Aの逆行列を表す.
【例6.2】
> M1
[,1] [,2] [,3]
[1,] 1 3 2
[2,] 2 1 4
[3,] 1 0 -1
> solve(M1)
[,1] [,2] [,3]
[1,] -0.06666667 0.2 0.6666667
[2,] 0.40000000 -0.2 0.0000000
[3,] -0.06666667 0.2 -0.3333333
これは
を表している. |
7. 固有値,固有ベクトルを求めるには
n次の正方行列Aに対して,関数eigen(A)によって,固有値,固有ベクトルが求められる.固有ベクトルは,標準化された形(単位ベクトルにしたもの)で表される.
【例7.1】
> M1
[,1] [,2]
[1,] 8 1
[2,] 4 5
> eigen(M1)
eigen() decomposition
$values
[1] 9 4
$vectors
[,1] [,2]
[1,] 0.7071068 -0.2425356
[2,] 0.7071068 0.9701425
固有値9に対する固有ベクトルは,標準化すると 固有値4に対する固有ベクトルは, 標準化すると
【例7.2】
> M2
[,1] [,2] [,3]
[1,] 1 1 2
[2,] 0 2 -1
[3,] 0 0 3
> eigen(M2)
eigen() decomposition
$values
[1] 3 2 1
$vectors
[,1] [,2] [,3]
[1,] 0.3333333 0.7071068 1
[2,] -0.6666667 0.7071068 0
[3,] 0.6666667 0.0000000 0
固有値3に対する固有ベクトルは,標準化すると 固有値2に対する固有ベクトルは, 標準化すると 固有値1に対する固有ベクトルは, 標準化すると |