next up previous
Next: 7 関数 Up: octave_kiso_out Previous: 5 Fileによる''Octave''の操作

Subsections


6 行列とベクトル(2)

6.1 行列関数の練習

行列式(determinant)や逆行列(inverse)を求めることができます。 先ほどのファイルの最後に以下の2式を書き込んでみましょう。
H3 = det(H2)
H4 = inv(H2)
と入力します。``H1- H2'', ``H1 + H2'', ``H1 * H2'' は、削除しておいても 結構です。

\includegraphics[width=16cm]{/home/nisimiya/Bunsho/Daigaku_and_Jimu/Lesson/Subject/Computer_kisoron/Octave/Fig/octave04.eps}

新しいファイル名''ex_2.m''等のファイル名で保存しましょう。

実行してみてください。

octave ex_2.m 
GNU Octave, versi.0.16 (i386-vine-linux-gnu).
Copyright (C) 1996, 1997, 1998, 1999, 2000 John W. Eaton.
This is free software with ABSOLUTELY NO WARRANTY.
For details, type `warranty'.

H1 =

  1  2  3
  4  5  6
  7  8  9

H2 =

  12  12  13
  14  15  16
  17  18  19

H3 = -3.0000
H4 =

   1.00000  -2.00000   1.00000
  -2.00000  -2.33333   3.33333
   1.00000   4.00000  -4.00000

>

ちなみに、``H1''の行列式は''0''に なるので、``H1''の逆行列は求まりません。

求めた逆行列が本当に正しいかどうかを確かめてみましょう。 そう、2つの行列の積を計算し、単位行列になるかどうか調べてみます。



\includegraphics[width=16cm]{/home/nisimiya/Bunsho/Daigaku_and_Jimu/Lesson/Subject/Computer_kisoron/Octave/Fig/octave05.eps}

以下は実行結果です。

> octave ex_3.m 
GNU Octave, version 2.0.16 (i386-vine-linux-gnu).
Copyright (C) 1996, 1997, 1998, 1999, 2000 John W. Eaton.
This is free software with ABSOLUTELY NO WARRANTY.
For details, type `warranty'.

H1 =

  1  2  3
  4  5  6
  7  8  9

H2 =

  12  12  13
  14  15  16
  17  18  19

H3 = -3.0000
H4 =

   1.00000  -2.00000   1.00000
  -2.00000  -2.33333   3.33333
   1.00000   4.00000  -4.00000

ans =

  1.00000  0.00000  0.00000
  0.00000  1.00000  0.00000
  0.00000  0.00000  1.00000


>
確かに計算結果が単位行列になっていることが分かります。

6.2 行列関数の応用

それでは、以下の連立方程式を解いてみましょう。 手計算で行うのはやっかいです。

\begin{eqnarray*}
3 x + 4 y - 2 z &=& 24 \\
-12 x + 8 y - 6 z &=& -35 \\
15 x - 6y + 8 z &=& 33
\end{eqnarray*}

