#前回まで
前回までに,octaveにおける基本操作,データプロットを中心にまとめました.
Octaveコマンドまとめ1 -基本操作(主にベクトル)-
Octaveコマンドまとめ2 -データプロット-
今回はif文, for文, while文, 関数についてまとめます.
前回までと同じく, 内容はAndrew Ng 先生の『Octave/Matlab Tutorial』のまとめです.
##条件式
octaveでのif文の使い方は以下の通りです.
3つ以上の分岐 は elseif により可能です.
(octaveでは**end;**があるため, if内の字下げはしなくても大丈夫です. )
>> a = 2;
>> if a == 1,
disp('The value is one');
elseif a == 2,
disp('The value is two');
else
disp('The value is neither one nor two');
end;
>>
The value is two
##ループ
###for文
for文は, 配列の中身を順番に取り出してループします.
下記は,『1 : 10 で 1 2 ... 9 10 の配列を生成し,その中身を順番にiに入れループする』例です.
(octaveでは**end;**があるため, for内の字下げはしなくても大丈夫です. )
>> for i = 1:10,
v(i) = 2*i;
end;
>> v %結果表示
v =
2 4 6 8 10 12 14 16 18 20
###while
whileを用いたループもあります.
while文は, 条件を満たす限りずっとループします.
下記は, 『i が5以下ならばループする』例です. v配列の最初の5つを100に置き換えします.
(while内も字下げしなくても大丈夫です. )
>> for i = 1:10, % 配列生成
v(i) = 2*i;
end;
>> i=1;
>> while i <= 5,
v(i) = 100;
i =i+1;
end;
>> v %結果表示
v =
100 100 100 100 100 12 14 16 18 20
if文によるループ抜け出し
if文を用いると, while文のループを抜け出せます.
下記は i が6になったらループを抜ける例です.
>> for i = 1:10, % 配列生成
v(i) = 2*i;
end;
>> i = 1;
>> while true,
v(i) = 999;
i = i+1;
if i ==6,
break;
end; % if文
end; % while文
>> v
v =
999 999 999 999 999 12 14 16 18 20
##関数
octaveはfunctionで関数を定義することができます.
今回は 関数名.mのファイルを作成し, そこに関数を定義します.
以下は, squareCube関数を定義しています.
function [y1 , y2] = squareCube(x)
y1 = x^2;
y2 = x^3;
一行目は 関数がy1 , y2の値を返すこと, 関数名はsquareCubeであること, 引数は xであることを示しています.
二行目以降が関数の中身で, 関数が返す値 y1 , y2を定義します.
作成した関数は, 引数を与えて以下のように使用できます.
>> [a,b] = squareCube(5);
a = 25
b = 125
関数を定義したファイルがあるディレクトリでしか 関数は引用できません.
そんなときは, コマンドプロンプトでaddpath('パス名') により検索パスを追加できます (関数を定義したファイルとは別のディレクトリにいても関数を引用できるようになります).
machine learningのプログラミング課題では, 関数の中身をコーディングするのが主ですので意味をしっかり知っておくと良さげです.
##最後に便利かもしれないことを少し
・よくわからないものは helpコマンドで調べましょう.
>> help eye
'eye' is a built-in function from the file libinterp/corefcn/data.cc
-- eye (N)
-- eye (M, N)
-- eye ([M N])
-- eye (..., CLASS)
Return an identity matrix.
If invoked with a single scalar argument N, return a square NxN
identity matrix.
%(以下省略)
・who で変数一覧, whos で詳細付き変数一覧を見ることができます.
>> who
Variables in the current scope:
A a b
>> whos
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
A 3x3 72 double
a 1x1 8 double
b 1x10 24 double
Total is 20 elements using 104 bytes
・clear で変数をすべて消すことができます. 変数を指定すると, その変数のみ消すことができます.
>> who
Variables in the current scope:
A a b
>> clear a
>> who
Variables in the current scope:
A b
>> clear
>> who
>>
・デバッグには, machine learning授業概要の参考資料の中にある [Test cases] が非常に便利です(これほんとめっちゃ使えます).
まとめは以上になります.
こちらでOctaveのヘルプを見ることができますので, 英語が得意な方はぜひ.