Compose-2000:最初のOMLスクリプト
Tutorial Level: Beginner
このチュートリアルでは、以下の操作方法について説明します:
- 簡単な代入と算術演算を使用してOMLスクリプトを構築する。
- OMLでフロー制御を使用する。
- カスタム関数を作成する。
単純な代入と算術演算
-
最初のOMLスクリプトを構築するには、Editorに次のコードを追加します。
a = 1 + 3; disp ('1 + 3 equals') disp(a) disp('matrix multiply') b1 = [ 1 2; 3 4]; b2 = [4 -2;-10 0]; M1 = b1*b2; disp('b1 * b2 equals ') disp(M1) disp('matrix dot multiply') M2 = b1.*b2; disp('b1 .* b2 equals') disp(M2) disp('matrix inversion') M3 = inv(b1); disp('inverse of b1 equals ') disp(M3)
このスクリプトでは、変数a(スカラー)とb1, b2(行列)に値を代入します。つづいて、単純な代入と算術関数(add、multiply、dot multiply、およびinverse)を実行します。
この出力は、disp関数を使用してOMLCommand Windowに表示されます。
-
実行をクリックすると、OMLCommand Windowに次の内容が表示されます。
フロー制御
-
OMLでは、次にどの処理を実行するかを制御する論理演算をif文に使用できます。例えば、次のコードをOMLスクリプトに追加したとします。
a = 100; if a > 1 boo = 2; else boo = 3; end disp('boo equals ') disp(boo)
Composeでは、
a
が1
より大きい場合はboo
を5
に設定し、そうでない場合はboo
を6
に設定すると理解します。endを追加した位置で論理構造が終了します。 -
実行をクリックすると、次のように
boo
の出力が表示されます。 -
OMLは、switch、case、otherwiseによるフロー制御もサポートしています。次の例に示すように、スクリプトで複数の状況を考慮する必要がある場合は、switchによるフロー制御をお勧めします。
value = sign(ceil(randn)); switch value case -1 disp('value is -1') case 0 disp('value is 0') case 1 disp('value is 1') otherwise disp('otherwise situation') end
sign(ceil(randn))
は、-1、1、0から値を選択します。次のスクリプトは、実行するたびにOMLCommand Windowに出力される結果が異なります。
カスタム関数の作成
-
OMLでは、関数の基本構造は以下の通りです。
function funcname() statement to execute end
-
Editor windowでOMLスクリプトに関数を追加するには、次のようなコードを追加します。
function foo() disp('Inside foo'); mat = [1,2,3;4,5,6]; x = mat; disp(x); end foo()
このコードでは、まず、関数fooを宣言し、つづいてメッセージ(
Inside foo
)を出力して、この関数が呼び出されたことを通知します。その後で、行列[1,2,3;4,5,6]をmat
に代入します。x
にmat
を代入し、mat
の内容を出力します。関数simpleを呼び出すには、次のように、end
の次にfoo()
を追加します。 -
実行をクリックするとスクリプトが評価されるので、
foo
の出力を確認します。 -
可変個数の入力を扱う関数の例を以下に示します。この場合はvarargin関数を使用します。
function out = pad(varargin) if nargin == 1 option = 'zeros'; elseif nargin == 2 option = varargin{2}; else error('invalid number of input argument') end M = varargin{1}; [r,c] = size(M); if strcmp(option,'zeros') out = zeros(r+2,c+2); out(2:end-1,2:end-1) = M; elseif strcmp(option,'ones') out = ones(r+2,c+2); out(2:end-1,2:end-1) = M; else error('invalid option') end end
この関数は、入力行列の空白要素を0または1で埋めます。ここで許されるnumber of input引数の数は1または2です。次の例に、この関数に対する入力とその入力で得られる結果を示します。