これは行列を作り、以下のように考えます。
\begin{displaymath}
\left(
\begin{array}{ccc}
3 & 4 & -2 \\
-12 & 8 & -6 \\
15...
...\left(
\begin{array}{c}
24 \\
-35 \\
33
\end{array}
\right)
\end{displaymath} (3)

ここで、式の両辺に左辺の逆行列を乗算します。

\begin{displaymath}
{\left(
\begin{array}{ccc}
3 & 4 & -2 \\
-12 & 8 & -6 \\
1...
...eft(
\begin{array}{c}
24 \\
-35 \\
33
\end{array}\right) \\
\end{displaymath} (4)

上式の左辺の行列部分は単位行列になるので、$x,y,z$を求めることができます。
\begin{displaymath}
\left(
\begin{array}{c}
x \\
y \\
z
\end{array}\right)
=
{...
...
\left(
\begin{array}{c}
24 \\
-35 \\
33
\end{array}\right)
\end{displaymath} (5)

今の手順を``Octave''で行ってみましょう。 新しいファイルを作成し実行してみましょう。

\includegraphics[width=16cm]{/home/nisimiya/Bunsho/Daigaku_and_Jimu/Lesson/Subject/Computer_kisoron/Octave/Fig/octave06.eps}

ここでは、ファイル名``ex_4.m''で保存したと仮定します。 それでは実行してみます。

> octave ex_4.m 
GNU Octave, version 2.0.16 (i386-vine-linux-gnu).
Copyright (C) 1996, 1997, 1998, 1999, 2000 John W. Eaton.
This is free software with ABSOLUTELY NO WARRANTY.
For details, type `warranty'.

A =

    3    4   -2
  -12    8   -6
   15   -6    8

B =

   24
  -35
   33

C =

   0.137255  -0.098039  -0.039216
   0.029412   0.264706   0.205882
  -0.235294   0.382353   0.352941

X =

   5.4314
  -1.7647
  -7.3824

>

いとも簡単に答がでてしまいました。

6.2.1 演習

以下の方程式を解いてください。

\begin{eqnarray*}
3.8 x + 6.4 y - 20 z &=& 2.49 \\
-12.9 x + 9.8 y - 65 z &=& -3.5 \\
1.5 x - 3.6y + 8.8 z &=& 3.3
\end{eqnarray*}

6.3 行列の演算

2つの行列の各要素の足し算、引き算はできるようになったが、 かけ算はどうするか?

つまり

\begin{eqnarray*}
A &=& [1  2  3  4  5] \\
B &=& [ 5  4  3  2  1 ] \\
...
... \times 2 \hspace{1em} 5 \times 1 ] \\
&=& [5  8  9  8  5]
\end{eqnarray*}

とするにはどうすればよいか。
octave:45> A =[1 2 3 4 5]
A =

  1  2  3  4  5

octave:46> B = [ 5 4 3 2 1 ]
B =

  5  4  3  2  1

octave:47> C=A*B
error: operator *: nonconformant arguments (op1 is 1x5, op2 is 1x5)
error: evaluating assignment expression near line 47, column 2
エラーになってしまう。

実は ``*'' ではなく ``.*''を利用します。すなわち、ドットをつけて下さい。

octave:47> C=A.*B
C =

  5  8  9  8  5

それでは全ての要素を3乗するにはどうするか?

octave:48> D = A.*A.*A
D =

    1    8   27   64  125
または、
octave:49> D=A.**3
D =

    1    8   27   64  125

6.4 行列の要素に対する操作

6.4.1 要素の取り出し等

行列の要素を取り出す場合は、どのようにすればよいでしょうか。 例えば以下の行列を用意します。``gedit''などのエディターを立ち上げて入力 してみましょう。

\begin{eqnarray*}
A &=& [15  25  35  45  55  65  75  85  95  105] \\
\end{eqnarray*}

[nisimiya]$ gedit gyouretsu_1.m &
試しに以下のように打ち込んでみましょう。

\includegraphics[width=16cm]{/home/nisimiya/Bunsho/Daigaku_and_Jimu/Lesson/Subject/Computer_kisoron/Octave/Fig/octave14.eps}

保存して実行してください。

[nisimiya]$ octave gyouretsu_1.m
GNU Octave, version 2.0.16 (i386-vine-linux-gnu).
Copyright (C) 1996, 1997, 1998, 1999, 2000 John W. Eaton.
This is free software with ABSOLUTELY NO WARRANTY.
For details, type `warranty'.

ans = 15
ans = 55
ans = 50
``Octave''では、行列も関数と同じように扱うことができる。 n個目の要素はA(n)などとすれば取り出せる。 ここで、行列のサイズと各要素の和を求める関数も確認しておきましょう。 それぞれ ``size(A), sum(A)''と打ち込みます。

\includegraphics[width=16cm]{/home/nisimiya/Bunsho/Daigaku_and_Jimu/Lesson/Subject/Computer_kisoron/Octave/Fig/octave15.eps}

実行してみて下さい。

[nisimiya]$ octave gyouretsu_1.m
GNU Octave, version 2.0.16 (i386-vine-linux-gnu).
Copyright (C) 1996, 1997, 1998, 1999, 2000 John W. Eaton.
This is free software with ABSOLUTELY NO WARRANTY.
For details, type `warranty'.

ans = 15
ans = 55
ans = 50
okisa =

  1  9

goukei = 525
sizeが1行9列、各要素の合計が525となりました。

次にn行m列の行列の場合はどうすればよいか。

\begin{displaymath}
{\left(
\begin{array}{cccc}
11 & 12 & 13 &14 \\
21 & 22 & 2...
...& 33 & 34 \\
41 & 42 & 43 & 44
\end{array}\right)} \nonumber
\end{displaymath}  

以下のように保存して実行してみましょう。
B = [11 12 13 14; 21 22 23 24; 31 32 33 34; 41 42 43 44]
B(1,3)
B(3,2)
B(3,3) + B(1,4)

ookisa = size(B)
これは、エディター上のリストです。 ファイル名を ``gyouretsu_2.m''などとして、保存してみましょう。 実行は以下のようにします。
[nisimiya]$ octave gyouretsu_2.m
GNU Octave, version 2.0.16 (i386-vine-linux-gnu).
Copyright (C) 1996, 1997, 1998, 1999, 2000 John W. Eaton.
This is free software with ABSOLUTELY NO WARRANTY.
For details, type `warranty'.

B =

  11  12  13  14
  21  22  23  24
  31  32  33  34
  41  42  43  44

ans = 13
ans = 32
ans = 47
ookisa =

  4  4
それぞれ1行3列、3行2列など、表示されています。 行列のサイズも表示されています。

6.4.2 要素の演算

行列に作用させ、平均値や標準偏差などを求める関数用意されておりま す。これらを以下に示します。かっこ内はベクトルです。

最小値 min(x)
最大値 max(x)
総和 sum(x)
平均 mean(x)
標準偏差 std(x)
総積 prod(x)

例えば、以下の行列の要素の最大値、最小値、総和、平均、標準偏差、総積を求 めてみよう。

A = [2  4  6  8  10  12 14 16]
saidai = max(A)
saisho = min(A)
souwa = sum(A)
heikin = mean(A)
hensa = std(A)
souseki = prod(A)



(実行結果)

A =

   2   4   6   8  10  12  14  16

saidai = 16
saisho = 2
souwa = 72
heikin = 9
hensa = 4.8990
souseki = 10321920

6.4.3 練習

  1. 数列の和 $1 + 2 + \cdots + 10$を計算せよ。

    (解答例 1)
    A = [1 2 3 4 5 6 7 8 9 10]
    B=sum(A)
    
    (解答例 2)
    A = 1:1:10
    sum(A)
    
    "A = 1:1:10" と言うのは、A = [1 2 3 4 5 6 7 8 9 10] とまったく同じ意味になります。 すなわち、``1''からスタートし ``1'' きざみで ``10''までの行列(1行の)を作る ときのコマンドです。

  2. 数列の和 $0.1 + 0.2 + 0.3 + \cdots + 99.9 +100$ を計算せよ。

6.5 行列の共役転置

先ほどの行列Bの共役転置を求めてみましょう。
B = [11 12 13 14; 21 22 23 24; 31 32 33 34; 41 42 43 44]
C = B'
上記リストをエディターで作成し、実行させると転置行列が求まる。 下記の実行例は、ファイル名``gyouretsu_3.m''で保存した場合です。
[nisimiya]$ octave gyouretsu_3.m
GNU Octave, version 2.0.16 (i386-vine-linux-gnu).
Copyright (C) 1996, 1997, 1998, 1999, 2000 John W. Eaton.
This is free software with ABSOLUTELY NO WARRANTY.
For details, type `warranty'.

B =

  11  12  13  14
  21  22  23  24
  31  32  33  34
  41  42  43  44

C =

  11  21  31  41
  12  22  32  42
  13  23  33  43
  14  24  34  44

6.5.1 練習

  1. ベクトルA=[2 4 6 8]とB=[ 4 8 10 7]の内積を求めよ。

    (解答例)

    リスト:
    
    A=[2 4 6 8];
    B=[ 4 8 10 7];
    
    A * B'
    
    実行例:
    [nisimiya]$ octave ex_vec1.m
    GNU Octave, version 2.0.16 (i386-vine-linux-gnu).
    Copyright (C) 1996, 1997, 1998, 1999, 2000 John W. Eaton.
    This is free software with ABSOLUTELY NO WARRANTY.
    For details, type `warranty'.
    
    ans = 156
    

  2. ベクトルA=[2 4 6 8 9 -7] の大きさを求めよ。

    (解答例)

    ######### program ###############
    A=[2 4 6 8 9 -7]
    
    B = A * A'
    sqrt(B)
    #################################
    
    実行例:
    [nisimiya]$ octave ex_vec2.m
    GNU Octave, version 2.0.16 (i386-vine-linux-gnu).
    Copyright (C) 1996, 1997, 1998, 1999, 2000 John W. Eaton.
    This is free software with ABSOLUTELY NO WARRANTY.
    For details, type `warranty'.
    
    B = 250
    ans = 15.811
    

6.5.2 演習

  1. ベクトルA=[2 4 6 8 9 ] の大きさを求めよ。(数学ではベクトルの大 きさを$\vert A\vert$と表記する。)
  2. ベクトルB=[1 3 -6 8 -10]の大きさを求めよ。
  3. ベクトルA=[2 4 6 8 9 ]とB=[1 3 -6 8 -10]の内積を求めよ。(数学では 内積を $A\cdot B$ と表記する。)
  4. $\frac{ \displaystyle A\cdot B}{\displaystyle \vert A\vert \vert B\vert}$を計算せよ。


next up previous
Next: 7 関数 Up: octave_kiso_out Previous: 5 Fileによる''Octave''の操作
Nobuo Nishimiya
平成20年6月3日