...

Octave の利用法(基礎編)

by user

on
Category: Documents
11

views

Report

Comments

Transcript

Octave の利用法(基礎編)
Octave の利用法(基礎編)
環境建設技術系 松本 英敏
Octave は MATLAB という商用ソフトの代用として使える非常に有用なフリーソフトです。
MATLAB は非常に高価であり、当然高機能を有しておりますが、基本的なところは同じで Octave
で作成したプログラムは、ほとんど MATLAB でも動作します。 自分自身もまだ馴染みが薄く、
ノート代わりに簡単にその使用法をまとめてみました。 これ以降、>> は Octave の起動画面
を意味します。
1.四則演算
普通のプログラミング言語と一緒で、+,−,*,/
べき乗:^,** 好きな方をお使い下さい。 >> 2^3 or 2**3
ans=8
2.その他、主な数学関数
組み込み関数
関数名
abs(z)
絶対値
real(z)
実部
imag(z)
虚部
conj(z)
共役
sqrt(x)
平方根
exp(x)
指数関数
log(x),log10(x),log2(x)
対数関数
sin(x),cos(x),tan(x)
三角関数
asin(x),acos(x),atan(x)
逆三角関数
rem(x)
余り
floor(x)
切り捨て
ceil(x)
切り上げ
round(x)
四捨五入
乱数(一様,正規) rand(x),randn(x)
3.定数
円周率 : pi >> pi pi=3.1416
自然対数の底: e >> e e=2.7183
4.桁数 default では有効数字 5 桁、倍精度実数は、format long により、15 桁表示できる。
元に戻すには、format とすればよい。 >> format long
5.入出力
・ input( ) : >> x=input(“x= ? “) >> x= ? 1 --- コンソール入力
x=?
・ disp( ) : >> disp(x) >> disp(x) --- ディスプレイ出力
1
・ データの保存
アスキー形式で変数 h を test.dat に保存する。
>> save –ascii test.dat h
バイナリ形式で変数 h を test.dat に保存する。
>> save –binary test.dat h
・ データの読み出し
>> load test.dat
>> h
6.行列 --- 改行は;を使用する。
2 1
1


行列、 4 − 5 6 は次のように入力する。


− 3 2 4
>> a=[1 2 1;4 -5 6;-3 2 4]
a=
1
2 1
2 − 5 6
−3 2 4
・すべての行列を 0 にする。 ・すべてを 1 にする。
>> h=zeros(3,4) >> h=ones(3,3)
h= h=
0 0 0 0
1 1 1
0 0 0 0 1 1 1
0 0 0 0
1 1 1
・行列のサイズ
>> size (a)
ans=
3 3
・変数を消去する。
>> clear h
・行列の追加
>> a=[1 2 3] >> b=[4 5 6]
a= b=
1 2 3 4 5 6
>> c=[a;b]
c=
1 2 3
4 5 6
・行列の一部(2,2)を変更
>> c(2,2)=10
c=
1 2 3
4 10 6
・転置する。
>> c’
1 4
2 10
3 6
転置は共役転置を意味する。実数の場合は同じであ
るが、複素数の場合は共役になる。混同しないために
は、実数の転置の場合 c.’とピリオドを付ける。
・使用されている変数名をみる。
>> who
1 2 3 


行列 M を 4 5 6 として


7 8 9 
・行列の正弦 ・平方根
>> sin(M) >> sqrt(M)
ans= ans=
0.84147
0.90930
0.14112
1.00000 1.41421 1.73205
− 0.75680 − 0.95892 − 0.27942 2.00000 2.23607 2.44949
0.65699
0.98936
0.41212
2.64575 2.82843 3.00000
・行列の平均
>> mean(M) >> mean(M.’)
ans= ans=
4 5 6 2 5 8
・逆行列
>> inv(M)
ans=
− 0.45036 0.90072 − 0.45036
0.90072 − 1.80144 0.90072
− 0.45036 0.90072 − 0.45036
・行列式
>> det(M)
ans= 0
・転置 ・複素共役転置
>> M.’ >> M’
ans= ans=
1 4 7
1 4 7
2 5 8 2 5 8
3 6 9
3 6 9
・固有値
>> [V,D]=eig(M)
V に固有ベクトルを列とする行列が返る。
D に固有値を対角成分に持つ行列が返る。
・単位行列
>> eye(3,3) >> diag([1,2,3])
ans= ans=
1 0 0
1 0 0
0 1 0 0 2 0
0 0 1
0 0 3
・ ベクトル >> diag(M)
列ベクトル b ans=
1
1


