Octave入門
1.概要
 Octaveは、マトリクス演算を得意とするインタプリタ型言語です。ベクトル,行列を普通の 変数のように扱え演算が出来ます。又、ベクトル,行列に対する多くの関数が用意されていますし、 自分で作成する事も可能です。

Octaveの起動
 コマンド行からoctaveと打ち込むと以下のメッセージが返ってきてコマンドプロンプトが
octave: >に変わる。

 ishida> octave
 Octave, version 2.0.13 (i386-pc-cygwin32).
 Copyright (C) 1996, 1997, 1998 John W. Eaton.
 This is free software with ABSOLUTELY NO WARRANTY.
 For details, type `warranty'.

 octave: >

Octaveの終了
 quit又は、exitと打ち込む。

 octave: >quit
 ishida>


2.基本操作
変数への代入
 octave: >a=1
 a = 1
 octave: >b=2;
 octave: >
 セミコロン(;)を付けないと値がエコーバックされ付けるとされない。

値の表示
 octave: >b
 b= 2

変数の確認
 octave: >whos

 *** local user variables:

 prot type rows cols name
 ==== ==== ==== ==== ====
  wd scalar 1 1 a
  wd scalar 1 1 b

 又は、変数のみなら
 octave: >whosv

 *** local user variables:
 a b

変数の消去
 octave: >clear a

全変数の消去
 octave: >clear

現在のディレクトリのファイル表示
 octave: >ls

ディレクトリの移動
 octave: >cd ディレクトリ名

現在のディレクトリの表示
 octave: >pwd


3.基本演算
基本演算( + - * / ^ )
 octave: >a+b
 ans = 3
 octave: >b^3
 ans = 8
 octave: >(a*b+b^5-b)/b
 ans = 16

数学関数( sin cos tan asin acos atan log exp sqrt )
 octave: >sin(2)
 ans = 0.90930
 octave: >sqrt(2)
 ans = 1.4142

複素数( a+bi )
 octave: >d=2+3i
 d = 2 + 3i

複素数演算( abs angle conj real imag )
 octave: >abs(d)
 ans = 3.6056
 octave: >angle(d)
 ans = 0.98279
 octave: >conj(d)
 ans = 2 - 3i
 octave: >real(d)
 ans = 2
 octave: >imag(d)
 ans = 3

定数( pi e eps realmax realmin )
 octave: >pi
 pi = 3.1416
 octave: >e
 e = 2.7183

表示桁数( format, format long, format short )
 octave: >format long
 octave: >pi
 pi = 3.14159265358979
 octave: >format short
 octave: >pi
 pi = 3.14
 octave: >format
 octave: >pi
 pi = 3.1416


4.ベクトル,行列
ベクトルの代入
 octave: >a=[1,2,3,4,5]
 又は
 octave: >a=[1 2 3 4 5]
 a =
  1 2 3 4 5

行列の代入
 octave: >b=[1,2,3;4,5,6;7,8,9]
 又は
 octave: >b=[1 2 3;4 5 6;7 8 9]
 b =
  1 2 3
  4 5 6
  7 8 9

要素の代入
 octave: >b(1,1)=3
 b =
  3 2 3
  4 5 6
  7 8 9

値の自動生成
 octave: >a=[1:5]
 a =
  1 2 3 4 5
 1:5は1〜5までを1ずつ増加します。
 octave: >a=[1:2:10]
 a =
  1 3 5 7 9
 1:2:10は1〜10までをステップ幅2で増加します。
 octave: >a=linspace(0,10,6)
 a =
  0 2 4 6 8 10
 linspace(0,10,6)は0〜10までを6分割します。

行(列)すべての指定
 octave: >b(2,:)
 ans =
  4 5 6
 :は2行の列要素すべてを示します。

転置行列
 octave: >a'
 ans =
  1
  2
  3
  4
  5
 octave: >b'
 ans =
  3 4 7
  2 5 8
  3 6 9

総和
 octave: >sum(a)
 ans = 15

平均
 octave: >mean(a)
 ans = 3

標準偏差
 octave: >std(a)
 ans = 1.5811

逆行列
 octave: >inv(b)
 ans =
  0.50000 -1.00000 0.50000
  -1.00000 -1.00000 1.00000
  0.50000 1.66667 -1.16667

 octave: >b*inv(b)
 ans =
  1.00000 0.00000 -0.00000
  0.00000 1.00000 0.00000
  0.00000 0.00000 1.00000

行列式
 octave: >det(b)
 ans = -6.0000

固有値と固有ベクトル
 octave: >[v, lambda]=eig(b)
 v =
  0.26039 0.82956 -0.30111
  0.52079 -0.51848 -0.60221
  0.81300 -0.20739 0.73938

 lambda =
  16.36660 0.00000 0.00000
  0.00000 1.00000 0.00000
  0.00000 0.00000 -0.36660
 vは、固有ベクトルを列とする行列
 lambdaは、固有値を対角成分に持つ行列

 octave: >eye(3,3)
 ans =
  1 0 0
  0 1 0
  0 0 1
 octave: >ones(3,3)
 ans =
  1 1 1
  1 1 1
  1 1 1
 octave: >zeros(3,3)
 ans =
  0 0 0
  0 0 0
  0 0 0
 octave: >diag([1,2,3])
 ans =
  1 0 0
  0 2 0
  0 0 3

一様分布乱数
 octave: >rand(1:10)'
 ans =
  0.62004
  0.42569
  0.29085
  0.76376
  0.20599
  0.48665
  0.70437
  0.63959
  0.22085
  0.81784

正規分布乱数
 octave: >randn(1:10)'
 ans =
  0.5349851
  0.0074300
  -0.4602682
  0.7852762
  -0.7449402
  0.3090456
  -0.7289511
  1.2783966
  -1.6390365
  0.4688222

行列の演算( + - * / ^ )

行列の要素ごとの演算( .* ./ .^ )


5.グラフ表示
 グラフ表示は、データがgnuplotへリンクされる。

 octave: >x=0:0.1:1
 octave: >plot(sin(x))

 UNIX版
  ポストスクリプトファイルへの出力
   gset term postscript
   gset output "test.ps"
   replot
   gset term X11
  プリンタへの直接出力
   gset term postscript
   gset output "|lpr -Plp"
   gset term X11
  グラフの消去
   closeplot



6.例題

 ・フーリエ変換

  以下を、ファイル名 rei-1.m として作成します。

   clear
   t=0:0.001:0.6; #サンプリング周波数1000Hz
   x=sin(2*pi*100*t)+sin(2*pi*200*t); #100Hzと200Hzの信号
   y=x+2*randn(size(t)); #ランダム波と合成
   subplot(2,1,1)
   grid "on"
   title("ランダム波形")
   xlabel("(sec)")
   plot(t,y)

   Y=fft(y,512); #フーリエ変換により周波数領域に変換
   Pyy=Y.*conj(Y)/512; #Pyy−スペクトル密度 conj−複素共役
   f=1000*(0:255)/512; #最初の256点を周波数軸上にプロット
   subplot(2,1,2)
   title("スペクトル")
   xlabel("(Hz)")
   plot(f,Pyy(1:256))


 octave: >rei-1.m




 ・固有値、固有ベクトル

  以下を、ファイル名 rei-2.m として作成します。

   clear
   k=[ 120 -120 0 0 0; #剛性マトリクス
      -120 270 -150 0 0;
      0 -150 330 -180 0;
      0 0 -180 390 -210;
      0 0 0 -210 420];

   m=[0.055 0 0 0 0; #質量マトリクス
      0 0.045 0 0 0;
      0 0 0.045 0 0;
      0 0 0 0.045 0;
      0 0 0 0 0.050];

   r=inv(m)*k; # [k]{u]=p2[m][u]
   [u,p2]=eig(r); # u−固有ベクトル p2−固有値
   for i=1:5; w2(i)=p2(i,i); endfor # p2行列をw2ベクトルに代入
   for i=1:5; tt(i)=2*pi/sqrt(p2(i,i)); endfor
   [s,i]=sort(w2); # w2のソート
   u=u(:,i); # iインデックスにより固有ベクトルの並べ換え
   beta=inv(u'*m*u)*u'*m*[1 1 1 1 1]'; # beta−刺激係数
   for i=1:5;b(i,:)=beta'.*u(i,:); endfor # [βu] 刺激関数ベクトル
   b
   bb=zeros(6,5);
   for i=1:5;bb(i+1,:)=b(6-i,:); endfor # 各モード形の表示
   title("各次モード[βU]"); ylabel("(階)"); grid "on"
   plot(bb(:,1),0:5, bb(:,2),0:5, bb(:,3),0:5, bb(:,4),0:5, bb(:,5),0:5)


 octave: >rei-2.m




  Home