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 |