3 5
 
−1
9
を入力するには
>> b=[1;3;-1] とすれば
b=
1
3
−1
行ベクトルは
>> b=[1 3 –1]
( )が 行列 と
ベクトルでは解
が異なる。
b=
1 3 − 1
だけで、改行の;を省略すればよい。
・コロン演算子
>> [7:9] >> [0:2:10]
ans= ans=
7 8 9 0 2 4 6 8 10
・ベクトルの総和 ・ベクトルの平均
>> sum(b) >>mean(b)
ans= 3 ans= 1
・標準偏差
>> std(b)
ans= 2
・ベクトルの四則演算
>> a=[1 2 3];
>> b=[4 5 6];
>> a+b
ans=
5 7 9
>> a-b
ans=
− 3 − 3 − 3
>> a*b’ >>a*3
ans= 32 ans=
3 6 9
>> a.*b
ans=
4 10 18
>> a/b >> a./b
ans= ans=
0.41558 0.25 0.4 0.6
7.制御命令
・ if 命令 --- 真,偽の処理を分岐させる。
if(条件文) if(条件文)
処理 処理 1
end else
処理 2
end
if(条件文 1)
処理 1
elseif(条件文 2)
条件文
意 味
処理 2
a= =b
a と b が等しいとき真
else
a~ =b
a と b が等しくないとき真
処理 3
a>b
a が b より大きいとき真
end
a<b
a が b より小さいとき真
・ 条件文の組合せ
a>=b
a が b 以上のとき真
条件文 1&&条件文 2 --- and
a < =b
a が b 以下のとき真
条件文 1| |条件文 2 --- or
a
a が 0 以外のとき真
!(条件文) --- not
・ for 命令 --- 真の間繰り返す。
for n= ベクトル
繰り返し処理
end
>> for n = [1 2 3] disp(n) end
1
2
3
>> v=[1 2 3]; >> s=0;
>> s=0; >> for n=1:n
>> for n=v s=s+n;
s=s+n; end
end >> s
>> s s = 55
s=6
・ while 命令 --- 真の間繰り返したり、無限ループを作る。
while(条件文)
繰り返し処理
end
>> s=0;
>> n=1;
>> while (n < = 10)
s=s+n;
n=n+1;
end
>> s
s = 55
・ break 命令 --- 無限ループから抜け出す。
>> n=1;
>> s=0;
>>while(1)
s=s+n;
n=n+1;
if(n > 10 ) break end;
end
>> s
s = 55
8.関数定義
function 返り値 = 関数名(引数)
関数本体
>> function y = g(x)
y=x^2-x+1;
end
>> g(2)
ans = 3
9.コメント
Octave では#から行末までコメントとみなす。
10.数値解析
・連立 1 次方程式の解
x + 2y = 2
の式をマトリックス化すると
3x + 4 y = 3
1 2  x  2

   =   だから
3 4  y  3
>> a=[1 2;3 4]
>> b=[2;3]
>> inv(a)*b or >> a\b
ans = ans =
-1.00000 -1.00000
1.50000 1.50000
・ 多項式の解
y = x 3 − 8 x 2 − 3 x + 9
>> x=[1 -8 -3 9]
>> y=roots(x)
y=
8.23163
-1.16784
0.93621
・ 解から多項式を求める。
>> poly(y)
ans =
1.00000 -8.00000
-3.00000
9.00000
・ 最小二乗近似
>> x=[ 1 2 3 4 5]
>> y=[ 4 5 7 9 12]
>> polyfit(x,y,1)
ans =
2.00000 --- 傾き y = 2 x + 1.4
1.40000 --- 切片
・ 二次関数近似
>> polyfit(x,y,2)
ans =
0.28571
0.28571 y = 0.28571x 2 + 0.28571x + 3.4
3.40000
【おわりに】
以前、DSP の授業で Octave を使用したレポートの課題がありましたが、Linux 仕様であった
がため手も足も出ませんでした。 今回、Windows Version がフリーで提供されるようになり、
やっと念願の Octave を使えるようになりました。 ただし、MATLAB に比べてメジャーで無
いためマニュアルが余り整備されていません。 このノートが少しでもお役に立てれば幸いです
参考文献:北本 卓也著 Octave を用いた数値計算入門,ピアソン・エデュケーション
参考 HP:数理情報,苣木さんの Octave の使用方法説明
福井大学,浪花さんの Octave の使い方その 1,2,3
Down Load: http://download.sourceforge.net/matlinks/octave+forge.exe
Fly UP