Compose-2000:最初のOMLスクリプト

Tutorial Level: Beginner

このチュートリアルでは、以下の操作方法について説明します:
  • 簡単な代入と算術演算を使用してOMLスクリプトを構築する。
  • OMLでフロー制御を使用する。
  • カスタム関数を作成する。

単純な代入と算術演算

  1. 最初の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(行列)に値を代入します。つづいて、単純な代入と算術関数(addmultiplydot multiply、およびinverse)を実行します。

    この出力は、disp関数を使用してOMLCommand Windowに表示されます。

  2. 実行をクリックすると、OMLCommand Windowに次の内容が表示されます。

フロー制御

  1. OMLでは、次にどの処理を実行するかを制御する論理演算をif文に使用できます。例えば、次のコードをOMLスクリプトに追加したとします。
    a = 100;
    if a > 1
          boo = 2;
    else
          boo = 3;
    end
    disp('boo equals ')
    disp(boo)

    Composeでは、a1より大きい場合はboo5に設定し、そうでない場合はboo6に設定すると理解します。endを追加した位置で論理構造が終了します。

  2. 実行をクリックすると、次のようにbooの出力が表示されます。
  3. 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に出力される結果が異なります。

カスタム関数の作成

  1. OMLでは、関数の基本構造は以下の通りです。
    function funcname()
          statement to execute
    end
  2. Editor windowOMLスクリプトに関数を追加するには、次のようなコードを追加します。
    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に代入します。 xmatを代入し、matの内容を出力します。関数simpleを呼び出すには、次のように、endの次にfoo()を追加します。

  3. 実行をクリックするとスクリプトが評価されるので、fooの出力を確認します。
  4. 可変個数の入力を扱う関数の例を以下に示します。この場合は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です。次の例に、この関数に対する入力とその入力で得られる結果を示します。