LoginSignup
1
2

More than 1 year has passed since last update.

Octaveコマンドまとめ3 -for, while, if, 関数-

Last updated at Posted at 2019-09-06

前回まで

前回までに,octaveにおける基本操作,データプロットを中心にまとめました.

Octaveコマンドまとめ1 -基本操作(主にベクトル)-
Octaveコマンドまとめ2 -データプロット-

今回はif文, for文, while文, 関数についてまとめます.
前回までと同じく, 内容はAndrew Ng 先生の『Octave/Matlab Tutorial』のまとめです.

条件式

octaveでのif文の使い方は以下の通りです.
3つ以上の分岐 は elseif により可能です.
(octaveではend;があるため, if内の字下げはしなくても大丈夫です. )

if.m

>> 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 : 101 2 ... 9 10 の配列を生成し,その中身を順番にiに入れループする』例です.
(octaveではend;があるため, for内の字下げはしなくても大丈夫です. )

roop.m
>> 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内も字下げしなくても大丈夫です. )

roop.m
>> 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になったらループを抜ける例です.

roop_if.m
>> 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関数を定義しています.

squareCube.m
function [y1 , y2] = squareCube(x)
   y1 = x^2;
   y2 = x^3;

一行目は 関数がy1 , y2の値を返すこと, 関数名はsquareCubeであること, 引数は xであることを示しています.
二行目以降が関数の中身で, 関数が返す値 y1 , y2を定義します.

作成した関数は, 引数を与えて以下のように使用できます.

function.m
>> [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のヘルプを見ることができますので, 英語が得意な方はぜひ.

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2