Main Content

MATLAB コードの Stateflow フロー チャートへの変換

MATLAB® コードを Stateflow® フロー チャートとグラフィカル関数に変換するには、パターン ウィザードを使用します。変換でサポートされるパターンには次が含まれます。

  • ifif-else およびその他の入れ子形式の判定ステートメント。

  • for ループと while ループ。

  • switch ステートメント。

パターン ウィザードでは MATLAB 関数とスクリプトを変換できます。

  • MATLAB 関数は Stateflow グラフィカル関数に変換されます。

  • MATLAB スクリプトは Stateflow フロー チャートに変換されます。

スタンドアロンの Stateflow チャートでのみ、MATLAB コードの変換がサポートされます。詳細については、MATLAB オブジェクトとして実行する Stateflow チャートの作成を参照してください。

MATLAB スクリプトからのフロー チャートの作成

次の MATLAB スクリプトはコラッツ予想の 1 インスタンスを経験的に検証します。数値入力 u が指定されると、スクリプトは次の規則を反復してヘイルストーン数列 n0 = u, n1, n2, n3, ⋯ を計算します。

  • ni が偶数の場合は、ni+1 = ni/2

  • ni が奇数の場合は、ni+1 = 3ni + 1

コラッツ予想では、すべての正の整数は、最終的に 1 に到達するヘイルストーン数列をもつことが主張されています。

% Hailstone sequence u, c(u), c(c(u)),...
y = u;
while y(end) ~= 1
    y(end+1) = c(y(end));
end
disp(y);

function n = c(n)
% Compute next number in hailstone sequence.
% If n is even, then c(n) = n/2.
% If n is odd, then c(n) = 3*n+1.
    if rem(n,2) == 0
        n = n/2;
    else
        n = 3*n+1;
    end
end
スクリプトは、出力値が 1 になるまで補助関数 c を繰り返し呼び出す while ループを実行します。関数 c は、出力が入力のパリティに依存する、条件付きの if-else ステートメントで構成されます。

このスクリプトをフロー チャートとグラフィカル関数に変換するには、次を行います。

  1. 新しいスタンドアロン チャートを開きます。

    edit hailstone.sfx
  2. [ステート チャート] タブで [パターン][ファイルの選択] を選択します。

  3. ダイアログ ボックスで、MATLAB スクリプトを選択して [開く] をクリックします。パターン ウィザードによって Stateflow チャートにフロー チャートとグラフィカル関数が追加されます。グラフィカル関数をダブルクリックして、その内容を表示します。

    Flow chart that automatically generated from a MATLAB script.

  4. [シンボル] ペインで [未定義のシンボルを解決] をクリックします。Stateflow エディターによって uy がローカル データとして解決されます。

  5. チャートを保存します。

  6. チャートを Stateflow エディターから実行するには、[シンボル] ペインに u = 9 の値を入力して [実行] をクリックします。フロー チャートの実行中、Stateflow エディターではチャート アニメーションによってアクティブな遷移が強調表示されます。実行が停止すると、MATLAB コマンド ウィンドウに 9 の値から始まるヘイルストーン数列が表示されます。

         9    28    14     7    22    11    34    17    52    26    13    40    20    10     5    16     8     4     2     1
    
  7. [停止] をクリックします。

生成されたフロー チャートとグラフィカル関数をコピーして、Simulink® モデル内の Stateflow チャートを含む他のチャートに貼り付けることができます。MATLAB コードで Simulink のコード生成が制限される機能が使用されている場合、チャートのシミュレーションを行う前にフロー チャートのアクションを変更しなければなりません。詳細については、Stateflow チャートでの外部 MATLAB 関数の呼び出しを参照してください。

メモ

チャート内のグラフィカル関数に変換する MATLAB 関数で nargin が使用されているとします。nargin はチャート オブジェクトをグラフィカル関数の入力引数の 1 つとしてカウントするため、グラフィカル関数の nargin の値は、元の MATLAB 関数での nargin の値に 1 を加えたものと等しくなります。詳細については、スタンドアロンのチャートの実行を参照してください。

関連するトピック