2015.7.13 コンピュータ数学 MATLAB・Scilab の使い方 – 行列とベクトルの計算 – 本資料では,MATLAB,及び Scilab における行列・ベクトルの計算について説明します.MATLAB のコ ンソールは >>,Scilab のコンソールは --> と表示されます. 基本的な演算命令 1 1.1 演算子 MATLAB,Scilab では表 1 にある演算子を用いて,四則演算とべき乗を計 算できます. 表 1 MATLAB・Scilab の演算子. >> a = 1.4; >> b = 3.5; 演算 演算子 >> a + b 加算 + ans = 減算 - 乗算 * 除算 / べき乗 ^ 4.9000 >> a - b ans = -2.1000 >> a * b ans = 4.9000 >> a / b ans = 0.4000 >> a^2 ans = 1.2 1.9600 ベクトル・行列の定義と演算 ベクトルと行列の定義 1.2.1 MATLAB,Scilab ではベクトルと行列を簡単に定義することができます.例えば 3 次元ベクトル x として 1 x= 2 3 を定義するには, >> x = [1; 2; 3] x = 1 2 3 と入力します.x の成分 1, 2 の後にセミコロン ; が入っていますが,これは改行を表しています.セミコロ ンをつけないで入力すると, 1 >> x = [1 2 3] x = 1 2 3 となり,x は 3 次元行ベクトルとして定義されます. 行列も同じように定義できます.例えば,3 行 3 列の行列 1 A= 4 7 2 5 8 3 6 9 を定義するには, >> A = [1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 と入力します.この行列は 1 行あたり 3 つの要素があるので,3 つの要素ごとにセミコロンをつけて改行し ます. 行列とベクトルの要素の参照方法 1.2.2 MATLAB,Scilab では,行列やベクトルの特定の要素を参照することができます.例えば上記の行列 A の 3 行 1 列目を参照したい場合は >> A(3,1) ans = 7 と入力すると,7 という要素が書き出されます.ベクトルの場合も同様に, >> x(2) ans = 2 で参照が可能です.x(2,1) としても同様の結果が得られます. 行列・ベクトルに関する演算 1.2.3 ◦ 行列・ベクトルの加算と減算 行列とベクトルにおける加算と減算を行うには,2 つの行列・ベクトルの行数と列数は等しくなければいけ ません. >> A = [1 2 3;4 5 6;7 8 9]; >> A = [1 2 3;4 5 6;7 8 9]; >> x = [1; 4; 6]; >> B = [1 3 5;7 9 2;4 6 8]; >> B = [1 3 5;7 9 2;4 6 8]; >> y = [1; 3; 5]; >> A + B >> A - B >> x + y ans = ans = ans = 2 5 8 0 -1 -2 2 11 14 8 -3 -4 4 7 11 14 17 3 2 1 11 図1 行列の加算. 図2 行列の減算. 2 図3 ベクトルの加算. ◦ 行列とベクトルに関する乗算 行列の乗算 A * B の計算では,行列 A の列数と行列 B の行数が等しくないといけません.A または B がベ クトルの場合も同様です.下記の一番右の例では,A の列数と B の行数が等しくないため,エラーメッセージ が表示されています(Scilab では,エラーメッセージの内容が若干異なります). >> A = [1 2 3;4 5 6;7 8 9]; >> A = [1 4 6; 2 7 9]; >> A = [1 2; 4 5; 7 8]; >> x = [3; 7; 5]; >> B = [1 3;5 6;7 8]; >> B = [1 3 5;7 9 2;4 6 8]; >> A * x >> A * B >> A * B ans = ans = Error using 32 63 75 77 100 120 * Inner matrix dimensions must agree. 122 図4 行列とベクトルの乗算. 図5 行列の乗算. 図6 行列の乗算が定義されない例. ◦ 行列のべき乗 行列でもスカラーと同じように,演算子^ を用いて行列のべき乗を計算することができます.但し,行列の べき乗は行数と列数が等しい正方行列の場合に限ります. >> A = [2 3 -1; 4 7 8;-5 9 6] >> A = [2 3 -1; 4 7 8;-5 9 6] >> A = [2 3 -1; 4 7 8;-5 9 6] A = >> A^2 >> A^3 ans = ans = 2 3 -1 21 18 16 34 333 219 4 7 8 -4 133 100 24 1819 1668 -5 9 6 -4 102 113 -165 1719 1498 図7 行列 A. 図8 行列 A の 2 乗 (A2 ). 図9 行列 A の 3 乗 (A3 ). ◦ 行列の転置 行列を転置させたい場合は,変数の後に .’ をつけます. >> A = [1 2 3; 4 5 6] >> x = [1; 2; 3]; A = >> y = [2; 5; 9]; 1 2 3 4 5 6 >> x.’ * y ans = >> A.’ 39 ans = 1 4 2 5 3 6 図 10 行列 A とその転置. 図 11 ベクトル x の転置とベクトル y の積(内積の計算). 3 数学で用いられる定数と関数 2 円周率 π は,MATLAB では pi,Scilab では %pi という変数で,あらかじめ登録されています.ですので, 円周率を自分で手入力する必要はありません.(もし円周率が登録されていない環境で円周率が必要になった 場合は,π = 4 arctan 1 という式を使って計算すると楽です.覚えておきましょう.) 数学で用いられる代表的な MATLAB,Scilab の組み込み関数を表 2 に示します.Mathematica と異なり, MATLAB,Scilab の組み込み関数は 関数名は全て小文字で,カッコは ( ) です.もしエラーが出た場 合は,カッコを確認してみましょう. 表 2 MATLAB・Scilab の組み込み関数. 関数 MATLAB・Scilab の組み込み関数 sin x sin(x) cos x cos(x) tan x tan(x) log x log(x) log10 x log10(x) x exp(x) e √ x sqrt(x) arcsin x asin(x) arccos x acos(x) arctan x atan(x) |x| (x の絶対値) abs(x) 行列に関する命令 3 3.1 値の代入などを行う命令 行列に値を代入する命令として,以下の命令が用意されています. • zeros:全ての要素の値が 0 の行列を設定する命令 m = 2; n = 3; A = A = zeros(m,n) =⇒ 0 0 0 0 0 0 • ones:全ての要素の値が 1 の行列を設定する命令 m = 3; n = 2; A = A = ones(m,n) =⇒ 1 1 1 1 1 1 • eye:対角要素が 1,その他の要素が 0 の行列を設定する命令(正方行列でなくてもよい) m = 3; n = 2; A = A = eye(m,n) =⇒ 1 0 0 1 0 0 4 • rand:行列要素を乱数で設定する命令 m = 2; n = 3; A = A = rand(m,n) =⇒ 0.7968 0.1588 0.8478 0.1138 0.3558 0.5828 • diag:対角要素だけを取り出す命令 m = 2; n = 3; ans = A = rand(m,n); =⇒ diag(A) 3.2 0.7968 0.3558 行列に関する演算を行う命令 MATLAB,Scilab には,行列の行列式,階数,逆行列を計算したり,連立一次方程式を解く命令などが用 意されています. • det:行列の行列式を求める命令(正方行列でなくてはいけません) m = 3; n = 3; ans = A = rand(m,n); =⇒ det(A) -0.0994 • rank:行列の階数を求める命令 m = 50; n = 100; ans = A = rand(m,n); =⇒ rank(A) 50 • inv:行列の逆行列を求める命令 A = [ 1 -1 0; -1 2 -1; 0 -1 2 ]; ans = =⇒ X = inv(A); 3 2 1 X 2 2 1 A*X 1 1 1 1 0 0 0 1 0 0 0 1 ans = • \(バックスラッシュ):連立一次方程式を解く命令 m = 3; n = 3; x = A = rand(m,n); =⇒ -10.1395 b = rand(m,1); x = A\b norm(b-A*x) 3.7206 -0.3592 ans = 7.3277e-16 連立一次方程式 Ax = b を解いて x を求め,∥b − Ax∥2 を計算しています.誤差の影響でこの値は完 全に 0 にはなりませんが,十分に良い x が求められていることを示しています.7.3277e-16 が出力結 果として表示されていますが,これは 7.3277 × 10−16 を表しています. 【補足】Mac OS X 環境におけるバックスラッシュの入力について Mac OS X 環境でバックスラッシュを入力するには,「option キー」を押しながら「Y =キー」を押します. 5
© Copyright 2024 ExpyDoc