【第4回】

<内容>

1.        行列要素の指定
 行列要素の指定方法ならびに行列要素の入力方法を学ぶ.特殊な行列であるJordan細胞の生成方法について学ぶ.

 

2.        行列の次元
 行列の行や列の次数を求める方法を学ぶ.また,ベクトルの長さ(行列の場合は行と列の最大次数)を求める方法について学ぶ.

 

3.        行列の結合と削除
 2つの行列の結合方法(縦と横結合)を学ぶ.さらに,行列のある特定の行と列を削除する方法について学ぶ.

 

 

<演習>

1.行列要素の指定

行列の要素は

x(i)   A (i, j)

などと指定する.よって,nを正整数とすると

  x = [1 2 3  n]

を生成するMファイルのプログラムは

 

【プログラム1】

  x = [];

  n = input(’Enter n ’);  % nの値を入力する.

  for  i = 1:n

    x(i) = i;  % 行ベクトルとなる.

  endfor

  x   % xの表示

 

と書ける.

 

テキストでは,上記で列ベクトルとなるため,最後に転置を行っているが,Octave 4.0ではその必要はない(Matlabとの互換性を持たせるために修正された).

 

 

また,上記のプログラムは,単に以下のように書くこともできる.

 

【プログラム2】

  n = input(’ Enter n ’);   % nの値を入力する.

  x = 1:n;   % 行ベクトルとなる.

  x   % xの表示

 

この方が,計算速度も速く,OctaveMatlab)らしいプログラムと言える.

 

 

練習4-1

 上記の「プログラム1」と「プログラム2」のMファイルを作成し,その実行結果が同じであることを確認してみよ.

 

 

n次のJordan細胞 Jn(l) について考える.Jordan細胞は以下のように,規則的な形をしている.主対角要素に同じ値l が,その一段上には1が入り,それ以外は全て0というものである.

  図面1.jpg

 

 

練習4-2

nを入力し,Jordan細胞を生成し,それを表示させるプログラムを作成してみよ(ヒント:教科書p.32の上部).また,diag(ones(1,5),1)のみを実行し,その結果を見てみよ.

 

 

コマンドで不明なものは,オンラインマニュアル(英語)が用意されているので,以下のように打てば,説明を見ることができる.

 help diag

 

 

2.行列の次元

 プログラム中で行列Aが与えられていて,この次元(行と列の数)を知りたいときには

  d = size(A)

とすればよい.A3×4行列の場合,

  d =

    3  4

となる.これは,d(1) = 3d(2) = 4を意味する.すなわち,d1×2行列となる.ベクトルx長さ要素数を求めるには

  n = length(x)

が便利である.コマンドlengthに,ベクトルxの代わりに行列Aを入れると,max(size(A))の値を返す.すなわち,行と列の次数の大きい方の値を返す.

 

 

 行列Aと同じ次元の零行列を作る場合は

  Z = zeros(size(A))

とする.同様に,行列Aと同じ次元で,要素が全て1の行列は

  U = ones(size(A))

とすればよい.

 

 

練習4-3

 以下の行列ABの次元,長さを調べてみよ.さらに,その行列と同じ次元の零行列と要素が全て1の行列を作成してみよ.

  図面1.jpg

 

 

―――――――――――――――――――――――――――――――――――――――――――――――――――――――

 

 

3.行列の結合と削除

 行列Aに行列Bを追加して,新しい行列Cを作ることを考える.行列Aと行列Bを横に並べて結合する図面1.jpgの場合には,

  C = [A B]

とすればよい.また,行列Aと行列Bを縦に並べて結合する図面1.jpgの場合には,

  C = [A;B]

とする.ただし,行列ABの次元が合っていないと結合することができないので注意すること.横に並べて結合する場合は,行列ABの行の数が等しいこと縦に並べて結合する場合は,行列ABの列の数が等しいことが絶対条件である.

 

 

 行列Aの第i行を削除した行列Xを作る場合は以下のようにする.

  X = A;

  X(i,:) = []

同様に,行列Aの第j列を削除した行列Yを作る場合は以下のようになる.

Y = A;

Y (:,j) = []

さらに,行列Aの第i列から第j列までを削除した行列Zを作る場合は,

Z = A;

Z(:,i:j) = []

とする.ここで,[]空行列を意味する.

 

 

練習4-4

 例題2.9(教科書p.33)を行え.可制御性行列とは,動的システムが可制御(教科書p.219参照)であるかどうかを判別する際に使用する行列である.

 

 

問題4-1

(1)      問題1.(教科書p.34)を行え.(ヒント:正整数ninput文で入力し,n次元の正方行列Rを零行列にする.次に,2つのfor文(すなわち,for i = 1:nfor j = i:n)を2重構造にし,R(i, j)の要素に値を順次入力していく.if文は必要ない.)

(2)      問題2.(教科書p.34)を行え.

(3)      問題3.(教科書p.35)を行え.

(4)      問題4.(教科書p.35)を行え.可観測性行列とは,動的システムが可観測(教科書p.224参照)であるかどうかを判別する際に使用する行列である.(ヒント:教科書p.34のプログラムex4.mを参考にせよ.)

(5)      問題5.(教科書p.35)を行え.動的システムの次数nとは,n = length(A) のことである.なお,可制御条件(rank(Uc) = n)が成立した際には「Controllable」,成立しなかった際には「Uncontrollable」と画面に表示させよ.同様に,可観測条件(rank(Uo) = n)が成立した際には「Observable」,成立しなかった際には「Unobservable」と画面に表示させよ.rank関数は行列中に存在する線形独立な行(列)の数を求めるものである.(ヒント:条件判定にはif文を用い,画面表示にはdisp文を用いる.)

 

【答え】

(4)      図面1.jpg

(5)    Uncontrollable  Observable

 

 

【レポート課題(4)(授業終了後にアップロード)

  RePORT